zoukankan      html  css  js  c++  java
  • final、finally和finalize的区别

    别被final、finally和finalize这三兄弟给骗了,其实它们半毛钱关系也没有

    引言

    img

    最近小马云在网上火了,马云凭空多出来一个儿子,也真够衰的,哈哈。我还真百度搜了一下马云的真儿子,叫马元坤;估计比较低调,不像王思聪深怕没人知道他老爸就是王健林。这娃一看就是一枚小鲜肉,还好长得一点都不像他老爸,不然肯定会误认为是“孙悟空转世”。

    img

    还是回过头来,看一下我们Java的这三个假兄弟final、finally和finalize。你别说,他们三个看起来还真像,不把眼睛睁大点还真分辨不出来。难怪在Java面试时,面试官就喜欢拿来糊弄我们这些Java菜鸟。

    你老说它们半毛钱关系也没有,那么他们究竟是哪里来的?别着急!我们马上就让这三兄弟各回各家,各找各妈。

    final

    如果你不想让自己写的类被继承,那么就该 final 修饰符出场了。将final修饰符放到class关键字前,就表示定义的类不能被继承,那么定义的这个类我习惯叫太监类;为什么叫太监类,你懂的哈。

    文本框: //被final修饰的类不能被继承 final class User { 	… }

    那有哪些类是太监类呀?String就是一个被final修饰的类,我们只能用,不能继承。

    finally

    finally 是在 Java 的异常处理中使用。啊,不知道什么是异常处理。简单说就是代码运行出错后的补救措施。你敢不敢写int i = 1 / 0;这句代码, 如果编译运行这行代码就会出现除数为0的异常错误。如果程序猿没有写处理异常的代码,那么这个异常错误就会最终被JVM(Java虚拟机)捕获到,那么后果就是程序执行终止。Java的异常处理是机制如下:

    文本框: try {    …    //需要异常处理的代码 } catch() {      …    //捕获到异常后执行的代码 } finally {   …    //有没有捕获到异常都要执行的代码 }

    我们可以看到 finally 的作用就是其大括号里包含的代码不管有没有异常都要执行。如果你肯动脑经也许会问,如果我在try的大括号里写上return,那finally里的代码还会执行吗?记住,finally不管任何情况下都会执行大括号里包含的代码。不信邪呀,你就试一试。

    finalize

    作为一名 Java 菜鸟估计你是很难有机会遇到它。还是给大家解释一下,这玩意儿是干嘛的。大家都知道 Java 有GC(自动垃圾回收),所以我们只管new对象,不用担心释放对象。当然,学C++的同学就没有这种福利了,C++菜鸟一不小心就可能搞出一个内存泄漏来。

    文本框: Class User { 	protected void finalize(){     	… //释放一些GC无法释放的资源 } }

    看到了吧,finalize其实是一个方法名,它是在Java的祖宗类Object中定义的,所以所有的类都自动继承这个方法。finalize()方法是在GC释放对象时被自动调用,常用于释放一些GC无法释放的资源。啊,还有GC无法释放的资源。当然有呀,GC可不是万能的哦。

    总算把final、finally和finalize介绍完了,渴死了,先喝口水。大家现在应该不会被他们骗到了吧。其他它们是不会骗人的,只是被人利用了,是谁呀,还有谁,Java门神-面试官。

    注:文章中涉及到异常处理、GC垃圾回收,如果不太了解的同学可以看一下我的相关博客文章。

    作者:Binge
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    Hdu 5396 Expression (区间Dp)
    Lightoj 1174
    codeforces 570 D. Tree Requests (dfs)
    codeforces 570 E. Pig and Palindromes (DP)
    Hdu 5385 The path
    Hdu 5384 Danganronpa (AC自动机模板)
    Hdu 5372 Segment Game (树状数组)
    Hdu 5379 Mahjong tree (dfs + 组合数)
    Hdu 5371 Hotaru's problem (manacher+枚举)
    Face The Right Way---hdu3276(开关问题)
  • 原文地址:https://www.cnblogs.com/binbingg/p/15112813.html
Copyright © 2011-2022 走看看