Java类有两种成员变量,一是没有static修饰的,叫做实例变量,另外一种有static修饰的,叫做类变量或者静态变量。
对于静态变量,静态初始化块,实例变量,构造代码块,构造器,初始化时这几个模块的顺序就是静态变量,静态初始化块,实例变量,构造代码块,构造器。
class Teacher { public static String name = "t1"; public int age = 24; static { System.out.println(name); System.out.println("static code block"); } { System.out.println(age); System.out.println("initial code block"); } public Teacher() { System.out.println("contructor"); } }
测试main方法:
public static void main(String[] args) { new Teacher(); System.out.println(); new Teacher(); }
执行结果:
t1 static code block 24 initial code block contructor 24 initial code block contructor
当涉及父类的操作时,子类和父类的模块初始化顺序如下:
父类—静态变量
父类—静态初始化块
子类—静态变量
子类—静态初始化块
父类—实例变量
父类—构造代码块
父类—构造器
子类—实例变量
子类—构造代码块
子类—构造器
另外,假如父类在构造方法中引用的某个方法在子类中进行了重写,那由于在子类的构造方法中要先调用父类的构造方法,此时父类的构造方法只根据方法名调用将调用到子类的重写后的该方法。
class Super { public Super() { service(); } public void service() { System.out.println("super service method"); } } class Sub extends Super { public Sub() { service(); super.service(); } public void service() { System.out.println("sub service method"); } }
new Sub();执行后的结果:
sub service method sub service method super service method
按照先执行父类的构造方法,可以看出父类构造方法中调用的方法是子类的,而它本身的方法没有发生变化。
对于类的成员变量,如果程序初始化时没有显式地赋值,JVM都会为其赋默认值
另外再说一些关于成员变量和局部变量:
成员变量可以被public protect private static修饰符修饰,而局部变量不能被控制修饰符和static修饰,但两者都可以定义为final类型。成员变量存储在堆,局部变量存储在栈。
相关推荐
介绍一下java程序初始化的顺序,这会对您以后的开发所有帮助
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
java 数组初始化 详解 doc
对java类初始化以及顺序,详解,由于转载仅供大家参考!
类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序
大家在安装完Revit或者卸载后重装Revit时是否遇到外部工具无法初始化附加模块的问题,每次打开不停的弹出对话框,烦得要死。 无法初始化附加模块“CollaborateDB”,因为程序集“C:\Program Files\Autodesk\...
具体内容见博客
本篇文章主要介绍了Spring 中如何控制2个bean中的初始化顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
一个java代码初始化具体过程的的demo
java面试题-类的初始化顺序.doc 大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,...
Java初始化顺序1
45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip45.java数组动态初始化.zip...
44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip44.java数组静态初始化.zip...
所有代码块是从上往下顺序执行的,所以代码块里面使用到的变量如果在块下面初始化会有问题 执行构造方法中内容。 所以看见的空构造方法,只能说第三部没有需要执行的内容。 下面举例子 public class TestClass { ...
详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器
作为一名程序员必须知道Java初始化顺序......
Java 的初始化问题和其他高级语言类似。一个明显不一样的地方是体现在它的类加 载过程。传统的编程语言包括C++等,...Sun 公司说类初始化的时机是“initialize on first actice use”, (在首次主动使用时初始 化)。