`
- 浏览:
150834 次
- 性别:
- 来自:
北京
-
finalize()方法不需要显示的调用,在垃圾回收时会被自动先行调用。
该方法的权限是protected或是public,但是不能为private
finalize()方法被调用的条件是:
(1)显示的调用System.gc()方法;
(2)存在new出来的尚未被销毁的匿名的对象;例:
class Book{
boolean checkedOut = false;
Book(boolean checkout){
this.checkedOut = checkout;
}
void checkIn(){
checkedOut = false;
}
protected void finalize(){
if(checkedOut){
System.out.println("Error:checked out");
}else
System.out.println("Everything is good!");
}
}
public class TerminationCondition {
public static void main(String[] args){
Book novel = new Book(true);
novel.checkIn();
new Book(true);
System.gc();
}
}
因为main()方法中new Book(true),所以存在new出来的匿名的对象,在显示的调用System.gc()方法后,程序调用finalize()方法,即:程序输出:
Error:checked out
初始化
初始化顺序:在类内部,变量定义的先后顺序决定了初始化的顺序,即使变量定义散布于方法定义之间,它们仍会在任何方法(包括构造器)被调用之前得到初始化。
无论创建多少个对象,静态数据都只占用一份存储区域。static关键字不能应用于局部变量,因此,它只能作用于域。如果一个域是静态的基本类型域,且没有对其进行初始化,那么它就会获得基本类型的标准初值;如果它是一个对象的引用,那么它默认初始值就是null。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Java初始化和清理是Java语言中非常重要的两个过程,它们确保了Java程序的正确运行和资源的有效管理。Java的初始化包括类的加载、连接和初始化三个过程,而清理则主要指垃圾回收机制。 首先,Java初始化的主要特性...
在Java中,finalize()方法是一个重要的概念,它与final关键字息息相关。下面我们将深入探讨finalize()方法的用法和应用场景。 一、final关键字 final是Java的关键字,它所表示的是“这部分是无法修改的”。在程序...
// 构造器中初始化 } void method(final String str) { // str的内容在方法内部不可改变 } } ``` `final`用于方法表示该方法不能被子类重写,以防止功能被修改。这有助于确保特定行为的不变性。同样,`final...
本章“第五章 初始化与清理”可能详细探讨了这两个重要概念,特别是在软件工程和系统设计中的应用。下面将根据标题和描述,结合常见的初始化与清理实践,来阐述相关知识点。 初始化是程序启动时执行的一系列操作,...
4.4 Foreach语法 4.5 return 4.6 break和 continue 4.7 臭名昭著的“goto” 4.8 switch 4.9 总结 第5章 初始化与清理 5.1 用构造器确保初始化 5.2 方法重载 5.2.1 区分重载方法 5.2.2 涉及基本类型的重载 5.2.3 以...
2. **安全性**:在多线程环境中,`final` 变量提供了线程安全性,因为它们的值一旦初始化就不能改变,从而避免了因并发访问导致的数据不一致问题。 3. **性能优化**:JVM能对 `final` 变量进行内联优化,这意味着...
在Java中,这些部分的初始化顺序是: - 静态变量和静态初始化块:它们是按照代码的顺序执行的。 - 实例变量和实例初始化块:这又是按照代码顺序执行的,位于静态变量和静态块之后。 - 构造器:最后调用,位于所有...
8. **初始化与清除**:初始化和垃圾回收机制在Java中非常重要,书中讨论了如何正确初始化对象,何时使用构造器,以及如何利用final关键字和finalize()方法进行资源清理。 9. **隐藏实现过程**:通过包和访问修饰符...
final 修饰的变量必须在初始化时给定初值,以后在使用时只能被引用而不能被修改。final 修饰的方法不能被重载,这意味着在子类中不能对该方法进行重新定义。 其次,finally 关键字通常用于异常处理中。finally 块...
1. 对于成员变量,`final` 必须在声明时初始化或在构造器中初始化。 2. 局部变量必须在声明时立即赋值。 3. 匿名类中的所有变量必须是 `final` 的。 4. `final` 方法不能被重写。 5. `final` 类不能被继承。 6. 未...
- **实例变量和实例初始化块**:随对象实例化过程初始化,按代码中的顺序初始化。 - **构造器**:最后执行,用于完成对象的构造,包括调用父类构造器(如果有的话),以及执行自身构造器内的代码。 - **示例...
- 静态`final`变量通常用于定义常量,可以在类初始化阶段(静态初始化块)进行初始化,而非静态`final`变量则不能在静态初始化块中初始化。 - `final`变量的初始化在类加载时就会完成,因此,如果`final`变量引用的...
综上所述,《Think in Java》这本书深入浅出地讲解了Java的核心概念和技术细节,包括构建器的特殊性质、`finalize()`方法在资源管理中的角色、`this`关键字的应用以及对象初始化的流程。通过对这些关键知识点的理解...
在Java编程语言中,面试时常会涉及到类的初始化顺序,这是理解对象生命周期和类加载机制的关键部分。在Java中,类的初始化顺序遵循以下规则: 1. **静态变量与静态初始化块**:首先,静态变量(static fields)会被...
7.5.4 初始化接口中的字段 7.6 内部类 7.6.1 内部类和上溯造型 7.6.2 方法和作用域中的内部类 7.6.3 链接到外部类 7.6.4 static内部类 7.6.5 引用外部类对象 7.6.6 从内部类继承 7.6.7 内部类可以覆盖吗? 7.6.8 ...