Java基础 | final、finally、finalize有什么不同?

一、final

    修饰类:不可被继承

    修饰方法:不可重写

    修饰变量:不可修改,final标识的变量不等于不可变,对于变量而言这个变量只是不能够赋值,但是可以做任何增删改查操作。所以从这方面来讲,final在高并发下面的数据一致性起积极作用,对性能比较好。要想写一个不可变的对象,首先需要对象的类和成员都是private和final;其次对象的赋值不要赋值,而是采用深拷贝;然后对象不要随意实现setter方法;在获取当前对象内容或者状态时候要遵守copy-on-write原则,创建私有的copy;

二、深拷贝与浅拷贝

    其实这两个概念的区别就是当在给一个变量赋值时候是否直接使用这个值的内存地址;例如,基础类型都是值传递。但是对于引用类型的变量,在拷贝的时候就要考虑了,如果你要使新的对象的赋值不会影响之前被拷贝的对象,就要用深拷贝,否则就是copy的内存地址而已。一个类实现拷贝的功能很简单,有两种方式;要么实现Clone接口,然后在clone方法里面进行拷贝;要么实现序列化,先把对象写到输入流里面,然后在读出来对象,这样就是一个新的对象了。

三、finally

    finally就是在一些资源处理关闭时候用到,保证在重点代码一定要被执行;对于 try catch 最好即用即关;

四、finalize

    finalize就是java虚拟机在实现GC时候调用的方法,理论上是进行内存回收等操作的地方。但是实际上这个方法调用时机并不固定,可能在处理不当导致程序异常。并且finalize源码实现使用了try catch 但是并没有抛出异常,而是生吞。所以你要是在这里面处理逻辑,你都不和知道程序到底哪里出了问题。得出结论就是要放弃这个方法的实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。