java基础入门(一)
idea常用快捷键
Ctrl + Alt + L 格式化
Shift + F10 编译运行
Alt + Insert 插入构造器
Ctrl + H 显示继承关系
Alt+Enter new完对象后可以直接分配变量名
idea 断点调试
- 跳入(F7): 跳入方法内(可以查看JDK原码)
- 跳过(F8): 逐行执行代码
- 跳出(shift+F8):跳出方法
- 继续(F9):跳到下一个断点
JUnit
JUnit是一个Java语言的单元测试框架,多数Java的开发环境已经继承了JUnit作为单元测试工具。
使用方式
如果在编写主方法时添加了很多非静态的方法,则在逐个测试方法时需要在main()函数中挨个new出来,再逐个测试。这样做非常的麻烦,可以点击Alt + Enter
安装JUnit框架,在需要测试的方法上加@Test
标识,则该方法前面会出现绿色的运行按钮,这样不需要在main()函数中声明也可以快速执行方法。
public class Test{ |
包(package)
包本质就是文件夹,创建不同的文件夹/目录来保存类文件。
作用
- 区分相同名字的类
- 更好的管理类
- 控制访问范围
使用
package 文件夹名.文件夹名…
在import上面写,使用idea时会自动添加。
访问修饰符
访问级别 | 访问控制修饰符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | × |
默认 | 无修饰符 | √ | √ | × | × |
私有 | private | √ | × | × | × |
面向对象
封装、继承、多态
封装
封装(encapsulation)就是把抽象出的属性和方法封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作。
实现步骤
将属性私有化
提供一个public的类set方法,用于对属性判断并赋值
提供一个public的类get方法,用于获取属性的值
继承
当两个类的属性和方法有很多相同部分时,需要继承。即当多个类存在相同的属性和方法时,可以抽象出父类,在父类中定义这些相同的属性和方法,子类不需要重新定义这些属性和方法,只需要通过extends
来声明继承。
优点
- 提高代码复用性
- 提高代码扩展性和可维护性
用法
class 子类 extends 父类{ |
性质
- 子类自动拥有父类定义的属性和方法
- 父类又叫超类,基类
- 子类又叫派生类
- 一个子类只能有一个直接父类(只能继承一个类),但是可以有很多祖宗类(父类又继承了一个超类,那个超类又继承了一个超类……)
- 子类必须调用父类的构造器, 完成父类的初始化
- 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器。如果父类没有提供无参构造器,则必须在子类的构造器中用
super
去指定使用父类的哪个构造器完成对父类的初始化工作 super
和this
都只能放在构造器第一行,因此这两个方法不能共存在一个构造器- java所有类都是
Object
类的子类,Object
是所有类的基类
多态
方法或对象具有多种形态,多态是建立在封装和继承基础之上的。
具体体现
- 方法的多态(重载和重写等)
- 对象的多态
- 一个对象的编译类型和运行类型可以不一致
- 编译类型在定义对象时即确定,运行类型可以变化。
对象的向上转型
父类的引用指向子类的对象
特点
可以调用父类中所有成员(遵守访问权限)
不能调用子类特有的方法(编译阶段能调用哪些成员,由编译类型决定)
最终运行效果看子类(运行类型)的具体实现,即调用方法时,按照从子类(运行类型)开始查找方法。
对象的向下转型
父类对象转换成子类对象。与向上转型不同,向下转型是不安全的
演示
public class A { |
动态绑定
当调用对象方法时,该方法会和该对象的内存地址(运行类型)绑定
当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用。
补充:instanceOf
是比较操作符,用于判断对象的运行类型是否为某类型或某类型的子类型。
类的五大成员
属性、方法、构造器、代码块、内部类
属性/成员变量/字段
就是类中定义的变量。
public class Employee{ |
注意事项
- 属性的定义方法用变量:
访问修饰符 属性类型 属性名
- 属性如果不赋值会使用默认值。
byte、short、int、long
赋0,float、double
赋0.0,char
赋\u0000,boolean
赋false,String
赋null。
方法/成员方法
就是类中定义的函数。
public class Employee{ |
方法重载(overload)
java中允许同一个类中,多个同名方法的存在,但要求形参不一致(变量类型或者变量数量)
- 减轻了起名的麻烦
- 减轻了记名的麻烦
class MyCalculator{ |
方法重写(override)
即在子类中重新写一遍父类中的方法,需要和父类方法的参数,名称完全一样
返回类型要么一样,要么是父类返回类型的子类,比如
Object -> String
子类方法的访问权限必须大于等于父类方法
方法重载与重写的区别
名称访问 | 范围 | 方法名 | 形参 | 返回类型 | 修饰符 |
---|---|---|---|---|---|
重载 | 本类 | 相同 | 类型、个数或者顺序至少有一个不同 | 随意 | 随意 |
重写 | protected | 相同 | 相同 | 一致或子类 | 大于等于父类 |
构造器
构造器是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。
特点
- 方法名和类名相同
- 没有返回值
- 在创建对象时,系统会自动的调用该类的构造器完成对象的初始化
- 如果一个类不写构造器,则默认会有一个无参构造器
- 构造器的调用自动完成
使用
[访问修饰符] 方法名(形参列表){ |
接下来见java基础入门(二)