您的位置:首页 > 编程语言 > Java开发

JAVA编程思想笔记——初始化和清理(1)

2013-05-16 20:20 183 查看

1 用构造器确保初始化

构造器采用与类相同的名字。主类的名字和文件名要相同。

从概念上讲,初始化 和 创建 是彼此独立的,然而,在JAVA中,初始化 和 创建 是捆绑在一起的,两者不能分离。

构造器是一种特殊类型的方法,因为它没有返回值。这与返回值为空(void)明显不同。对于返回值为空,尽管方法本身不会自动返回什么,但是仍可选择让它返回别的东西。构造器则不会返回任何东西。

2 方法重载

构造器是强制重载方法名的另一个原因。

区分重载的方法:每个重载的方法都必须有一个独一无二的参数类型列表。参数顺序也可以区分两个方法,但是不推荐这么做。

基本数据类型从较小的类型自动提升至一个较大的类型。但是如果传入的实际参数较大,就要通过强制类型转换进行窄化转换。

转换顺序为:char -> int -> long -> float -> double; byte -> short -> int ......

3 默认构造器

又称为无参构造器。

如果已经定义了一个构造器(无论是否有参数),编译器就不会帮你自动创建默认构造器。

4 this关键字

this关键字返回了对当前对象的引用。通常写this的时候,都是指”这个对象“或”当前对象“,而且它本身表示对当前对象的引用
应用情景:


1 将当前对象传递给其他方法
2 在构造器中调用构造器 除构造器之外,编译器禁止在其他任何方法中调用构造器


5 static

static方法就是没有this的方法。在static方法的内部不能调用非静态方法,但是反过来可以。
可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法

6 清理:终结处理和垃圾回收

垃圾回收器只知道释放那些经由new分配的内存,所以它不知道该如何释放该对象的这块特殊内存,因为这块内存不是通过创建获得的。
finalize()方法:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。所以要是你打算用finalize(),就能在垃圾回收时刻做一些重要的清理工作。
注:在C++中,对象一定会被销毁(析构函数),而Java中的对象却并非总是被垃圾回收。需要注意三点:

对象可能不被垃圾回收
垃圾回收并不等于“析构”
垃圾回收只与内存有关

所谓的特殊情况,即是通过某种创建对象方式以外的方式为对象分配了内存空间。这时需要finalize()方法。主要是指在分配内存时可能采用了类C的做法,而非Java中通常做法。这种情况主要发生在使用“本地方法”的情况下,本地方法是一种在JAVA中调用非JAVA代码的方法。

总结一句话,finalize()函数不是进行普通的清理工作的合适场所,因为它的使用情况非常特殊。

一个例子,之前在不应该的地方糊涂的:
class WebBank {
boolean loggedIn = false;
WebBank(boolean logStatus) {
loggedIn = logStatus;
}
void logIn() {
loggedIn = true;
}
void logOut() {
loggedIn = false;
}
protected void finalize() {
if(loggedIn)
System.out.println("Error: still logged in");
// Normally, you'll also do this:
// super.finalize(); // Call the base-class version
}
}

public class TerminationConditionEx {
public static void main(String[] args) {
WebBank bank1 = new WebBank(true);
WebBank bank2 = new WebBank(true);
// Proper cleanup: log out of bank1 before going home
bank1.logOut();
// Drop the reference, forget to cleanup:
new WebBank(true);
// Force garbage collection and finalization:
System.gc();
}
}


上面的代码之所以会有error警告输出,是因为new WebBank(true);出来的对象没有引用(虽然Java的垃圾回收技术不是简单地检查引用数,这个接着就会讲到),所以在强制进行垃圾回收的时候,会检测它的loggedIn状态,另外两个不会。

Java不允许创建局部对象,必须使用new创建对象。

垃圾回收机制
引用记数是一种简单但速度很慢的垃圾回收技术。并且不能处理循环引用这种情况。
Java的垃圾回收所依据的思想为对任何“活”的对象,一定能最终追溯到其存活在堆栈或静态存储区之中的引用。
Java的垃圾回收机制的概括可以为:自适应的、分代的、停止-复制、标记-清扫式垃圾回收器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: