Java程序初始化的顺序
2024-09-16 19:05:31
Java程序初始化的顺序
java程序初始化工作可以在许多不同的代码块中来完成(例如:静态代码块、构造函数等),他们执行的顺序如下:
- 父类静态变量
- 父类静态代码块
- 子类静态变量
- 子类静态代码块
- 父类非静态变量
- 父类非静态代码块
- 父类构造器
- 子类非静态变量
- 子类非静态代码块
- 子类构造器
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个原则
- 静态对象(变量)由于非静态对象(变量)初始化。其中静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化很多次
- 父类优先于子类进行初始化
- 按照成员变量的定义顺序进行初始化。即使变量定义散布于方法之中,他们依然在任何方法(包括构造函数)被调用前先初始化
所以,知道怎么优先于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
最新文章
- 我是一只IT小小鸟——读后感
- JS获得URL超链接的参数值
- 新手开发android容易出现的错误(不断更新中...)
- resignFirstResponder
- c#判断特殊字符?
- SQL Server 对象
- Oracle EBS-SQL (INV-1):库存货位列表.sql
- Xamarin生成的APK大小分析
- md5加密解析
- mybatis中resultType和resultMap的联系
- 记一些安卓app反编译修改的记录
- 19.C++-(=)赋值操作符、智能指针编写(详解)
- rabbitmq安装与高可用集群配置
- PAT A1018 Public Bike Management (30 分)——最小路径,溯源,二标尺,DFS
- 反射简化switch语句
- 岭回归和Lasso回归以及norm1和norm2
- 理解Java线程
- 20135316王剑桥Linux内核学习笔记第三周
- android 多进程
- make -C M=