static:静态方法、静态变量、静态块
静态方法:只有调用的时候才会去执行,否则不去执行
如果一个类还没有被加载的时候:
①会先去加载父类的静态变量和静态代码块(与位置有关)
②然后加载该类的静态变量和静态代码块
③之后再去加载父类的实例变量的初始化
④执行父类的构造函数
⑤然后加载该类的实例变量的初始化
⑥最后执行该类的构造函数
final:
①final加到类上,类不能被继承
②final加到方法上,方法不能被重写
③final加载成员变量或局部变量上,这个变量不能被修改
④final还可以加到方法的参数上,比如加到内部类的参数上时,就必须使用final关键字进行修饰(jdk1.8之后可不加final)。因为内部类会持有外部类引用和方法参数中的引用,反编译class文件后,内部类的class文件的构造函数参数中会显示传入的外部类对象(必然会加)以及方法内局部变量和形参(如果内部类有调用会加),不管是基本数据类型还是引用变量,如果重新赋值了,会导致内外指向对象不一致,所以java就暴力规定使用final,不能重新赋值