随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。
初始化和清理正是涉及安全的两个问题。
1.用构造器确保初始化
默认构造器(无参构造器):不接受任何参数的构造器
2.方法重载
1.区分重载方法
每个重载的方法都必须有一个独一无二的参数类型列表。
参数顺序的不同也足以区分两个方法。不过,一般情况下,别这么做,因为这会使代码难以维护。
2.涉及基本类型的重载
基本类型能从一个“较小”的类型自动提升至一个“较大”的类型,此过程一旦牵涉到重载,可能会造成一些混淆。
如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据就会被提升。char型略有不同,
如果无法找到恰好接受char参数的方法,就会把char直接提升至int型。
如果传入的实际参数较大,就得通过类型转换来执行窄化转换。如果不这样做,编译器就会报错。
3.以返回值区分重载方法
有时调用方法而忽略其返回值,所以根据返回值区分重载方法是行不通的。、
3.默认构造器
如果类中没有构造器,则编译器会自动帮你创建一个默认构造器。但是,如果已经定义了一个构造器(无论是否有参数),编译器就不会帮你自动创建默认构造器。
4.this关键字
this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。
1.在构造器中调用构造器
在构造器中,如果为this添加了参数列表,那么就有了不同的含义。这将产生对符合此参数列表的某个构造器的明确调用。
尽管可以用this调用一个构造器,但却不能调用两个。此外,必须将构造器调用置于最起始处,否则编译器会报错。
2.static的含义
static方法(静态方法)就是没有this的方法。可以在没有创建任何对象的前提下,通过类本身调用static方法。具有全局函数的语义。
在static方法的内部不能调用非静态方法,但是在非静态方法中可以调用static方法。
5.清理:终结处理和垃圾回收
Java有垃圾回收器负责回收无用对象占据的内存资源。但也有特殊的情况:假定你的对象(并非使用new)获得了一块“特殊”的内存区域,由于垃圾
回收器只知道释放那些经由new分配的内存,所以它不知道该如何释放该对象的这块“特殊”内存。为了应对这种情况,Java允许在类中定义一个名为finalize()的方法。
它的工作原理“假定”是这样的:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生
时,才会真正回收对象占用的内存。所以要是你打算用finalize(),就能在垃圾回收时刻做一些重要的清理工作。
注意:finalize()与C++中的析构函数不同:在C++中,对象一定会被销毁(如果程序中没有缺陷的话),而Java里的对象却并非总是被垃圾回收。
换句话说:1.对象可能不被垃圾回收 2.垃圾回收并不等于“析构”
只要程序没有濒临存储空间用完的那一刻,对象占用的空间就总也得不到释放。如果程序执行结束,并且垃圾回收器一直都没有释放你创建的任何
对象的存储空间,则随着程序的退出,那些资源也会全部交还给操作系统。这个策略是恰当的,因为垃圾回收本身也有开销,要是不使用它,那就不用
支付这部分开销了。
1.finalize()的用途何在
垃圾回收只与内存有关。使用垃圾回收器的唯一原因是为了回收程序不再使用的内存。所以对于与垃圾回收有关的任何行为来说(尤其是finalize()方法),
它们也必须同内存及其回收有关。
finalize()作用:释放那些通过某种创建对象以外的方式为对象分配的存储空间。
之所以要有finalize(),是由于在分配内存时可能采用了类似C语言中的做法,而非Java中通常做法。这种情况主要发生在使用“本地方法”的情况下,本地
方法是一种在Java中调用非Java代码的方式。本地方法目前只支持C和C++,但C和C++可以调用其他语言写的代码,所以实际上可以调用任何代码。