前言
<新手学习笔记,仅供参考>1.执行优先级
以下以在main方法中创建两个对象为例,进行分析
单对象:静态代码块 —> 代码块 —> 构造代码块;
多对象:对象A内部代码块优先级 —> 中间穿插的代码块(普通语句) —>对象B内部代码块优先级
public class Test {
//Test静态代码块
static { System.out.println("Test静态代码块"); }
//Test代码块
{ System.out.println("Test代码块(普通语句)"); }
//Test构造代码块
public Test(){ System.out.println("Test构造代码块"); }
//主方法(入口)
public static void main(String[] args) {
A a=new A();
System.out.println("主方法代码块(普通语句)");
B b=new B();
}
}
2.各代码块简述
静态代码块:
static{
//代码内容
}
代码块:
代码块,即普通语句用{}括起来,只是由于类只包含属性和方法,因此普通语句只有被括起来才能生效,否则属于异常
{
//代码内容
}
构造代码块:
假定所属类为Test
public Test{
//代码内容
}
总结
1.对于单个对象,由于类本身包含“属性(变量)”和“行为(方法)”两个元素,因此不存在单独的普通语句,进而引入“代码块”实现所需功能;
2.在方法内部(包括主方法main) ,代码都是顺序执行;在此基础上,单个对象遵循其单对象内部优先级;
3.主方法层面(即,在上面的Test类中),在进入主方法main()之前,只执行所属类Test中的static代码块,其他代码(代码块、构造代码块)不会执行;