目录
static和代码块注意事项
【一】介绍
在一个class中定义的字段,我们称之为实例字段。实例字段的特点是,每个实例都有独立的字段,各个实例的同名字段互不影响。还有一种字段,是用static修饰的字段,称为静态字段:static field
对于静态字段,无论修改哪个实例的静态字段,效果都是一样的:所有实例的静态字段都被修改了,原因是静态字段是属于这个类的
【二】static
-
static关键字最基本的用法是:
- 被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来
- 被static修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要new出一个类来
被static修饰的变量、被static修饰的方法统一属于类的静态资源,是类实例之间共享的,换言之,一处变、处处变。JDK把不同的静态资源放在了不同的类中而不把所有静态资源放在一个类里面,很多人可能想当然认为当然要这么做,但是是否想过为什么要这么做呢?
-
个人认为主要有三个好处:
- 不同的类有自己的静态资源,这可以实现静态资源分类。比如和数学相关的静态资源放在java.lang.Math中,和日历相关的静态资源放在java.util.Calendar中,这样就很清晰了
- 避免重名。不同的类之间有重名的静态变量名、静态方法名也是很正常的,如果所有的都放在一起不可避免的一个问题就是名字重复,这时候怎么办?分类放置就好了。
- 避免静态资源类无限膨胀,这很好理解。
-
特征:
- 定义位置:定义在类中方法外
- 所在内存区域:方法区
- 生命周期:随着类的加载而加载
- 特点:无论创建多少对象,类变量仅在方法区中,并且只有一份
【三】代码块
-
特征:
- 它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。
- 该类不管创建多少对象,静态代码块只执行一次。
- 可用于给静态变量赋值,用来给类进行初始化。
-
执行顺序
父类静态变量和静态代码块(先声明的先执行);
子类静态变量和静态代码块(先声明的先执行);
父类的变量和代码块(先声明的先执行);
父类的构造函数;
子类的变量和代码块(先声明的先执行);
子类的构造函数。
【四】面试
- https://www.cnblogs.com/it-tsz/p/11441910.html
- https://www.jianshu.com/p/95da576ece2a
- http://www.sohu.com/a/288021844_438422
【五】链接
- https://www.runoob.com/java/java-tutorial.html
- https://www.cnblogs.com/swisszhang/p/9892992.html
- https://www.liaoxuefeng.com/wiki/1252599548343744/1260464690677856
- 上一章:java 常见API注意点
- 下一章:java 继承和抽象类的注意事项