Java:静态代码块和构造函数执行顺序

发表于:2016-7-20 10:29

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:桃源仙居    来源:51Testing软件测试网采编

  /*大体上顺序是这样的:(也可以说是优先级,同一级的按顺序执行)
  1 静态变量,静态代码块(类加载时执行,类不加载不执行)
  2 实例变量,实例代码块(创建对象时才执行,不创建对象不执行)
  3 构造函数,(创建对象时执行完2后再执行构造函数,不管构造函数是public还是private)
*/
public class Test{
public Test(){
System.out.println("类Test构造方法被执行 6");
}
{
System.out.println("类Test实例代码块被执行 4");          //实例代码块
}
private TestInstance ti = new TestInstance();          //实例变量
private static TestInstance ti1 = new TestInstance(2); //静态变量
static{
System.out.println("类Test静态代码块被执行 3");    //静态代码块
}
public static void main(String[] args){
//如果不创建对象那么输出 1 2 3
//如果创建对象,那么输出 1 2 3 4 5 6
new Test();
}
}
class TestInstance{
public TestInstance(){
System.out.println("类TestInstance实例变量被构造 5");
}
static{
System.out.println("类TestInstance加载执行静态代码块 1");
}
public TestInstance(int i){
System.out.println("类TestInstance静态变量被构造 2");
}
}
public class TestStaticCode {
/*大体上顺序是这样的:(也可以说是优先级,同一级的按顺序执行)
1 静态变量,静态代码块(类加载时执行)
2 实例变量,实例代码块(创建对象时执行)
3 构造函数,(创建对象时执行完2后再执行构造函数,不管构造函数是public还是private)
*/
//测试输出:0 1 2 3 4
//主类加载,首先执行该句静态变量(执行完该句相关的所有语句之后才往下执行),创建对象,那么要执行实例变量、实例代码块
//第一句静态语句执行完成之后才能执行静态代码块
private static TestStaticCode tsc = new TestStaticCode();
static{
System.out.println("4");
}
{
System.out.println("0");
}
private InstanceVariable iv = new InstanceVariable();
//类私有的构造函数
private TestStaticCode(){
System.out.println("3");
}
public static void main(String[] args){
}
}
class InstanceVariable {
static{
System.out.println("1");
}
public InstanceVariable(){
System.out.println("2");
}
}
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号