接本系列上篇。
1 基础复习摘要
2.1 Finalize()使用
该函数只在垃圾回收器就要释放空间时,才会调用的。因此不能等同于C++的析构函数。
Finalize中进行的清除工作,主要是对非java方法分配内存进行清除。因此,finalize一般不需要使用。
2.2 垃圾回收器
1)垃圾回收器如何工作
引用级数方式。引用到某个对象时,该引用技术就加1;而当引用离开其作用域或置为null时,则减1。垃圾回收器会在包含所有已经创建对象的列表上遍历,一旦发现某个对象的引用是0时,则释放其占用的空间。
非基于引用计数的回收方式。依据的思想就是,任何“活”的对象,一定能追述到其存活的堆栈或是静态存储区中的引用。
2.3 静态初始化
类中的静态代码块,例如下面,
2.4 数组初始化
1)数组赋值
数值可以直接赋值给另外一个数组。但是需要注意的是,其实是复制引用过去而已。如下代码块,
public static void main(String[] args) {
// TODO Auto-generated method stub
int num1[] = {1,2,3,4};
int num2[] = num1;
for(int i = 0;i < num1.length;i++)
num2[i] ++;
for(int j = 0;j < num1.length;j++)
System.out.println("num2 "+num2[j]);
for(int k = 0;k < num2.length;k++)
System.out.println("num1 "+num1[k]);
}
输出为:
num2 2
num2 3
num2 4
num2 5
num1 2
num1 3
num1 4
num1 5
2.5 访问控制
1)Private使得类不被访问
若要使一个类不被访问,可以将该类的构造函数设为private。
2)包访问控制
若未指定类的访问控制,则默认是包访问控制权限。包访问控制权限指的是,该类可以被包内其他类访问,包的定义类似如下。
Package com.src.test;
若没定义包,则默认定义此文件路径下的上一级文件夹为包。
2.6 组合与继承
1)基类重载
对于基类的重载,java不对基类的重载函数进行覆盖,而C++则会进行覆盖。如下代码。
2)final类不允许有子类
2.7 多态
1)private方法不能被继承
Private方法默认是final,不能被继承。
2)关于抽象类生成的对象
3)构造器调用顺序
4)编写构造器的原则
如下代码,其结果可能不是符合预期。
用尽可能少的方法使得对象进入正常的状态,如果可以的话,避免调用其他方法。在构造器中唯一能够安全调用的方法是基类中的final方法(也适用于private方法,他们自动属于final方法)。这些方法不能被重载,因此也就不会出现以上令人惊讶的现象。
4)用继承进行设计
用继承表达行为间的差异,并用属性表达状态上的变化。