static
1、静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化
2、虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的
final
1、当用final修饰一个类时,表明这个类不能被继承
2、只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。
注:类的private方法会隐式地被指定为final方法。
3、对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。它指向的对象的内容是可变的
静态块、静态变量加载顺序详解
1 | package com.qnr.test; |
- 第一步,准备加载类
- 第二步,静态变量和静态代码块的加载顺序由编写先后决定
第三步,静态块,然后执行静态代码块,因为有输出,故打印a
第四步,new一个类,但在new之前要处理匿名代码块
- 第五步,按照顺序加载匿名代码块,代码块中有打印
- 第六步,按照顺序加载变量
第七步,按照顺序打印c
第八步,最后加载构造函数,完成对象的建立
静态方法,调用的时候才加载// 注意看,e没有加载