1.作用域的区别
作用域 | 当前类 | 同一个 package | 子孙类 | 其他 package |
---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | X |
friendly | O | O | X | X |
private | O | X | X | X |
2.final, finally, finalize的区别
- final 用于声明属性,方法和类, 分别表示属性不可变, 方法不可覆盖, 类不可继承。
- finally 是异常处理语句结构的一部分,表示总是执行。
- finalize 是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等. JVM不保证此方法总被调用。
3.Gabage Collection
-
什么是GC
- GC是垃圾收集的意思(Gabage Collection), 内存处理是编程人员容易出现问题的地方, 忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃, Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的, Java语言没有提供释放已分配内存的显示操作方法. 垃圾回收器的基本原理是什么?
- 程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况. 通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的", 哪些对象是"不可达的".当GC确定一些对象为"不可达"时(比如设置为 null),GC就有责任回收这些内存空间. 有什么办法主动通知虚拟机进行垃圾回收?
- 可以.程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
4.heap 和 stack
java的内存分为两类 :
- 堆内存 heap
- 栈内存 stack
stack 是指程序进入一个方法时, 会为这个方法单独分配一块私属存储空间, 用于存储这个方法内部的局部变量, 当这个方法结束时, 分配给这个方法的栈会释放, 这个栈中的变量也将随之释放.
heap 一般用于存放不放在当前方法栈中的那些数据, 例如, 使用 new 创建的对象都放在堆里, 所以, 它不会随方法的结束而消失. 方法中的局部变量使用 final 修饰后, 放在堆中, 而不是栈中.
5.字节流与字符流
- 字节流继承于InputStream OutputStream
- 字符流继承于InputStreamReader OutputStreamWriter
字符流使用了缓冲区 (buffer),而字节流没有使用缓冲区。
底层设备永远只接受字节数据。
字符是字节通过不同的编码的包装。
字符向字节转换时,要注意编码的问题。