Java 中的构造方法与构造代码块的区别

本文详细介绍了Java中构造方法与构造代码块的区别及使用场景。解释了两者的执行顺序,构造代码块如何用于初始化多个构造方法中共有的操作,以及静态代码块的用途。

Java 中的构造方法与构造代码块的区别

分类: Java 开发   296人阅读  评论(0)  收藏  举报

1. 

[java]  view plain copy print ?
  1. public class Dev {  
  2.     static {  
  3.         System.out.println("静态代码块");  
  4.     }  
  5.     {  
  6.         System.out.println("构造代码块");  
  7.     }  
  8.   
  9.     public Dev() {  
  10.         System.out.println("我是一个无参构造方法");  
  11.     }  
  12.   
  13.     public Dev(String name) {  
  14.         System.out.println("我是带有一个参数的构造方法");  
  15.     }  
  16. }  

2. 这段代码的执行顺序:静态代码块会先执行,并且只执行一次,接着是构造代码块执行(构造代码块在构造方法之前执行,并且每创建一次对象,它就会执行一次。而构造         方法只执行一次。) 

3. 静态代码块的作用:比如我们在调用C语言的动态库时会可把.so 文件放在此处。 

4. 构造代码块的功能:(可以把不同构造方法中相同的共性的东西写在它里面)。例如:比如不论任何机型的电脑都有开机这个功能,此时我们就可以把这个功能定义 在构造代码块内。


### 构造方法构造代码块区别Java 中,**构造方法**和**构造代码块**是两个不同的概念,尽管它们都用于对象的初始化过程,但其作用机制和执行顺序存在显著差异。 #### 1. 定义方式不同 - **构造方法**是一个类中定义的方法,用于创建并初始化对象。它具有类相同的名称,并且没有返回类型。 - **构造代码块**是直接写在类体中的代码块(不使用 `static` 修饰),用于为每个对象提供统一的初始化逻辑[^4]。 ```java class Person { // 构造代码块 { System.out.println("构造代码块"); } // 构造方法 public Person() { System.out.println("构造方法"); } } ``` #### 2. 执行时机不同 - **构造代码块**在每次创建对象时都会执行,优先于构造方法执行。它会在构造方法内部调用之前运行[^4]。 - **构造方法**则是在对象实例化过程中被调用,通常用于设置特定于该对象的状态或行为。 #### 3. 执行顺序继承关系 在涉及继承的情况下,初始化顺序遵循如下规则: 1. 父类的静态代码块最先执行; 2. 子类的静态代码块随后执行; 3. 父类的构造代码块; 4. 父类的构造方法; 5. 子类的构造代码块; 6. 子类的构造方法[^2]。 这种顺序确保了父类的初始化总是在子类之前完成。 #### 4. 使用场景 - **构造代码块**适用于所有构造方法都需要执行的通用初始化逻辑,避免重复代码。 - **构造方法**更适用于根据不同参数进行差异化初始化的情况,例如通过重载实现多种构造方式。 #### 示例说明 ```java public class CodeBlockExample { // 构造代码块 { System.out.println("构造代码块"); } // 构造方法 public CodeBlockExample() { System.out.println("构造方法"); } public static void main(String[] args) { new CodeBlockExample(); } } ``` 输出结果: ``` 构造代码块 构造方法 ``` 从输出可以看出,构造代码块构造方法之前执行[^4]。 --- ### 相关问题 1. 静态代码块构造代码块构造方法的执行顺序如何? 2. 如何利用构造代码块简化多个构造方法中的公共初始化逻辑? 3. 构造代码块是否可以访问类的成员变量?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值