引用书本的一句话:随着计算机革命的发展,“不安全“的编程方式已逐渐成为编程代价高昂的代价之一。所以嘛,我们在编程的时候,应该更加重视代码的安全性,别黑客一个sql删除真个数据库也不是不可能发生的,那是跳楼可能都来不及咯!言归正传:今天的主题是初始化和清理。
我们可能见过很多的类中都有一个init()方法,也就说所谓的初始化方法,用于类加载时的数据初始化用的。那么我们创建类的时候,java又是如何给我们自动初始化的呢?
其实我们在创建类的时候,java就给这个类创建了一个默认的构造函数,使得我们可能直接new出该类的对象。那构造函数是什么样的呢?第一构造函数是没有返回值的,第二构造函数的名称和类的名称一样哦!不要惊讶,事实就是如此啊。第三除了默认的构造函数外,我们还可以自己创建带参的构造函数呢!
需要注意的是当创建类带参数的构造函数时,默认的构造函数就会失效,既不能new ClassName() . ClassName表示类的名称,如需要调用默认构造函数则需要增加一个新的无参的构造函数方可哦!看你有人就会觉得奇怪咯!为啥有两个名字相同的方法呢?这就要说到类的一个重要的特性了:方法重载。
何为方法重载?方法重载是指在一个类中,两个或多个方法具有相同的名称而具有不同的参数。可以通过参数的不同类型和不同个数来实现方法的重载。这个时候,可能有人就有疑惑了,可不可以通过返回值来区分呢?首先对这些好问的朋友给予掌声,问的好!答案是否定的,一起来看下面的例子就明白啦。
void f(){}
int f () {return 1;}
此时调用f(),这样的话,在强悍的java也是一脸懵逼啊,哥们,不带这么整滴,因为根本不能理解到底是调用哪个方法嘛!
下面来说一说this关键字的使用吧,this关键字只在方法内部使用,表示对“调用该方法对象”的引用。如果是调用类内部其他方法就没必要使用this了,可以直接调用。
清理:终结清理和垃圾回收
java允许在类中定义一个名为finalize()的方法,它的工作原理“假定”是这样的:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用finalize()方法,并且在下一次垃圾回收时,才真正回收对象占用的内存。
java垃圾回收的注意点:1 对象可能不被垃圾回收 。 2 垃圾回收不等于“析构” 。3 垃圾回收只与内存有关
垃圾回收的方法介绍:这里只介绍“标记-清理”算法和根搜索算法。
“标记-清理”是从堆栈和静态区出发,遍历所有的引用,进而找出活的对象,并进行标记,这个过程不回收对象,只有当所有对象标记完才会进行清理。如果清理后的空间不是连续的,就得重新整理剩下的对象。
根搜索算法:采用链方法来判断对象是否可用,如果对象到GC Roots之间有链可到达,则表示该对象是活的,没有则表示该对象可被回收。
对于方法的局部变量,java以编译时错误的形式来贯彻这种保证。
敬请期待下一期内容:java编程思想之复用类