随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。
1.用构造器确保初始化
- 构造器:在创建对象时被自动调用的特殊方法.
- 构造器命名问题:1.所取得任何名字可能与类的某个成员命名冲突;2.调用构造器是编译器的责任,所以应该让编译器知道该调用哪个方法.
- 构造器命名:与类名相同,所以"每个方法首字母小写"的编程风格不适用于构造器.
- 构造器没有返回值(new表达式返回了对新建对象的引用,但构造器本省并没有返回任何值).
2.方法重载
- 目的:为了让方法名相同而形式参数不同的构造器同时存在.
- 方法重载是构造器所必需的,但亦可用于其他方法.
- 区分:参数类型列表,参数顺序(代码难以维护),涉及基本类型的重载(易混淆),返回值(为了副作用而调用就会忽略其返回值 ×)
3.默认构造器
- 如果类中没有构造器,编译器会自动创建一个默认构造器.
- 如果已有构造器,则不会创建.
4.this关键字
- 为了能用简便,面向对象的语法来编写代码,编译器做了一些幕后工作,他把"所操作对象的引用"作为第一个参数传给方法(注:一般是通过对象的引用来调用方法,编译之后通过对象来调用).
- 只能在方法内部使用,表示对"调用方法的那个对象"的引用.
- 如果在方法内部,调用同一个类的另一个方法,则不必使用this,直接调用即可.
- 需要返回当前对象的引用时,return this;.
- 将当前对象作为参数传递给其他对象.
- 在构造器中调用构造器(只能调用一个,且必须将构造器的调用至于最起始处).
- static方法:没有this的方法.
5.清理:终结处理和垃圾回收
- finalize().
- 对象可能不被垃圾回收.
- 垃圾回收并不等于"析构".
- 垃圾回收只与内存有关.
- 引用计数:常用开说明垃圾收集的工作方式.
- 复制式回收器:效率低(1,空间大;2,复制).
- 标记-清扫 模式.
6.成员初始化
- 局部变量必须进行初始化.
- 类的数据成员(全局变量),基本类型会默认有一个初始值,对象引用会获得特殊值null.
- 指定初始化:定义的时候直接赋值或通过方法调用赋值.
7.构造器初始化
- 通过构造器来进行初始化(无法阻止自动初始化的进行,它将在构造器调用之前发生).
- 变量定义的先后顺序决定了初始化的顺序.
- 静态数据初始化:只有在第一个对象创建(或者第一次访问静态数据)的时候,才会被初始化,仅执行一次.
- 显式的静态数据初始化:静态代码块.
- 非静态实例初始化:普通代码块(匿名内部类的chu'shi'hua).
- 构造器没有显式地使用static,但也是静态方法.
- 对象的创建过程
1.当诗词创建对象或者类的静态方法/静态域首次被访问时,Java解释器查找类路径,定位.class文件.
2.载入.class,有关静态初始化的所有动作被执行(首次加载时进行一次).
3.用new操作符创建对象,在堆上为对象分配足够的存储空间.
4.存储空间清零,为对象中的全局变量赋值.
5.执行所有出现于字段定义处的初始化动作.
6.执行构造器.
8.数组初始化
- 数组:相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.通过方括号下标操作符来定义和使用的.
- 编译器不允许指定数组的大小.
- 初始化表达式:由一对花括号括起来的值组成.在这种情况下,存储空间的分配(等价于使用new)由编译器负责.
- 固有成员length,只能访问不能修改.
- 可变参数列表.
9.枚举类型
- 枚举类型的实例是常量,按照命名惯例使用大写字母表示(多个单词用下划线隔开).
- 为了使用enum,需要创建一个该类型的引用,并将其赋值给某个实例.
- 编译器自动添加toString(),ordinal()(声明顺序),values()(按声明顺序,产生由常量构成的数组)方法.
- 与switch配合使用.
END
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。