zoukankan      html  css  js  c++  java
  • 静态代码块、静态变量等执行顺序

     1 public class BasicTest {
     2     public static void main(String[] args) {
     3         System.out.println("m1:");
     4         Mimi m1=new Mimi();
     5         System.out.println("m2:");
     6         Mimi m2=new Mimi();
     7     }
     8 }
     9 
    10 class Mimi {
    11     public static int si=0; 
    12     int di=si;
    13     static{
    14         //首先执行
    15         si++;
    16         System.out.println("static block1: si="+si);
    17     }
    18     
    19     {
    20         //si*=2;
    21         System.out.println("block2: si="+si+", di="+di);
    22     }
    23     
    24     static{
    25         //首先执行
    26         si++;
    27         System.out.println("static block2: si="+si);
    28     }
    29 
    30     public Mimi() {
    31         di=10;
    32         System.out.println("constructor: si="+si+", di="+di);
    33         si=500;
    34     }
    35 }

    执行顺序是:

    静态成员变量初始化

    静态代码块调用

    动态成员变量初始化

    非静态代码块调用

    构造方法调用

    以下供练习:

     1 public class TestPerson {
     2 
     3     public static void main(String[] args) {
     4         // TODO Auto-generated method stub
     5         Person person = new Person();
     6         Person person2 = new Person();
     7     }
     8 
     9 }
    10 
    11 class Person {
    12     public final String name;
    13     public int age;    
    14 
    15     public Person() {
    16         System.out.println("无参构造方法");
    17     }
    18 
    19     {
    20         System.out.println("代码块2");
    21     }
    22 
    23     {
    24         System.out.println("代码块1");
    25         name = "小明";
    26     }
    27 
    28     static {
    29         System.out.println("静态代码块2");
    30     }
    31 
    32     static {
    33         System.out.println("静态代码块1");
    34     }
    35 
    36     
    37 
    38     public Person(int age) {
    39         this.age = age;
    40         //this.name = "";
    41         System.out.println("构造age方法");
    42     }
    43 
    44     public void goToSchool() {
    45         System.out.println(name + "goToSchool方法");
    46     }
    47 }

    结果:

    静态代码块2
    静态代码块1
    代码块2
    代码块1
    无参构造方法
    代码块2
    代码块1
    无参构造方法

    博客园:http://www.cnblogs.com/zhuziyu/
    Copyright ©2018 不是植物
    【转载文章务必保留出处和署名,谢谢!】
  • 相关阅读:
    python爬虫如何提高效率
    对 js加密数据进行爬取和解密
    爬虫之数据解析
    requests模块的基本使用
    python的零碎知识
    Django中多表关联的展示问题:
    ModelForm的基本用法:
    websocket的应用---Django
    DOM
    BOM
  • 原文地址:https://www.cnblogs.com/zhuziyu/p/8591833.html
Copyright © 2011-2022 走看看