1. 访问修饰符
修饰符 | 本包 | 子孙类 | 其他包 |
---|---|---|---|
public | Y | Y | Y |
protected | Y | Y | |
default | Y | ||
private |
2. static 修饰符
static 可以修饰变量、方法和代码块
2.1 静态属性(类属性)
静态属性存在方法区
静态成员是全类所有对象共享的成员
2.2 静态方法(类方法)
- 静态方法只能访问其他的静态成员,不能访问非静态成员
- 静态方法中不允许使用 this 或 super 关键字
- 静态方法可以继承,不能被覆盖(重写)、没有多态(子类实际上只是将父类中的该同名方法进行了隐藏,而非重写)
2.3 静态代码块
类加载时,触发静态代码块的执行(仅一次)
执行地位:静态属性初始化之后
作用:可为静态属性赋值,或必要的初始行为
3. final 修饰符
final表示不可改变
final 可以修饰类、方法和变量,称为最终类、最终方法、常量
3.1 最终类
final 修饰类:此类不能被继承。例如 String, Math, System
3.2 最终方法
final 修饰方法:此方法不能被重写,可以被继承
3.3 常量
final 修饰变量:此变量值不能被改变(常量)
常量类型:静态常量、成员常量、局部常量、基本类型常量和引用类型常量
成员常量
成员常量不再提供默认值,必须手动赋初始值
赋值时机:显示初始化或构造方法
注意:如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值
public class Animal {
private final String name;
public Animal() {
this.name = "Bob";
}
public Animal(String name) {
this.name = name;
}
}
静态常量
静态常量不再提供默认值,必须手动赋初始值
赋值时机:显示初始化或静态代码块
public class Animal {
private static final String NAME = "";
static {
// NAME = "";
}
}
特殊:对象常量
final 修饰基本类型:值不可变
final 修饰引用类型:地址不可变(只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以发生改变)
public static void main(String[] args) {
final int num = 10;
// num = 30; // Cannot assign a value to final variable 'num'
final int[] nums = new int[]{1, 2, 3};
// nums = new int[5]; // 指向一个新的数组,不可以
nums[0] = 11; // 修改数组里的元素是可以的
final Person person = new Person();
// person = new Person(); // Cannot assign a value to final variable 'person'
person.setName("xing");
}
其他:
'static' method declared 'final' :将一个方法声明为final,是防止该类被子类重写。但是static方法本身就不可被重写
3.3 final, finally, finalize
- final 用于声明属性,方法和类, 分别表示属性不可变, 方法不可覆盖, 类不可继承.
- finally 是异常处理语句结构的一部分,表示总是执行.
- finalize 是 Object 类的一个方法,垃圾回收的方法
4. abstarct 修饰符
- 修饰类和方法
- 修饰的类即为抽象类,不能被实例化
- 构造方法和static方法不能是抽象的
- 父类的抽象方法往往在子类中实现,抽象类可以具有指向子类对象的对象引用
网友评论