Java 构造方法
Java 中的构造方法类似于方法,是创建类的对象时调用的方法。在本教程中,我们通过示例了解 Java 构造方法、它们的类型以及如何使用它们。
在本教程中,我们通过示例了解 Java 构造方法、它们的类型以及如何使用它们。
什么是构造方法?
Java 中的构造方法类似于方法,是创建类的对象时调用的方法。
与Java 方法不同,构造方法的名称与类的名称相同,并且没有任何返回类型。例如,
class Test {
Test() {
// 构造方法 body
}
}
在这里, Test()
是一个构造方法。它与类的名称相同,并且没有返回类型。
示例 1:Java 构造方法
public class Main {
private String name;
// 构造方法
Main() {
System.out.println("调用了构造方法:");
name = "GoBeta.NET";
}
public static void main(String[] args) {
// 构造方法在创建对象时调用
Main obj = new Main();
System.out.println("对象的 name 是": + obj.name);
}
}
输出:
调用了构造方法:
对象的 name 是:GoBeta.NET
在上面的例子中,我们创建了一个名为 Main()
的构造方法。在构造方法内部,我们初始化了 name
字段。
构造方法类型
在 Java 中,构造方法可以分为 3 种类型:
- 无参数的构造方法
- 带参数的构造方法
- 默认构造方法
无参数的构造方法
与方法类似,构造方法可能有参数也可能没有参数。如果构造方法不接受任何参数,则称为无参数构造方法。例如:
private Constructor() {
// body of the constructor
}
示例 2:Java 私有无参数构造方法
public class Main {
int i;
// 无参数构造方法
private Main() {
i = 5;
System.out.println("调用了构造方法。");
}
public static void main(String[] args) {
Main obj = new Main();
System.out.println("i = " + obj.i);
}
}
输出:
调用了构造方法。
i = 5
在上面的例子中,我们创建了一个构造方法 Main()
。在这里,构造方法不接受任何参数。因此,它被称为无参数构造方法。
请注意,我们已将构造方法声明为私有 private
。
一旦声明了 private
构造方法,就不能从类外部访问它。
在这里,我们在同一个类中创建对象。因此,程序能够访问构造方法。要了解更多信息,请访问Java 实现私有构造方法。
但是,如果我们想在类之外创建对象,那么我们需要将构造方法声明为 public
。
示例 3:Java 公共无参数构造方法
class Company {
String name;
// public 构造方法
public Company() {
name = "GoBeta.NET";
}
}
public class Main {
public static void main(String[] args) {
// 在另外的类中创建对象
Company obj = new Company();
System.out.println("name = " + obj.name);
}
}
输出:
name = GoBeta.NET
请跳转到 Java 访问修饰符章节了解更多信息。
Java 带参数的构造方法
Java 构造方法也可以接受一个或多个参数。这种构造方法被称为带参数的构造方法。
示例 4:带参数的构造方法
public class Main {
String languages;
// 构造方法接受一个参数
Main(String lang) {
languages = lang;
System.out.println(languages + " 编程语言");
}
public static void main(String[] args) {
Main obj1 = new Main("Java");
Main obj2 = new Main("Python");
Main obj3 = new Main("C");
}
}
输出:
Java 编程语言
Python 编程语言
C 编程语言
在上面的例子中,我们创建了一个名为 Main()
的构造方法。在这里,构造方法接受一个参数。注意下面这行代码:
Main obj1 = new Main("Java");
在这里,我们将单个值传递给构造方法。根据传递的参数,在构造方法中初始化 languages
变量。
Java 默认构造方法
如果我们不创建任何构造方法,Java 编译器会在程序执行过程中自动创建一个无参数的构造方法。这个构造方法称为默认构造方法。
示例 5:默认构造方法
public class Main {
int a;
boolean b;
public static void main(String[] args) {
// 调用了默认构造方法。
Main obj = new Main();
System.out.println("Default Value:");
System.out.println("a = " + obj.a);
System.out.println("b = " + obj.b);
}
}
输出:
Default Value:
a = 0
b = false
本例中,我们没有创建任何构造方法。因此,Java 编译器会自动创建默认构造方法。
默认构造方法使用默认值初始化任何未初始化的实例变量。
类型 | 默认值 |
---|---|
boolean |
false |
byte |
0 |
short |
0 |
int |
0 |
long |
0L |
char |
\u0000 |
float |
0.0f |
double |
0.0d |
object |
null |
在上面的程序中,变量 a
和 b
分别用默认值 0
和初始化 false
。
上述程序等价于:
public class Main {
int a;
boolean b;
// 私有构造方法
private Main() {
a = 0;
b = false;
}
public static void main(String[] args) {
// 调用构造方法
Main obj = new Main();
System.out.println("Default Value:");
System.out.println("a = " + obj.a);
System.out.println("b = " + obj.b);
}
}
程序的输出与示例 5 相同。
Java 构造方法的重要说明
- 实例化对象时调用构造方法。
- 创建构造方法的两条规则是:
- 构造方法的名称应该与类相同。
- Java 构造方法不能有返回类型。
- 如果一个类没有构造方法,Java 编译器会在运行时自动创建一个默认构造方法。默认构造方法使用默认值初始化实例变量。例如,
int
变量将被初始化为0
- 构造方法类型:
- 无参数的构造方法
- 带参数的构造方法
- 默认构造方法
- 构造方法不能是
abstract
或static
或final
。 - 构造方法可以重载但不能被覆盖。
Java 中的构造方法重载
与Java 方法重载类似,我们也可以创建两个或多个具有不同参数的构造方法。这称为构造方法重载。
示例 6:Java 构造方法重载
public class Main {
String language;
// 无参数的构造方法
Main() {
this.language = "Java";
}
// 带 langulage 参数的构造方法
Main(String language) {
this.language = language;
}
public void getName() {
System.out.println("编程语言:" + this.language);
}
public static void main(String[] args) {
// 调用无参数的构造方法
Main obj1 = new Main();
// 调用带 langulage 参数的构造方法
Main obj2 = new Main("Python");
obj1.getName();
obj2.getName();
}
}
输出:
编程语言:Java
编程语言:Python
在上面的例子中,我们有两个构造方法: Main()
和 Main(String language)
。这里,两个构造方法都用不同的值初始化变量语言的值。
注意:我们使用 this
关键字来指定类的变量。要了解有关 this
关键字的更多信息,请访问Java this 关键字。
其他
一般情况下,构造函数都是 public
公有的,目的是在其他类中能够实例化该类。但是有时候我们可以将构造函数设置为 private
私有的,目的则是为了不让在类外部实例化此类的对象,比如常见的设计模式:单例模式。想了解关于更多信息,请跳转到 Java 单例章节。