静态代码块和构造器的执行顺序

实例化一个类A的时候的执行顺序,

即:1 . 先执行代码块里的代码;

  2 . 然后执行非静态代码块;

  3 .最后才真正执行构造器里的代码。


Print.java

 1 package com.testStatic;
 2 
 3 public class Print {
 4     static{
 5         System.out.println("Print().static{}.....,肯定先执行到我....,比构造器还先执行到...");
 6     }
 7     public Print(){
 8         System.out.println("Print(),空构造器。。。");
 9     }
10     public void PrintW(){
11         System.out.println("Print.PrintW(),我开始打印了。。。。");
12     }
13 }

StaticTest.java

 1 package com.testStatic;
 2 
 3 public class StaticTest {
 4     public StaticTest(){
 5         System.out.println("StaticTest.的StaticTest()构造器,");
 6     }
 7     static{
 8         System.out.println("StaticTest.static{}.......,我应该是第一个执行,");
 9     }
10     {
11         System.out.println("StaticTest.的非静态代码块");
12     }
13     public void M1(){
14         Print p = new Print();
15         if(p!=null){
16             System.out.println("p 已经实例化");
17         }else{
18             System.out.println("p 还没实例化");
19         }
20     }
21     
22     public void M2(){
23         Print p2 = new Print();
24         p2.PrintW();
25         if(p2!=null){
26             System.out.println("p2 已经实例化");
27         }else{
28             System.out.println("p2 还没实例化");
29         }
30         
31     }
32     public static void main(String[] args) {
33         StaticTest s = new StaticTest();
34         if(s!=null){
35             System.out.println("s 已经实例化");
36         }else{
37             System.out.println("s还没实例化");
38         }
39         System.out.println("=====main()=====");
40         s.M1();
41         s.M2();
42     }
43 }

运行结果

StaticTest.static{}.......,我应该是第一个执行,
StaticTest.的非静态代码块
StaticTest.的StaticTest()构造器,

s 已经实例化
=====main()=====
Print().static{}.....,肯定先执行到我....,比构造器还先执行到...
Print(),空构造器。。。
p 已经实例化
Print(),空构造器。。。
Print.PrintW(),我开始打印了。。。。
p2 已经实例化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
静态代码块,构造块和构造方法是Java对象初始化的三种方式,它们各自具有不同的执行顺序和作用。它们的区别如下: 1. 静态代码块是在类被加载时执行的代码块,它只执行一次。静态代码块主要用于类的初始化,如静态变量的初始化等。 2. 构造块是在类定义的代码块,每次创建对象时都会执行,不论是调用无参构造函数还是有参构造函数。构造块用于初始化对象,如为对象的成员变量分配内存等。 3. 构造方法也是用于对象的初始化,但是它可以接收参数。构造方法用于为对象的成员变量赋初值。 下面是一个例子,可以帮助理解它们之间的关系: ```java public class BlockTest { static { System.out.println("静态代码块执行"); } { System.out.println("构造块执行"); } public BlockTest() { System.out.println("无参构造器执行"); } public BlockTest(int a) { System.out.println("有参构造器执行"); } public static void main(String[] args) { BlockTest bt1 = new BlockTest(); BlockTest bt2 = new BlockTest(10); } } ``` 运行以上代码,输出结果如下: ``` 静态代码块执行 构造块执行 无参构造器执行 构造块执行 有参构造器执行 ``` 可以看出,静态代码块是在类被加载时执行的,构造块是每次创建对象时都会执行的,而构造方法是用于为对象的成员变量赋初值的。 需要注意的是,虽然静态代码块和构造块都用于对象的初始化,但是它们的执行顺序是有区别的。静态代码块只会在类初始化时执行一次,而构造块则会在对象创建时执行。因此,静态代码块先于构造块执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值