目录
数据封装
方法封装了访问实例字段的逻辑
实例字段修饰符:
- public:外部代码可以访问该字段
- private:外部代码无法访问该字段
方法修饰符:
- public:外部代码可以访问该方法
- private:外部代码无法访问该方法
方法是一组执行语句,遇到return返回
void表示不返回任何值(注意区分null)
方法命名规范
方法内部的隐式变量this
构造方法
构造方法Constructor
构造方法可以在new操作时初始化实例对象
构造方法名就是类名
构造方法没有返回值
编译器会为没有定义构造方法的类自动生成默认构造方法
初始化顺序:
- 1. 初始化字段
- 2. 执行构造方法代码
可以定义多个构造方法,编译器根据参数自动判断使用哪个
可以在一个构造方法中通过this()调用另一个构造方法
方法重载
指方法名相同,但参数不同:
- 类型不同
- 数量不同
方法重载的目的是方便调用
重载方法应该完成相同的功能
不要去交换参数顺序
重载方法返回值类型应该相同
继承
继承 In
继承是面向对象编程的代码复用方式
Java使用extends继承
被继承类:超类,父类,基类 继承类:子类,派生类
Java只允许继承一个类
Object是所有类的根类
protected修饰的字段和方法可以被子类访问
super表示父类
没有调用super()时编译器会自动生成super()语句
如果父类没有默认构造方法就必须显示调用super()
向上转型与向下转型 Upcasting Downcasting
子类类型可以安全地向上转型为父类类型
父类类型可以强制向下转型为子类类型(可能报错ClassCastException)
Person p=new Person();
Student s=(Student)p;//ClassCastException
可以用instanceof判断类型
Person p=new Student();
if(p instanceof Student){
Student s=(Student) p;
}
多态
多态 Polymorphic
方法覆写:子类覆写父类的方法,Override
多态:
针对某个类型的方法调用,其真正执行的方法取决于运行时实际类型的方法
对某个类型调用方法,执行的方法可能是某个子类的覆写方法
允许添加更多类型的子类来扩展功能
final
用final修饰的方法不能被Override
用final修饰的类不能被继承
用final修饰的字段初始化后不能重新赋值
抽象类
抽象类 Abstract Class
抽象方法:用abstract定义了方法签名,但没有语句
含有抽象方法的类称为抽象类
抽象类的作用:
- 被继承
- 强迫子类实现抽象方法
- 抽象方法相当于定义“规范”
面向抽象编程的本质:
- 上层代码只定义规范
- 不需要子类即可编译
- 具体逻辑由不同子类实现,调用者不关心
接口
接口 interface
使用interface声明一个接口,接口只有抽象方法
实现interface使用implements
一个class可以实现多个interface
接口:
- 不能定义实例字段
- 不能定义普通方法
- 可以定义default方法
一个接口可以extends另一个接口,相当于扩展接口方法
接口层次代表抽象程度
接口也是数据类型,适用于向上转型和向下转型
静态字段和方法
静态字段和方法
用static修饰的字段:静态字段,属于class不属于实例
访问静态字段使用:类名.静态字段 不推荐使用实例变量.静态字段
用static修饰的方法:静态方法,属于class不属于实例
访问静态方法使用:类名.静态方法 不推荐使用实例变量.静态方法
静态方法不能访问this变量,但可以访问静态字段
静态方法常用于工具类和辅助方法
包 Package
package用于解决类名冲突:
Java完整类名=包名+类名 JVM只看完整类名 编译器编译后的class只含完整类名
包可以有多层结构 包没有父子关系
包作用域
位于同一个包的类,可以访问包作用域的字段和方法:
不用public、protected、private修饰的字段和方法就是包作用域。
引用其他类的方法
使用完整类名 先import,再使用类名
static import可以导入一个类的静态字段和静态方法,很少使用
查找class
编译器查找class完整类名的步骤:
- 1. 根据完整类名查找
- 2. 查找当前package
- 3. 查找import的class
- 4. 查找java.lang的class
- 5. 编译错误
作用域
访问权限
访问权限指一个类内部,能否引用另一个类以及它的字段和方法
访问权限有public、protected、private和package四种
final不是访问权限
最佳实践:最小化暴露对外方法
public
定义为public的class,interface可以被其他类访问
private
定义为private的field,method无法被其他类访问
private访问权限限定在class的内部,与方法声明顺序无关
定义在一个class内部的class称为内部类(inner class)
protected
protected作用与继承关系
定义为protected的字段和方法可以被子类访问
package
包作用域是指一个类允许访问同一个package的:
- 没有public,private修饰的class
- 没有public,protected,private修饰的字段和方法
- 包名必须完全一致
局部变量
方法内部定义的变量是局部变量(包括方法参数名)
局部变量作用域由所在语句块{...}决定
classpath和jar
classpath
classpath是环境变量,指示JVM如何搜索class,路径和操作系统相关
classpath设置方法:
- 在系统环境中设置(不推荐)
- 启动JVM时用-classpath或-cp设置(推荐)
Eclipse自动传入当前工程bin目录作为classpath
jar
jar包是zip格式的压缩文件,包含若干class文件
jar包相当于目录
使用jar包来避免大量目录和class文件
创建jar包:
- JDK的jar命令
- Maven等工具
- 压缩为zip然后改名为jar
jar包可以有一个特殊的/META-INF/MANIFEST.MF文件来指定Main-Class