作者:枫涵笑 | 来源:互联网 | 2024-12-27 19:39
1. Java 静态引入
Java 支持静态导入,允许直接使用静态成员而无需指定类名。例如:
import static java.lang.Math.min;
import static java.lang.Math.*;
2. Java 可变参数
Java 提供了可变参数(varargs)功能,使得方法可以接受不定数量的参数。这种特性在需要处理多个参数时非常有用。
3. Finalize 方法
Finalize 方法主要用于对象销毁前执行清理操作,但其作用有限且不推荐依赖它进行资源管理。下面是一个简单的例子:
class Book {
private boolean checkedOut = false;
public Book(boolean checkOut) {
this.checkedOut = checkOut;
}
public void checkIn() {
this.checkedOut = false;
}
@Override
protected void finalize() throws Throwable {
if (checkedOut) {
System.out.println("Error: book is still checked out");
}
super.finalize();
}
}
public class TerminationCondition {
public static void main(String[] args) {
Book novel = new Book(true);
novel.checkIn(); // 正确清理
new Book(true); // 忘记清理,finalize 捕获错误
System.gc(); // 建议垃圾回收
}
}
4. Java 成员初始化顺序
在构造函数调用之前,所有实例变量都会被自动初始化为其默认值。例如:
public class Counter {
int i;
public Counter() {
i = 7; // 先置为0再赋值为7
}
}
无论变量声明的位置如何,它们总是在构造器调用前完成初始化。
5. 静态成员初始化
静态成员仅在首次加载类时初始化一次,并且只会在必要时进行。以下代码展示了静态初始化的过程:
class Bowl {
Bowl(int marker) {
System.out.println("Bowl(" + marker + ")");
}
void f1(int marker) {
System.out.println("f1(" + marker + ")");
}
}
class Table {
static Bowl bowl1 = new Bowl(1);
public Table() {
System.out.println("Table()");
bowl2.f1(1);
}
void f2(int marker) {
System.out.println("f2(" + marker + ")");
}
static Bowl bowl2 = new Bowl(2);
}
class Cupboard {
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);
public Cupboard() {
System.out.println("Cupboard()");
bowl4.f1(2);
}
void f3(int marker) {
System.out.println("f3(" + marker + ")");
}
static Bowl bowl5 = new Bowl(5);
}
public class StaticInitialization {
public static void main(String[] args) {
System.out.println("Creating new Cupboard() in main");
new Cupboard();
System.out.println("Creating new Cupboard() in main");
new Cupboard();
table.f2(1);
cupboard.f3(1);
}
static Table table = new Table();
static Cupboard cupboard = new Cupboard();
}
6. 创建数组
Java 中创建数组有两种常见形式:动态创建和静态创建。动态创建允许在运行时确定数组大小,而静态创建则在编译时确定大小。