Java程序初始化的顺序

java程序初始化工作可以在许多不同的代码块中来完成(例如:静态代码块、构造函数等),他们执行的顺序如下:

  1. 父类静态变量
  2. 父类静态代码块
  3. 子类静态变量
  4. 子类静态代码块
  5. 父类非静态变量
  6. 父类非静态代码块
  7. 父类构造器
  8. 子类非静态变量
  9. 子类非静态代码块
  10. 子类构造器
public class Base {
    static{
        System.out.println("Base static block");
    }
    {
        System.out.println("Base Block");
    }
    public Base(){
        System.out.println("Base Constructor");
    }
}
public class Derived extends Base {
    static {
        System.out.println("Derived static block");
    }
    {
        System.out.println("Derived block");
    }
    public Derived(){
        System.out.println("Derived constructor");
    }
    public static void main(String[] args) {
        new Derived();
    }
}

执行Derived类,可以看到运行结果:

Base static block
Derived static block
Base Block
Base Constructor
Derived block
Derived constructor

Java程序初始化一般遵循3个原则

  1. 静态对象(变量)由于非静态对象(变量)初始化。其中静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化很多次
  2. 父类优先于子类进行初始化
  3. 按照成员变量的定义顺序进行初始化。即使变量定义散布于方法之中,他们依然在任何方法(包括构造函数)被调用前先初始化

所以,知道怎么优先于main方法,执行" Hello World"么

public class Test {
    static{
        System.out.println("Hello World");
    }
    public static void main(String[] args) {
        System.out.println("Hello Main Fun");
    }
}

程序输出如下:

Hello World
Hello Main Fun

最新文章

  1. 我是一只IT小小鸟——读后感
  2. JS获得URL超链接的参数值
  3. 新手开发android容易出现的错误(不断更新中...)
  4. resignFirstResponder
  5. c#判断特殊字符?
  6. SQL Server 对象
  7. Oracle EBS-SQL (INV-1):库存货位列表.sql
  8. Xamarin生成的APK大小分析
  9. md5加密解析
  10. mybatis中resultType和resultMap的联系
  11. 记一些安卓app反编译修改的记录
  12. 19.C++-(=)赋值操作符、智能指针编写(详解)
  13. rabbitmq安装与高可用集群配置
  14. PAT A1018 Public Bike Management (30 分)——最小路径,溯源,二标尺,DFS
  15. 反射简化switch语句
  16. 岭回归和Lasso回归以及norm1和norm2
  17. 理解Java线程
  18. 20135316王剑桥Linux内核学习笔记第三周
  19. android 多进程
  20. make -C M=

热门文章

  1. 关于Storm tick
  2. Hadoop伪分布安装配置
  3. solr笔记之solr下载及安装
  4. Java Trie树
  5. 2272: [Usaco2011 Feb]Cowlphabet 奶牛文字
  6. Markdown语法讲解及MWeb使用教程
  7. Android 事件统计
  8. Timestamp解析0000-00-00 00:00:00报格式错误
  9. 菜鸟笔记:node.js+mysql中将JSON数据构建为树(递归制作树状菜单数据接口)
  10. windows phone 8.1开发SQlite数据库引用安装