[Java]学习笔记(二)
2016-03-14 19:26
627 查看
一、终结处理和垃圾回收
1. finalize()
一旦垃圾回收器gc准备好释放对象占用的存储空间,将首先调用finalize(),并且在下一次垃圾回收动作发生时才会真正回收对象占用的内存。注意:
1. finalize()≠垃圾回收动作!
2. 对象可能不被垃圾回收!
垃圾回收本身也有开销,只要程序没有濒临存储空间用完的那一刻,对象占用的空间就总也得不到释放,最终会随着程序退出释放。
3. 垃圾回收不等于析构!
Java并未提供“析构函数”或类似的概念。C++中每个new的对象在其作用域末尾处调用delete来析构。
4. 垃圾回收只与内存有关!
2. 终结条件:
finalize()可以用来对对象终结条件的验证。例:
class Book { boolean checkedOut = false; Book(boolean checkOut) { checkedOut = checkOut; } void checkIn() { checkedOut = false; } protected void finalize() { //if (checkedOut) {// 不管此处是否有判断条件,该方法都只被调用一次 System.out.println("Error: checked out"); //super.finalize(); //} } } public class TestFinalize { public static void main(String[] args) { Book novel = new Book(true); novel.checkIn(); new Book(true); System.gc(); } }
二、初始化
1. 成员初始化:
Java尽力保证:所有变量在使用前都能得到恰当的初始化。2. 构造器初始化:
无法阻止自动初始化的进行,它将在构造器被调用之前发生。1. 初始化的顺序:
变量定义的先后顺序决定了初始化的顺序,它们会在任何方法(包括构造器)被调用之前得到初始化。
静态对象先于非静态对象。
2. 静态数据的初始化:
无论创建多少个对象,静态数据都只占用一份存储区域,静态初始化动作只执行一次。static关键字不能应用于局部变量,只能作用于域。
注意:构造器实际上也是静态方法。
3. 显示的静态初始化
static {
.......
}
4. 非静态实例初始化只是比静态少了static关键字
3. 数组初始化:
1. 如果创建了一个非基本类型的数组,那么该数组为一个引用数组,对于数组中的每个对象都要再次创建,否则在引用时会报错!2. 所有的类都直接或间接继承与Object类;
3. 在打印一个没有初始化的类对象时,默认行为就是打印该类的名字+对象的地址;
三、枚举enum
public enum Name {a, b, c
}
1. 可以使用ordinal()访问特定enum常量的声明顺序;
2. 可以在switch中使用。
相关文章推荐
- JNI On Mac - 从Java程序中调用C函数
- Java多态性
- spring学习笔记(5)属性文件引入使用
- JAVA知识点
- StringUtils 截取字符串 substring
- JAVA设计模式——责任链模式
- 二叉树的前/中/后序遍历
- java基础--线程池的使用
- 做一个合格的程序猿之浅析Spring IoC源码(十一)Spring refresh()方法解析后记2
- AES加密时的 java.security.InvalidKeyException: Illegal key size 异常
- struts标签的的一些基本用法(ognl)
- 使用spring-session框架对会话session进行分布式管理
- java 实现获取当天,当周,当月,当季,当年的时间段
- Java中静态变量与静态方法的继承
- Java值传递和引用传递详细解说
- JavaAPI之Runtime类以及bat文件开启应用程序
- JAVA内存管理 第2章 直接VS自动管理内存
- [Android] 【笔记】Android Design 在Android Studio和Eclipse中的添加方法
- java中instance用法剖析
- JAVA自学日记——Part Ⅰ.