一、final
final 关键字是 Java 中的一个修饰符,用于表示某个变量、方法或者类不能被修改。 final 可以用于修饰类、方法和变量(局部变量,成员变量)。
1、数据:
声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。
对于基本类型, final 使数值不变;
对于引用类型, final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的。
2、方法:
声明方法不能被子类重写。
private 方法隐式地被指定为 final ,如果在子类中定义的方法和基类中的一个 private 方法签名相同,此时子类的方法不是重写基类方法,而是在子类中定义了一个新的方法。
3、类:
声明类不允许被继承。
二、static
static 关键字是 Java 中的一个关键字,用于表示某个对象属于类本身而不是属于类的实例。在 Java 中,所有的静态字段和静态方法都是属于类本身的,而不是属于类的实例。静态字段和静态方法可以直接通过类名来访问,而不需要创建类的实例。
1、静态变量:
静态变量:又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它;静态变量在内存中只存在一份。实例变量:每创建一个实例就会产生一个实例变量,它与该实例同生共死。
2、静态方法:
静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须有实现,也就是说它不能是抽象方法( abstract )。只能访问所属类的静态字段和静态方法,方法中不能有 this 和 super 关键字。
3、静态语句块:
静态语句块在类初始化时运行一次。
4、静态内部类:
非静态内部类依赖于外部类的实例,而静态
内部类不需要。
静态内部类不能访问外部类的非静态的变量
和方法。
5、静态导包◇
在使用静态变量和方法时不用再指ClassName ,从而简化代码,但可读性大大降低。
6、初始化顺序:
静态变量和静态语句块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序。
最后才是构造函数的初始化。
存在继承的情况下,初始化顺序为: 父类(静态变量、静态语句块) 子类(静态变量、静态语句块) 父类(实例变量、普通语句块)
父类(构造函数)
子类(实例变量、普通语句块)
子类(构造函数)
△注意事项
final 关键字、 static 关键字是 Java 中常用的关键字和特性◇使用时需要注意以下几点: final 关键字用于修饰类、方法和变量,表示不能被修改。如果一个类被 final 修饰,那么它不能被继承;如果一个方法被 final 修饰,那么它不能被重写;如果一个变量被 final 修饰,那么它不能被重新赋值。因此,在使用 final 关键字时需要谨慎,确保不会影响程序的正确性。
static 关键字用于修饰类或方法,表示属于类本身而不是属于类的实例。静态成员可以在不创建类的实例的情况下直接访问,而实例成员必须在创建实例后才能访问。因此,在使用 static 关键字时需要考虑是否需要使用静态成员。
在 Java 中,所有的对象都是通过引用来访问的。当一个对象被 final 修饰时,它的引用只能指向一个特定的对象,不能再指向其他的对象。因此,在使用 final 关键字时需要注意对象引用的问题,避免出现内存泄漏等问题。
在 Java 中,所有的静态成员都共享同一个内存空间。当多个静态成员同时被修改时,可能会导致数据不一致的问题。因此,在使用 static 关键字时需要注意线程安全的问题,避免出现并发访问导致的数据不一致问题。