zoukankan      html  css  js  c++  java
  • Java构造方法 代码块 static 执行顺序

    class Demo {
        static Demo demo1 = new Demo();
        static Demo demo2 = new Demo();
        
        {
            System.out.println("构造代码块");   
        }
        
        static {
            System.out.println("静态代码块");  
        }
        
        public Demo() {
            System.out.println("构造方法");  
        }
        
        public static void main(String[] args) {
            Demo demo1 = new Demo();
        }
    }
    /*
    问:
        代码执行流程!!!
    */

    执行结果

    构造代码块
    构造方法
    构造代码块
    构造方法
    静态代码块
    构造代码块
    构造方法


    //静态属性之间按顺序执行
    1.执行static Demo demo1 = new Demo();
    2.构造代码块:初始化当前类所有的类对象,只要【使用new + 构造方法创建当前类对象】,就一定会执行构造代码块中的内容


    class Demo {
        static int num1 = 10;
        static int num2 = 20;
        
        {
            System.out.println("构造代码块");
        }
        
        static {
            num1 = 20;
            num2 = 100;
        }
        
        public Demo() {
            System.out.println("构造方法");
        }
        
        public static void main(String[] args) {
            new Demo();
        }
    }
    /*
    代码执行效果已经num1和num2的值是多少
    */
    构造代码块
    构造方法
    20
    100

    // 每行代码后的“//1”为整个程序的调用流程
    package
    randy2; class Bowl { public Bowl(int marker) {//3//6//15//18//21//30//39 System.out.println("Bowl(" + marker + ")");//4//7//16//19//22//31//40 } public void f1(int marker) { System.out.println("f1(" + marker + ")");//11//26//35/44 } } class Table { static Bowl bowl1 = new Bowl(1);//2 public Table() {//8 System.out.println("Table()");//9 bowl2.f1(1);//10 } public void f2(int marker) { System.out.println("f2(" + marker + ")");//46 } static Bowl bowl2 = new Bowl(2);//5 } class Cupboard {//13 Bowl bowl3 = new Bowl(3);//20//29//38 static Bowl bowl4 = new Bowl(4);//14 public Cupboard() {//23//32//41 System.out.println("Cupboard()");//24/33//42 bowl4.f1(2);//25//34//43 } public void f3(int marker) { System.out.println("f3(" + marker + ")");//48 } static Bowl bowl5 = new Bowl(5);//17 } public class StaticInit { public static void main(String[] args) { System.out.println("Creating new Cupboard() int main");//27 new Cupboard();//28 System.out.println("Creating new Cupboard() int main");//36 new Cupboard();//37 table.f2(1);//45 cupboard.f3(1);//47 } static Table table = new Table();//1 static Cupboard cupboard = new Cupboard();//12 }
    Bowl(1)
    Bowl(2)
    Table()
    f1(1)
    Bowl(4)
    Bowl(5)
    Bowl(3)
    Cupboard()
    f1(2)
    Creating new Cupboard() int main
    Bowl(3)
    Cupboard()
    f1(2)
    Creating new Cupboard() int main
    Bowl(3)
    Cupboard()
    f1(2)
    f2(1)
    f3(1)
  • 相关阅读:
    《C# to IL》第一章 IL入门
    multiple users to one ec2 instance setup
    Route53 health check与 Cloudwatch alarm 没法绑定
    rsync aws ec2 pem
    通过jvm 查看死锁
    wait, notify 使用清晰讲解
    for aws associate exam
    docker 容器不能联网
    本地运行aws lambda credential 配置 (missing credential config error)
    Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
  • 原文地址:https://www.cnblogs.com/raising/p/12838614.html
Copyright © 2011-2022 走看看