Java 知识量:11 - 45 - 220
构造方法是一种特殊的方法,用于初始化新创建的对象。构造方法的名称必须与类名相同,并且它没有返回类型。下面是定义构造方法的语法:
public class MyClass { // 定义构造方法 public MyClass() { // 初始化代码 } }
上面的代码定义了一个名为 MyClass 的类,并定义了一个名为 MyClass 的构造方法。在这个构造方法中,可以添加初始化代码,用于设置对象的初始状态。
还可以在构造方法中定义参数,以便在创建对象时传递值。例如:
public class MyClass { private int x; // 定义带参数的构造方法 public MyClass(int x) { this.x = x; } }
上面的代码定义了一个带有一个整型参数的构造方法,该参数用于初始化 x 成员变量。在创建对象时,可以按如下方式使用这个构造方法:
MyClass obj = new MyClass(10);
这将创建一个新的 MyClass 对象,并将其 x 成员变量初始化为 10。
可以在一个类中定义多个构造方法,这被称为构造方法的重载(overloading)。构造方法的重载与方法的重载类似,只不过构造方法没有返回类型。
以下是如何在一个类中定义多个构造方法的示例:
public class MyClass { private int x; private int y; // 构造方法1 public MyClass() { this.x = 0; this.y = 0; } // 构造方法2 public MyClass(int x) { this.x = x; this.y = 0; } // 构造方法3 public MyClass(int x, int y) { this.x = x; this.y = y; } }
在这个例子中,MyClass这个类有三个构造方法。第一个构造方法不接受任何参数,它将x和y初始化为0。第二个构造方法接受一个参数,并将y初始化为0。第三个构造方法接受两个参数,并将它们分别赋值给x和y。
在创建MyClass的实例时,可以根据需要选择使用哪个构造方法。例如:
MyClass obj1 = new MyClass(); // 使用第一个构造方法,x和y都被初始化为0 MyClass obj2 = new MyClass(10); // 使用第二个构造方法,x被初始化为10,y被初始化为0 MyClass obj3 = new MyClass(10, 20); // 使用第三个构造方法,x被初始化为10,y被初始化为20
一个构造方法可以调用另一个构造方法。要在构造方法中调用另一个构造方法,可以使用以下语法:
public class MyClass { private int x; private int y; public MyClass() { this(0, 0); // 调用另一个构造方法 } public MyClass(int x, int y) { this.x = x; this.y = y; } }
在上面的示例中,MyClass类有两个构造方法。第一个构造方法使用this(0, 0)调用第二个构造方法,以初始化x和y成员变量。
使用this()关键字调用另一个构造方法时,必须在构造方法中的第一行进行调用。这是因为构造方法的目的是初始化对象,所以必须在执行任何其他代码之前调用另一个构造方法。
注意:只能在同一个类中的构造方法之间进行调用,不能调用其他类的构造方法。
在Java中,每个数据类型都有其默认值,如果程序员没有明确地初始化一个变量,那么该变量将自动被设置为默认值。这些默认值如下:
对于数值类型的基本数据(byte, short, int, long, float, double),默认值是0或0.0。
对于布尔类型(boolean),默认值是false。
对于字符类型(char),默认值是null字符'\u0000'。
然而,对于对象引用类型(类、数组或接口),默认值就是null。如果试图在没有先创建对象的情况下访问对象的方法或属性,程序就会抛出一个NullPointerException。
初始化块或初始化程序在Java中用于初始化类的实例。它们可以是静态的,也可以是非静态的。静态初始化块用于初始化静态变量,而非静态初始化块用于初始化实例变量。它们在以下情况下被调用:
静态初始化块:当类被加载到JVM时,静态初始化块会被调用一次。它通常用于初始化静态变量。
非静态初始化块:每次创建类的实例时,都会调用非静态初始化块。它通常用于初始化实例变量。
以下是使用初始化块的示例:
public class Test { // 静态初始化块 static { // 初始化静态变量 } // 非静态初始化块 { // 初始化实例变量 } }
注意:初始化块在Java中的使用并不常见,通常会直接在构造函数中进行初始化操作。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6