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
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    安卓开发环境的演变
    对软件工程实践课程的预定目标
    Angular4.0踩坑之路:探索子路由和懒加载
    Angular4.0踩坑之路:如何成功读取本地json文件
    Angular踩坑之路:在Angular中监听键盘事件
    Angular踩坑之路:初探Angular过程中的一些总结与记录
    Angular踩坑之路:初探webpack
    Angular踩坑之路:设置开发环境
    (Nodejs)安装教程、切换全局模块安装路径、切换npm下载源
    (ES、ik分词器)ES的分词器插件elasticsearch-analysis-ik
  • 原文地址:https://www.cnblogs.com/binbingg/p/15112813.html
Copyright © 2011-2022 走看看