Java中無參構(gòu)造方法的一些核心作用總結(jié)
無參構(gòu)造方法的核心作用
首先要明確一個基礎(chǔ)規(guī)則:如果一個類中沒有顯式定義任何構(gòu)造方法,Java 編譯器會自動為這個類生成一個默認(rèn)的、訪問權(quán)限為public的無參構(gòu)造方法。但一旦你定義了任何帶參構(gòu)造方法,編譯器就不會再自動生成無參構(gòu)造方法了。此時顯式定義無參構(gòu)造方法,主要有以下核心作用:
1. 保證類可以被無參數(shù)實例化
當(dāng)你定義了帶參構(gòu)造后,如果沒有顯式定義無參構(gòu)造,直接用new 類名()創(chuàng)建對象會編譯報錯。顯式定義無參構(gòu)造可以恢復(fù)這種最基礎(chǔ)的實例化能力。
public class User {
private String name;
private int age;
?
// 定義了帶參構(gòu)造,編譯器不再生成默認(rèn)無參構(gòu)造
public User(String name, int age) {
this.name = name;
this.age = age;
}
?
// 顯式定義無參構(gòu)造,恢復(fù)無參實例化能力
public User() {
// 可以在這里給屬性設(shè)置默認(rèn)值
this.name = "默認(rèn)名稱";
this.age = 0;
}
?
public static void main(String[] args) {
// 無參構(gòu)造生效,能正常創(chuàng)建對象
User user1 = new User();
// 帶參構(gòu)造創(chuàng)建對象
User user2 = new User("張三", 20);
}
}2. 為對象屬性設(shè)置默認(rèn)初始值
無參構(gòu)造可以在對象創(chuàng)建時,統(tǒng)一為成員變量設(shè)置合理的默認(rèn)值,避免屬性處于未初始化的狀態(tài)(如引用類型默認(rèn)null、基本類型默認(rèn) 0/false 等)。
public class Order {
private String orderId;
private double amount;
private boolean paid;
?
// 無參構(gòu)造中設(shè)置默認(rèn)值
public Order() {
this.orderId = "DEFAULT_" + System.currentTimeMillis(); // 生成默認(rèn)訂單號
this.amount = 0.0;
this.paid = false;
}
}3. 支持 JavaBean 規(guī)范
JavaBean 是 Java 中一種標(biāo)準(zhǔn)化的類設(shè)計規(guī)范,要求:
屬性私有,提供 get/set 方法
必須有一個公共的無參構(gòu)造方法
很多框架(如 Spring、MyBatis、Jackson)在反射實例化對象、序列化 / 反序列化、ORM 映射時,都會依賴無參構(gòu)造方法。比如 Spring 創(chuàng)建 Bean、MyBatis 映射數(shù)據(jù)庫結(jié)果到實體類,都需要通過無參構(gòu)造實例化對象。
// 符合JavaBean規(guī)范的實體類
public class Product {
private Long id;
private String name;
?
// 必須的無參構(gòu)造(框架反射需要)
public Product() {}
?
// 帶參構(gòu)造(可選)
public Product(Long id, String name) {
this.id = id;
this.name = name;
}
?
// get/set方法(JavaBean要求)
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}4. 便于子類繼承和構(gòu)造方法調(diào)用
子類的構(gòu)造方法默認(rèn)會調(diào)用父類的無參構(gòu)造方法(通過super())。如果父類沒有無參構(gòu)造(僅定義了帶參構(gòu)造),子類構(gòu)造方法必須顯式調(diào)用父類的帶參構(gòu)造,否則編譯報錯。顯式定義父類的無參構(gòu)造可以簡化子類的編寫。
// 父類
public class Animal {
private String type;
?
// 顯式定義無參構(gòu)造
public Animal() {
this.type = "未知動物";
}
?
// 帶參構(gòu)造
public Animal(String type) {
this.type = type;
}
}
?
// 子類
public class Dog extends Animal {
private String name;
?
// 子類構(gòu)造方法默認(rèn)調(diào)用父類無參構(gòu)造(super()),無需顯式寫
public Dog(String name) {
this.name = name;
}
}總結(jié)
無參構(gòu)造方法的核心作用可以總結(jié)為 3 點:
基礎(chǔ)實例化:恢復(fù)類的無參數(shù)創(chuàng)建能力(尤其在定義了帶參構(gòu)造后);
框架兼容:滿足 JavaBean 規(guī)范,支持 Spring、MyBatis 等框架的反射實例化需求;
初始化與繼承:統(tǒng)一設(shè)置屬性默認(rèn)值,簡化子類繼承時的構(gòu)造方法編寫。
到此這篇關(guān)于Java中無參構(gòu)造方法的一些核心作用總結(jié)的文章就介紹到這了,更多相關(guān)Java無參構(gòu)造方法作用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring cloud consul注冊的服務(wù)報錯critical的解決
這篇文章主要介紹了spring cloud consul注冊的服務(wù)報錯critical的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03
Java設(shè)計模塊系列之書店管理系統(tǒng)單機(jī)版(三)
這篇文章主要為大家詳細(xì)介紹了Java單機(jī)版的書店管理系統(tǒng)設(shè)計模塊和思想第三章,感興趣的小伙伴們可以參考一下2016-08-08
Idea中如何查看SpringSecurity各Filter信息
這篇文章主要介紹了Idea中如何查看SpringSecurity各Filter信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01

