2、如果在子类和父类中存在静态块;执行顺序有会是怎么样的了?
答,静态块会在构造器之前运行。不管是子类还是父类。创建一个对象的时候,会首先加载它的静态块。
- Father.java
- public class Father {
-
-
- static{
- System.out.println("father static ");
- }
-
- public Father(){
- System.out.println("我是父类的无参构造器");
- }
-
- public Father(String username){
- System.out.println("我是父类有参构造器,传过来的参数是+"+username);
- }
- }
-
- SonDemo.java
- public class SonDemo extends Father{
-
- static{
- System.out.println("sonDemo static ");
- }
-
- public SonDemo(){
- System.out.println("我是--子类--的无参构造器");
- }
- public SonDemo(String username){
- System.out.println("我是子类的有参构造器,参数是"+username);
- }
-
- public void sys(){
- System.out.println("我是子类的sys方法");
- }
-
- public static void main(String[] args) {
- SonDemo son = new SonDemo();
- }
- }
|
① 程序的结果:
father static sonDemo static 我是父类的无参构造器 我是--子类--的无参构造器 |
因为在创建子类对象之前:会创建父类的一个对象,而静态块会在main之前被加载,所以两个类的静态块首先执行。
然后执行构造器。
② 如果在子类中的main中只创建父类的对象结果是怎么样的呢?
打印结果:
father static sonDemo static 我是父类的无参构造器 |
为什么子类的静态块会被加载了?是因为我们是在SonDemo中测试,如果在其他类中测试就不会打印。
总结:我们说了这么多就是重要的一点。静态块会在构造器器之前执行。