这篇文章主要介绍了final、finally、finalize的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
final:如果一个类被final修饰,意味着该类不能派生出新的子类,不能作为父类被继承。因此一个类不能被声明为abstract,又被声明为final。将变量或方法声明为final。可以保证他们在使用的时候不被改变。其初始化可以在两个地方:一是其定义的地方,也就是在final变量在定义的时候就对其赋值;二是在构造函数中。这两个地方只能选其中的一个,要么在定义的时候给值,要么在构造函数中给值。被声明为final的方法也只能使用,不能重写。
public final class FinallyTest{ //在定义时初始化 public final int A = 10; //在初始化块中初始化 public final int B; { B = 20; } //非静态final变量不能再静态初始化块中初始化 public final int C; static{ C = 30; } //静态变量不能再初始化块中初始化 public static final int D; { D = 40; } //静态final变量不能在构造器中初始化 public static final int E; public FianlTest(){ E = 50; }}
finally:在异常处理的时候,提供finally块来执行任何的清除操作。如果抛出一个异常,那么相匹配的catch字句就会执行,然后控制就会进入finally块,前提是有finally块。
public final class FinallyTest{ public static void main(String[] args){ try{ throw new NullPointerException(); }catch(NullPointerException e){ System.out.println("程序抛出了异常"); }finally{ //这楼里总会被执行,不受break,return影响 //如数据库连接的close()一般写在这里,可以降低程序的出错几率 System.out.println("执行了finally语句块"); }}}
finalize:finalize是方法名,java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是在垃圾收集器确认一个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此,所有的类都继承了它。子类覆盖finalize()方法已整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
它属于java.lang.Object类,它的定义如下:Java代码
protected void finalize() throws Throwable { }众所周知,finalize()方法是GC(garbage collector)运行机制的一部分在此我们只说说finalize()方法的作用是什么呢?finalize()方法是在GC清理它所从属的对象时被调用的,如果执行它的过程中抛出了无法捕获的异常(uncaught exception),GC将终止对改对象的清理,并且该异常会被忽略;直到下一次GC开始清理这个对象时,它的finalize()会被再次调用。
public final class FinallyTest{ //重写finalize()方法 protected void finalized throw Throwable{ System.out.println("执行了finaalized()方法"); } public static void main(String[] args){ FinallyTest ft = new FinallyTest(); ft = null; System.gc(); }}
感谢你能够认真阅读完这篇文章,希望小编分享的“final、finally、finalize的区别有哪些”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/likeyoucool/blog/4389908