1.final关键字

1.1.final关键字修饰变量

(1)加载时执行顺序 static代码块>代码块>构造器

该关键字可以在定义时赋值,可以在静态代码块中赋值,可以在代码块中赋值,以及在构造器中赋值。

必须要有值

(2)如果是基本数据类型的数据,该变量一旦赋值,便相当于一个常量。

(3)如果是引用数据类型的变量,初始化后不能更改他的引用,但可以更改引用对象的值。

1.2.final关键字修饰方法

(1)表明该方法不能被子类重写,防止类修改他的含义

(2)与static比较:两者都不能重写但都可以被子类继承调用,不同在于static可以写一个同名方法隐藏父类的方法,而final不行 
与private比较:private无法被子类继承,可以在子类中写一个新的同名方法,而final修饰的可以被子类继承调用,但final不能被重写,不能被修改,也就不能写一个新的同名方法

1.3.final修饰类

(1)表明这个类不能被继承

(2)final类中的所有方法都会被隐式的指定为final方法

 

2.static关键字

2.1.static关键字修饰变量

(1)static关键字修饰的变量也叫类变量,整个类共享这一个静态变量,使用类名.变量访问。

(2)与非静态变量区别,静态变量在内存中只有一个,随类加载而加载,程序结束时销毁,非静态每个对象都有单独的一个,随着对象一起创建销毁

2.2.static关键字修饰方法

(1)静态方法是不在对象上执行的方法,不需要类的实例化,可以直接通过类调用。

(2)在类加载时分配内存空间(类中只有一个),在调用时执行,静态方法只能调用静态变量和静态方法,且不能被重写。

2.3.static关键字修饰代码块

静态代码块只在类加载时执行一次,静态代码块及非静态代码块的执行顺序

(1.首先加载父类的静态字段或者静态语句块 2.子类的静态字段或静态语句块 3.父类普通变量以及语句块 4.父类构造方法被加载 5.子类变量或者语句块被加载 6.子类构造方法被加载)

2.4.static关键字修饰内部类

(1)静态内部类的创建不依赖与外部类,创建普通内部类之前需要先创建外部类的对象( 外部类. 内部类 内部类对象 = 外部类对象.new 内部类(); ) ,而创建静态内部类之前不需要先创建外部类,可以直接创建静态内部类。( 外部类.内部类 对象=new 外部类.内部类(); )

(2)静态内部类可以调用外部类的静态变量和静态方法,但不能调用外部类的非静态变量和非静态方法。

欢迎关注公众号: