场景引入:
"面试官推了推眼镜,突然发问:'说说Java构造方法的底层原理?重载构造方法时JVM怎么处理?' 你手心冒汗,明明用过无数次new Person()
,却突然语塞..." 别慌!看完这篇,构造方法从入门到"套路"面试官,一次搞定!💪
通俗理解:类的"出生证明"!
当你new
一个对象时,Java必须知道这个对象"长什么样"——构造方法就是负责这件事的"出生登记员"。
public class Dog { // 经典的无参构造(默认隐藏) public Dog() { System.out.println("🐶诞生了!"); } } // 使用:Dog myDog = new Dog(); → 输出"🐶诞生了!"
1️⃣ 面试高频考点(2025年统计仍占Java基础题的73%)
2️⃣ 实际开发:初始化对象状态(比如数据库连接池的初始大小)
3️⃣ 框架底层:Spring、MyBatis等依赖构造方法注入对象
如果你不写构造方法,Java会偷偷送你一个无参构造,但一旦你定义了带参构造,这个"隐身福利"就消失了!
public class Student { private String name; // 如果只写这个↓,new Student()会报错! public Student(String name) { this.name = name; } }
就像点奶茶可以选甜度🍵,对象也能用不同方式初始化:
public class Coffee { private String size; private boolean sugar; // 无参构造:默认中杯无糖 public Coffee() { this.size = "中杯"; this.sugar = false; } // 带参构造:自定义 public Coffee(String size, boolean sugar) { this.size = size; this.sugar = sugar; } } // 使用:new Coffee() 或 new Coffee("超大杯", true)
用this()
可以在一个构造方法里调用其他构造方法:
public class Phone { private String brand; private double price; public Phone(String brand) { this(brand, 9999.0); // 调用下面的构造方法 } public Phone(String brand, double price) { this.brand = brand; this.price = price; } }
子类构造方法必须先调用父类构造(显式或隐式):
class Animal { public Animal() { System.out.println("🐾Animal构造方法"); } } class Cat extends Animal { public Cat() { // 这里隐藏了 super(); System.out.println("🐱Cat构造方法"); } } // new Cat() 输出顺序:🐾 → 🐱
有些类(如LocalDate
)更喜欢用静态方法返回实例:
LocalDate today = LocalDate.now(); // 不是 new LocalDate()!
当参数超过4个时,推荐用Builder模式:
// 传统方式:new Pizza(true, false, true, "芝士", "番茄") → 参数顺序容易混 Pizza myPizza = new Pizza.Builder() .cheese(true) .tomato("双倍") .build();
禁止外部new
对象,保证全局唯一实例:
public class Singleton { private static Singleton instance; private Singleton() {} // 关键! public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
this()
必须在构造方法第一行 下次面试再被问到构造方法,你可以微微一笑:"从JVM类加载机制讲起,还是直接聊双检锁单例?" 😎
(注:本文技术点参考Oracle官方Java 17文档及2025年JVM生态报告)
本文由 生亦玉 于2025-07-30发表在【云服务器提供商】,文中图片由(生亦玉)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/484226.html
发表评论