zoukankan      html  css  js  c++  java
  • 总结类初始化时,代码执行顺序

    代码块

    在Java中,使用{}括起来的代码被称为代码块。

    分类

    根据其位置和声明的不同,可以分为

    1.局部代码块:局部位置,用于限定变量的生命周期。
    2.构造代码块:在类中的成员位置,用{}括起来的代码。每次调用构造方法执行前,都会先执行构造代码块。作用:可以把多个构造方法中的共同代码放到一起,对对象进行初始化。
    3.静态代码块:在类中的成员位置,用{}括起来的代码,只不过它用static修饰了。作用:一般是对类进行初始化。

    总结结论

    单个类中: 静态代码块(静态成员变量) -> main方法 -> 构造代码块(成员变量) -> 构造方法
    静态代码块:只执行一次
    构造代码块:在每一次创建对象时执行

    涉及父类和子类的初始化过程:
    a.初始化父类中的静态成员变量和静态代码块(按次序)
    b.初始化子类中的静态成员变量和静态代码块(按次序)
    c.初始化父类的普通成员变量和构造代码块(按次序),再执行父类的构造方法(注意父类构造方法中的子类方法覆盖)
    d.初始化子类的普通成员变量和构造代码块(按次序),再执行子类的构造方法

    看程序写结果

    class Test {
      
        static {
            System.out.println("Test 静态代码块");
        }
    
        {
            System.out.println("Test 构造代码块");
        }
    
        public Test() {
            System.out.println("Test 构造方法");
        }
      
    }
    
    public class TestDemo {
      
        static {
            System.out.println("TestDemo 静态代码块");
        }
    
        {
            System.out.println("TestDemo 构造代码块");
        }
    
        public static void main(String[] args) {
            System.out.println("TestDemo main方法");
    
            Test t1 = new Test();
            Test t2 = new Test();
        }
      
    }

    其运行结果是:

    TestDemo 静态代码块
    TestDemo main方法
    Test 静态代码块
    Test 构造代码块
    Test 构造方法
    Test 构造代码块
    Test 构造方法

    public class Test extends MyClass{
    
        {
            System.out.println("Test 构造代码块");
        }
    
        Person person = new Person("Test");
    
        static {
            System.out.println("Test 静态代码块");
        }
    
        public Test() {
            System.out.println("Test 构造方法");
        }
    
        public static void main(String[] args) {
            new Test();
        }
    
    }
    
    class Person {
    
        static {
            System.out.println("Person 静态代码块");
        }
    
        {
            System.out.println("Person 构造代码块");
        }
    
        public Person(String str) {
            System.out.println("Person 构造方法,参数是" + str);
        }
      
    }
    
    
    class MyClass {
    
        static Person person = new Person("MyClass");
    
        static {
            System.out.println("MyClass 静态代码块");
        }
    
        {
            System.out.println("MyClass 构造代码块");
        }
    
        public MyClass() {
            System.out.println("MyClass 构造方法");
        }
      
    }

    其运行结果是:

    Person 静态代码块
    Person 构造代码块
    Person 构造方法,参数是MyClass
    MyClass 静态代码块
    Test 静态代码块
    MyClass 构造代码块
    MyClass 构造方法
    Test 构造代码块
    Person 构造代码块
    Person 构造方法,参数是Test
    Test 构造方法

  • 相关阅读:
    networkX用法整
    在人生路上对我影响最大的三位老师
    介绍自己
    介绍自己
    自我介绍
    打印沙漏1
    介绍自己
    对我影响最大的三位老师
    人生路上影响对我最大的三位老师
    1.自我介绍
  • 原文地址:https://www.cnblogs.com/dijia478/p/13711027.html
Copyright © 2011-2022 走看看