Java 构造函数
Java 构造函数 是一种特殊的类方法,用于在创建对象时初始化对象的属性。它与类名相同,并且没有返回值类型。
构造函数的作用:
-
为对象的属性设置初始值
-
执行必要的初始化操作
-
提供创建对象的多种方式
构造函数的类型:
-
默认构造函数: 无参数的构造函数,如果用户没有明确定义构造函数,则 Java 编译器会自动创建一个默认构造函数。
-
带参数的构造函数: 可以为构造函数添加参数,以便在创建对象时传入初始值。
示例:
public class Main {
int x;
// 默认构造函数
public Main() {
x = 5;
}
// 带参数的构造函数
public Main(int y) {
x = y;
}
public static void main(String[] args) {
Main myObj1 = new Main(); // 调用默认构造函数
System.out.println(myObj1.x); // 输出 5
Main myObj2 = new Main(10); // 调用带参数的构造函数
System.out.println(myObj2.x); // 输出 10
}
}
构造函数的注意事项:
-
构造函数不能被重写。
-
构造函数不能被声明为 abstract 或 final。
-
构造函数可以抛出异常。
一些额外的说明:
-
可以使用构造函数来执行对象的初始化操作,例如:
-
打开数据库连接
-
加载配置文件
-
注册事件监听器
-
-
可以使用多个构造函数来提供创建对象的多种方式,例如:
-
使用默认值创建对象
-
使用参数创建对象
-
使用克隆创建对象
-
Java 修饰符
Java 修饰符 用于控制类、属性、方法和构造函数的访问权限和行为。它们可以分为两组:
- 访问修饰符:
-
public: 意味着代码对所有类可访问。
-
private: 意味着代码只能在声明的类内部访问。
-
default: 意味着代码只能在同一包中访问。
-
protected: 意味着代码在同一包和子类中可访问。
- 非访问修饰符:
-
final: 意味着类不能被继承,属性和方法不能被重写。
-
static: 意味着属性和方法属于类,而不属于对象。
-
abstract: 意味着类不能用于创建对象,方法没有主体,必须由子类提供。
-
transient: 意味着在序列化包含它们的对象时,属性和方法将被跳过。
-
synchronized: 意味着方法一次只能由一个线程访问。
-
volatile: 意味着属性的值不会在本地线程缓存,总是从"主内存"读取。
示例:
访问修饰符:
// public类可以被任何类访问
public class Main {
// private属性只能在 Main 类内部访问
private int x = 10;
// default方法只能在同一个包中访问
void myMethod() {
System.out.println("This is a default method.");
}
// protected方法可以在同一个包和子类中访问
protected void myProtectedMethod() {
System.out.println("This is a protected method.");
}
public static void main(String[] args) {
Main myObj = new Main();
System.out.println(myObj.x); // 错误,无法访问私有属性
myObj.myMethod(); // 可以访问 default 方法
myObj.myProtectedMethod(); // 可以访问 protected 方法
}
}
非访问修饰符:
public class Main {
// final属性不能被修改
final int y = 20;
// static方法可以在不创建对象的情况下访问
static void myStaticMethod() {
System.out.println("This is a static method.");
}
// abstract方法没有主体,必须由子类提供
abstract void myAbstractMethod();
public static void main(String[] args) {
// y = 30; // 错误,无法修改 final 属性
myStaticMethod(); // 可以访问 static 方法
// myAbstractMethod(); // 错误,无法直接调用抽象方法
}
}
// 子类继承 Main 类并提供抽象方法的主体
class Child extends Main {
@Override
void myAbstractMethod() {
System.out.println("This is the implementation of myAbstractMethod.");
}
}
一些额外的说明:
-
可以使用多个修饰符来修饰类、属性、方法和构造函数。例如,
public final
表示类是公开的并且不能被继承。 -
修饰符是 Java 语言的重要组成部分,它们可以帮助您控制代码的访问权限和行为。