我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java中final,finally,finalize 有什么区别

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java中final,finally,finalize 有什么区别

1.final 介绍

finalJava语言中的一个关键字,使用 final修饰的对象不允许修改或替换其原始值或定义。​

final 可以用来修饰:类、方法、变量和参数,其中可以用来修饰“参数”这一项,容易被人遗忘,这是 final 的 4 种用法。​

1.1 final 用法说明

final修饰类时,此类不允许被继承,表示此类设计的很完美,不需要被修改和扩展。

final修饰方法时,此方法不允许任何从此类继承的类来重写此方法,表示此方法提供的功能已经满足当前要求,不需要进行扩展。

final修饰变量时,表示该变量一旦被初始化便不可以被修改。

final修饰参数时,表示此参数在整个方法内不允许被修改。

1.2 final 用法展示

final 修饰类:


final class Animal {

}

final 修饰方法:


public class FinalExample {

    public final void sayHi() {

        System.out.println("Hi~");

    }

}

final 修饰变量:


public class FinalExample {

    private static final String MSG = "hello";

	//......

}

final 修饰参数:


public class FinalExample {

    public void sayHi(final String name) {

        System.out.println("Hi," + name);

    }

}

2.finally 介绍

finally则是 Java中保证重点代码一定要被执行的一种机制。​

我们可以使用 try-finally或者 try-catch-finally来进行类似关闭 JDBC连接、保证释放锁等动作。

2.1 finally 用法展示


try {

    // do something

} finally {

    // 一定会执行的代码

}

2.2 finally 扩展

有时候面试也会问finally是否一定会被执行?这是一个有诱导嫌疑的问题,正常情况下 finally 一定是会执行的,但有一个特殊情况 finally也是不会执行的,

特殊的实现代码和执行结果如下:

3.finalize 介绍

finalizeObject类中的一个基础方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收,但在 JDK 9中已经被标记为弃用的方法(deprecated)。

在实际开发中不推荐使用 finalize方法,它虽然被创造出来,但无法保证 finalize 方法一定会被执行,所以不要依赖它释放任何资源,因为它的执行极不“稳定”。在 JDK 9 中将它废弃,也很好的证明了此观点。​

3.1finalize 性能问题

finalize 除了执行“不稳定”之外,还有一定的性能问题。​

因为 finalize 的执行是和垃圾收集关联在一起的,一旦实现了非空的 finalize 方法,就会导致相应对象回收呈现数量级上的变慢,有人专门做过 benchmark,大概是 40~50 倍的下降。​

因为 finalize 被设计成在对象被垃圾收集前调用,这就意味着实现了finalize方法的对象是个“特殊公民”,JVM 要对它进行额外处理。finalize本质上成为了快速回收的阻碍者,可能导致你的对象经过多个垃圾收集周期才能被回收。

4、总结

finalfinallyfinalize从英文字面角度来看,看似很像,实则 3 者在 Java 中没任何关系。final 是用来修饰类、方法、变量和参数的关键字,被 final 修饰的对象不允许修改或替换其原始值或定义;finallyJava中保证重点代码一定要被执行的一种机制;finalize Object类中的一个基础方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收的,但其执行“不稳定”,且有一定的性能问题,已经在 JDK 9 中被设置为弃用的方法了。

到此这篇关于Javafinal,finally,finalize 有什么区别的文章就介绍到这了,更多相关final,finally,finalize的区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java中final,finally,finalize 有什么区别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java中final、finally、finalize的区别

final、finally和finalize的区别:1、功能的区别;2、用法的区别;3、应用场景的区别;final关键词主要用于声明某个变量、方法或类是不可变的;finally关键词主要用在异常处理中;finalize是Object类的一个方法,用于清理资源。
Java中final、finally、finalize的区别
2023-10-29

Java中final,finally,finalize有哪些区别

本篇内容主要讲解“Java中final,finally,finalize有哪些区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中final,finally,finalize有哪些区别”
2023-06-21

java中final、finally、finalize之间的区别

区别如下:final: 修饰符(关键字),用于声明属性,方法和类,分别表示属性不可变, 方法不可覆盖,类不可继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为fina
java中final、finally、finalize之间的区别
2016-01-30

java 基础之final、finally和finalize的区别

java 基础之final、finally和finalize的区别1.final可以修饰类,不能被继承;可以修饰方法,不能被重写;可以修饰变量,只能赋值一次。2.finally是try语句中的语句体,不能单独使用,用来释放资源;3.fina
2023-05-31

Android源码中final关键字的用法及final,finally,finalize的区别

hi 大家好,今日,天气剧变,非常冷,不想出门,于是给大家写了篇文章,关于android final关键字及final,finally,finalize的区别相关知识,具体详情如下所示: 先预告一下,下文中仅涉及java语法的讨论,和And
2022-06-06

Java中final、finally和finalize关键字有什么不同的地方

这篇文章给大家介绍Java中final、finally和finalize关键字有什么不同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。final当这个关键字修饰一个类时,意味着他不能派生出新的子类,也就是说不能被
2023-05-31

java中finally有什么作用

在Java中,finally关键字用于定义一个代码块,该代码块中的代码无论是否发生异常都会被执行。finally有以下几个作用:1. 保证代码块中的代码无论是否发生异常都能被执行。无论代码块中的代码是否抛出异常,都会执行finally中的代
2023-10-08

java中的finally有什么作用

在Java中,finally是一个关键字,用于定义一个代码块,该代码块始终会被执行,无论是否发生异常。finally块通常用于释放资源或执行必要的清理操作,以确保代码在任何情况下都能正常结束。finally块主要有以下几个作用:1. 释放资
2023-10-11

Java中==和equals有什么区别

本文小编为大家详细介绍“Java中==和equals有什么区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中==和equals有什么区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。== 是 Java
2023-06-27

java中ArrayList与LinkedList有什么区别

区别如下:ArrayList和LinkedList都实现了List接口。但是在数据结构的实现上ArrayList是数组,LinkedList是双向链表,所以LinkedList比ArrayList会更耗内存,因为它一个节点要存两个引用,一个指向上一个元素,一个
java中ArrayList与LinkedList有什么区别
2017-05-17

java中await与wait有什么区别

在Java中,`await`和`wait`是两个不同的概念,具有不同的用途和语义。1. `await`:`await`是用于线程间的协作与通信,一般用于多线程编程中的同步操作。它是在`java.util.concurrent`包中的`Con
2023-08-11

Java中runnable和callable有什么区别

这篇文章给大家分享的是有关Java中runnable和callable有什么区别的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;
2023-06-14

java中library.path和LD_LIBRARY_PATH有什么区别

这期内容当中小编将会给大家带来有关java中library.path和LD_LIBRARY_PATH有什么区别,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。java基本数据类型有哪些Java的基本数据类型
2023-06-15

java中arraylist和linkedlist有什么区别

ArrayList和LinkedList都是Java中常用的集合类,它们的主要区别如下:底层数据结构不同:ArrayList底层使用数组实现,而LinkedList底层使用双向链表实现。插入和删除操作效率不同:ArrayList在中间位置进
2023-10-26

Java中isassignablefrom和instanceof有什么区别

在Java中,isAssignableFrom()方法是Class类的一个方法,用于判断一个类是否可以赋值给另一个类。这意味着如果一个类的对象可以被用作另一个类的对象,那么这两个类是相关的。例如,如果class B extends clas
Java中isassignablefrom和instanceof有什么区别
2024-03-07

java中Array和Arrays有什么区别

这篇文章将为大家详细讲解有关java中Array和Arrays有什么区别,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录