Thinking In Java 学习笔记(三)

来源:互联网 发布:java历史版本下载 编辑:程序博客网 时间:2024/05/24 02:51

       接本系列上篇。

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++则会进行覆盖。如下代码。

2final类不允许有子类

2.7 多态

1)private方法不能被继承

Private方法默认是final,不能被继承。

2)关于抽象类生成的对象

3)构造器调用顺序

4)编写构造器的原则

如下代码,其结果可能不是符合预期。

用尽可能少的方法使得对象进入正常的状态,如果可以的话,避免调用其他方法。在构造器中唯一能够安全调用的方法是基类中的final方法(也适用于private方法,他们自动属于final方法)。这些方法不能被重载,因此也就不会出现以上令人惊讶的现象。

4)用继承进行设计

 用继承表达行为间的差异,并用属性表达状态上的变化。

 

原创粉丝点击