static修饰符
1. 可以修饰属性、方法、初始代码块,成为类变量、静态方法、静态初始化代码块。
注:初始代码块是在类中而不再任何方法之内的代码块。
2. 类变量、静态方法、静态初始化代码块与具体的某个对象无关,只与类相关,是全类公有的。在类加载时初始化。
3. 类加载:虚拟机通过CLASSPATH从磁盘上找到字节码文件,并将字节码文件中的内容通过I/O流读到虚拟机并保存的过程。在虚拟机的生命周期中一个类只被加载一次。
注:Java命令的作用是启动JVM。
4. Static定义的时一块为整个类共有的一块存储区域,其发生变化时访问到的数据都是经过变化的。
5. 为什么主方法必须是静态的?
主方法是整个应用程序的入口,JVM只能通过类名去调用主方法。
6. 类变量和静态方法可以在没有对象的情况下用:类名.方法名(或属性名)来访问。
7. 静态方法不可被覆盖(允许在子类中定义同名的静态方法,但是没有多态);父类如果是静态方法,子类不能覆盖为非静态方法。父类如果是非静态方法,子类不能覆盖为静态方法。
争论:静态方法可以覆盖但是没有多态。
思考:没有多态的覆盖叫覆盖吗?
在静态方法中不允许调用本类中的非静态成员。
8. 静态初始化代码块只在类加载的时候运行一次,以再也不执行了。所以静态代码快一般被用来初始化静态成员。
9. 不加static为动态初始化代码块,在创建对象时被调用(在构造函数之前)。
10. 最后要注意的一点就是Static不能修饰局部变量。