java 构造函数】
时间: 2025-01-02 16:21:56 浏览: 9
### Java 构造函数详解
#### 一、构造函数定义与特性
在Java中,构造函数用于初始化新创建的对象。每个类都有至少一个构造函数。如果程序员不显式声明任何构造函数,则编译器会提供一个无参的默认构造函数[^2]。
构造函数具有如下特点:
- 名字必须与类名相同;
- 不返回任何数据类型,甚至void也不返回;
- 主要用来初始化对象的状态;
- 当使用`new`关键字创建对象时自动调用。
```java
public class Person {
private String name;
// 默认构造函数
public Person() {
this.name = "Unknown";
}
// 带参构造函数
public Person(String name) {
this.name = name;
}
}
```
#### 二、构造函数重载
如同其他方法一样,在同一个类内可以存在多个不同签名(参数列表不同的情况)的构造函数,这被称为构造函数重载。这种灵活性允许根据传入的不同参数集灵活地初始化对象状态。
```java
// 上述Person类中的两个构造函数即为构造函数重载的例子
```
#### 三、普通方法与构造函数同名的情况
尽管构造函数看起来像是名为类名称的方法,但实际上它们并不是真正意义上的方法。然而,可以在同一类中拥有一个静态或实例方法的名字恰好等于类名。需要注意的是,这样做可能会引起混淆,并不是推荐的做法。
```java
public class Test{
public Test(){
System.out.println("Constructor called");
}
public void Test(){ // 这是一个普通的成员方法而非构造函数
System.out.println("Method named as the class is invoked");
}
public static void main(String[] args){
Test obj = new Test(); // 调用了构造函数
obj.Test(); // 明确地调用了那个名字相同的普通方法
}
}
```
#### 四、泛型类的构造函数
对于带有类型参数的泛型类来说,其构造函数同样遵循上述规则。当实例化此类时,除了传递给构造函数的实际参数外,还需要指明具体的类型参数[^3]。
```java
class Stu<T, V, K> {
T t;
V v;
K k;
// 泛型类的构造函数
public Stu(T t, V v, K k) {
this.t = t;
this.v = v;
this.k = k;
}
}
// 使用示例
Stu<String, Integer, Character> stuObj = new Stu<>("张三", 18, '男');
```
阅读全文