Java 构造器是一种特殊类型的方法,用于初始化创建的对象。构造器的名字与类名相同,并且语法上类似于方法。但是,构造器没有显式的返回类型。
通常,你会使用构造器来给类定义的实例变量赋予初始值,或者执行任何其他创建完全形成对象所需的启动过程。
所有的类都有构造器,无论你是否定义了构造器,因为 Java 会自动提供一个默认构造器来初始化所有成员变量为零。然而,一旦你定义了自己的构造器,默认构造器就不再被使用。
创建 Java 构造器的规则
在创建 Java 构造器时,必须遵循以下规则:
-
-
Java 构造器没有返回类型。甚至不能使用
void
作为返回类型。
-
在同一个类中可以有多个构造器,这就是所谓的构造器重载。
-
可以使用访问修饰符来改变构造器的可见性/可访问性。
-
Java 提供了一个默认构造器,在创建对象时被调用。如果你创建了任何类型的构造器,默认构造器(由 Java 提供的)将不会被调用。
创建 Java 构造器
创建构造器的方法很简单,只需写出构造器的名字(与类名相同),后面跟着括号,然后在花括号 {}
中写出构造器的主体。
语法
以下是构造器的语法:
class ClassName {
ClassName() {
}
}
示例:创建 Java 构造器
下面的示例创建了一个简单的构造器,它会打印 "Hello world"。
public class Main {
Main() {
System.out.println("Hello, World!");
}
public static void main(String[] args) {
System.out.println("The main() method.");
Main obj_x = new Main();
}
}
该程序将输出:
The main() method.
Hello, World!
Java 构造器的类型
Java 中有三种不同类型的构造器,如下所示:
-
-
-
1. 默认构造器
如果你没有在类中创建任何构造器,Java 会提供一个默认构造器来初始化对象。
示例:默认构造器(没有构造器的类)
在这个例子中,我们没有定义任何构造器。默认构造器将用于初始化对象。
public class Main {
int num1;
int num2;
public static void main(String[] args) {
Main obj_x = new Main();
System.out.println("num1 : " + obj_x.num1);
System.out.println("num2 : " + obj_x.num2);
}
}
输出:
num1 : 0
num2 : 0
2. 无参构造器
如其名所示,无参构造器不接受任何参数。使用无参构造器,你可以在创建对象时初始化类的数据成员并执行各种操作。
示例:无参构造器
这个例子创建了一个无参构造器。
public class Main {
int num1;
int num2;
Main() {
num1 = -1;
num2 = -1;
}
public static void main(String[] args) {
Main obj_x = new Main();
System.out.println("num1 : " + obj_x.num1);
System.out.println("num2 : " + obj_x.num2);
}
}
输出:
num1 : -1
num2 : -1
3. 带参数构造器
带有一个或多个参数的构造器称为带参数构造器。
大多数情况下,你需要一个接受一个或多个参数的构造器。参数添加到构造器的方式与添加到方法的方式相同,只需要在构造器名称后面的括号内声明它们即可。
示例 1:带参数构造器
这个例子创建了一个带参数的构造器。
public class Main {
int num1;
int num2;
Main(int a, int b) {
num1 = a;
num2 = b;
}
public static void main(String[] args) {
Main obj_x = new Main(10, 20);
Main obj_y = new Main(100, 200);
System.out.println("obj_x");
System.out.println("num1 : " + obj_x.num1);
System.out.println("num2 : " + obj_x.num2);
System.out.println("obj_y");
System.out.println("num1 : " + obj_y.num1);
System.out.println("num2 : " + obj_y.num2);
}
}
输出:
obj_x
num1 : 10
num2 : 20
obj_y
num1 : 100
num2 : 200
示例 2:带参数构造器
这里是一个简单的例子,使用了构造器。
class MyClass {
int x;
MyClass(int i ) {
x = i;
}
}
你可以这样调用构造器来初始化对象:
public class ConsDemo {
public static void main(String args[]) {
MyClass t1 = new MyClass( 10 );
MyClass t2 = new MyClass( 20 );
System.out.println(t1.x + " " + t2.x);
}
}
输出:
10 20
Java 中的构造器重载
构造器重载意味着在类中有多个构造器。当你有多个带有不同参数列表的构造器时,这就叫做构造器重载。
示例:构造器重载
在这个例子中,我们有多个构造器。
class Student {
String name;
int age;
Student() {
this.name = "Unknown";
this.age = 0;
}
Student(String name) {
this.name = name;
this.age = 0;
}
Student(String name, int age) {
this.name = name;
this.age = age;
}
public void printDetails() {
System.out.println("Name : " + this.name);
System.out.println("Age : " + this.age);
}
}
public class Main {
public static void main(String[] args) {
Student std1 = new Student();
Student std2 = new Student("Jordan");
Student std3 = new Student("Paxton", 25);
System.out.println("std1...");
std1.printDetails();
System.out.println("std2...");
std2.printDetails();
System.out.println("std3...");
std3.printDetails();
}
}
输出:
std1...
Name : Unknown
Age : 0
std2...
Name : Jordan
Age : 0
std3...
Name : Paxton
Age : 25