2、final和static关键字
(1)、final关键字
①、修饰类
当用final去修饰一个类的时候,表示这个类不能被继承。
注:
a、被final修饰的类,final类中的成员变量可以根据自己的实际需要设计为final。
b、final类中的成员方法都会被隐式的指定为final方法。
②、修饰方法
被final修饰的方法不能被重写。
注:
a、 一个类的private方法会隐式的被指定为final方法。
b、如果父类中有final修饰的方法,那么子类不能去重写。
③、修饰成员变量
必须要赋初始值。被fianl修饰的成员变量赋值,有两种方式:1、直接赋值 2、全部在构造方法中赋初值。
注:
a、如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。
b、如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个引用所指向的对象里面的内容还是可以改变的。
(2)、static关键字
方便在没有创建对象的情况下来进行调用。
①、修饰类
普通类是不允许声明为静态的,只有内部类才可以,常用的静态内部类。
②、修饰方法
静态方法可以直接通过类名调用。
注:
a、构造器不是静态方法。静态方法中不能使用this,而构造器中可以使用this关键字。this是指调用当前方法的对象,而静态方法不属于任何对象。
b、在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法和静态成员变量。
③、修饰变量
被static修饰的成员变量叫做静态变量,也叫做类变量,说明这个变量是属于这个类的,而不是属于是对象,没有被static修饰的成员变量叫做实例变量,说明这个变量是属于某个具体的对象的。
静态变量和实例变量的区别
a、生命周期的不同:
成员变量随着对象的创建而存在随着对象的回收而释放。
静态变量随着类的加载而存在随着类的消失而消失。
b、调用方式不同:
成员变量只能被对象调用。
静态变量可以被对象调用,也可以用类名调用。(推荐用类名调用)
c、别名不同:
成员变量也称为实例变量。
静态变量称为类变量。
d、数据存储位置不同:
成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
④、修饰代码块
被static修饰的代码块叫做静态代码块,静态代码块在类第一次被载入时执行。
⑤、类的初始化顺序
a、父类静态变量
b、父类静态代码块
c、子类静态变量
d、子类静态代码块
e、父类普通变量
f、父类普通代码块
g、父类构造函数
h、子类普通变量
i、子类普通代码块
j、子类构造函数