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

final、finally、finalize的详细分析

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

final、finally、finalize的详细分析

  java语言有有很多看起来相似,但用途却完全不同的要素,那么final,finally,finalize又有哪些不同之处呢?

  final

  final可以用来修饰类、方法、变量,分别有不同的意义,

  final修饰的class表示不可以继承扩展

  final修饰的变量是不可以修改的

  final修饰的方法是不可以重写的

  final执行去修饰某个引用,

  finally

  finally是保证java重点代码执行的一种机制,他可以配合我们的异常机制一起使用,我们可以使用try{}finally{}或者try{}catch(){}finally{}来关闭类似jdbc的连接,保证unlock锁等动作.

  finalize

  finalize是java的一个方法,它的设计目的是java对象在被垃圾回收器回收之前,完成特定资源的回收,finalize机制现在已经不推荐使用,

  在一般情况下不能指望finalize来进行回收资源,为什么呢?简单来说,无法保证finallize什么时候执行,执行是否符合预期,使用不当会影响性能,导致程序死锁,挂掉等。通常来说上面提到的try{}finally{}机制是回收资源的办法,如果特别需要额外处理的话,可以考虑java提供的cleaner机制(垃圾回收机制)或者其他替代方法.

  finalize是和垃圾收集相关联的,一但调用finalize方法,就会导致相应的对象回收呈现数量集上的变慢,有人专门做过研究,实现该方法速度大概是40-50倍的下降,因为finallize被设计成在对象本身垃圾回收之前调用,这就意味者实现finalize方法的对象是个特殊供应。cdn要对他进行额外处理,finalize本质上成为快速回收的阻碍,可能导致你的对象经过多个垃圾经期,才能被回收.如果我们告知jvm来回收也是不痛不痒的.就向我们用过的jdbc连接池,其中有一个close方法,他是释放资源的,清空某个池子,以供下回使用,如果我们指望finalize进行回收的话,有可能造成内存溢出.那么只能让他作为程序的守门员.其中finalize也会掩盖一些出错信息.

  java用cleaner来替换调finalize的所有实现.利用了幻象引用。这是一个清理机制.利用幻象引用或者队列可以保证资源被释放,他有自己的线程,避免了死锁的情况。

  mysqljdbc就用了幻象引用机制。

  隐藏的问题

  性能,并发,对象生命周期,垃圾回收等过程方面的问题。

  推荐使用final关键字来表示我们代码的语义和逻辑密度,这已经被证明在很多场景下的实现,比如我们可以将方法或类声明为final,这样就可以明确告诉别人,这些类和方法是不可以修改的.如果你关心过java的核心类库和源码的话,你就会发现java下的很多类都被声明为final class,这可以防止api使用者改变基础功能,某种情况这是保证平台安全的必要手段,使用final修饰方法或者变量,可以避免意外布局导致的编程错误,甚至有人明确推荐将所有方法参数、本地变量、成员变量声明为final,final在一定程度上产生不可变的效果,所以可以用于保护只读数据,尤其是在并发编程中,因为明确的不能再赋值final变量,有利于减少额外的同步开销,也可以省略防御性拷贝的必要,fianl在很多场景中可以提高性能,利用fianl可能将cdn方法进行内连,可以改善编译器进行编译的能力等等,坦白说很多类似的结果都是基于假设得出的,比如现代高性能cdn判断内敛,未必依赖final的提示,fianl关键字对性能的影响,没有考虑的必要,如果在开发中要想以这样的方式来提高性能,那真的是没有必要.

  finally基础笔试题

  public class finally_demo{

  public static char Label;

  public static void main(String[] args){

  System.out.println(test_finally());

  System.out.println(Label);

  }郑州引产手术费用多少钱 https://yiyuan.120ask.com/art/307587.html

  public static char test_finally(){

  try{

  System.out.println('A');

  return Label= 'A';

  }finally{

  System.out.println('B');

  Label= 'B';

  }

  )

  }

  输出结果:

  ABAB

  结构分析:

  1.这道题考察的点是:return和finally的执行顺序是什么;

  执行过程:

  前面输出AB,大部分人是没有疑惑的,这是因为Test1方法里面的两个输出语句。

  之后,

  先将label='A’进行赋值,

  后会检测是否存在finally的语句,

  有,则执行finally的语句,Label=‘B’,故最终结果Label的值是B!;

  最终将return语句返回(此时并不进行赋值操作,Label虽然等于B,但是返回的仍然是刚才尚未执行finally语句前的值)。

  创建自定义不可变类需要遵守的规则:

  1、使用private和final修饰成员变量。

  2、提供带参构造方法,用于初始化成员变量。

  3、不要为成员变量提供setter方法。

  4、如果成员变量中有可变类时需要重写Object中的hashCode方法和equals方法

免责声明:

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

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

final、finally、finalize的详细分析

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

下载Word文档

猜你喜欢

final、finally、finalize的详细分析

  java语言有有很多看起来相似,但用途却完全不同的要素,那么final,finally,finalize又有哪些不同之处呢?  final  final可以用来修饰类、方法、变量,分别有不同的意义,  final修饰的class表示不可
2023-06-02

Java中final、finally、finalize的区别

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

final、finally、finalize()的区别(skycto JEEditor)

final 表示最终的、不可改变的。用于修饰类、方法和变量。 finally 异常处理的一部分,它只能用在try/catch语句中,表示希望finally语句块中的代码最后一定被执行(但是不一定会被执行) finaliz
2023-06-02

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

如何分析final、finally、finallize的区别

这篇文章给大家介绍如何分析final、finally、finallize的区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。final、finally、finallize有何区别? final表示一个修饰符,如果
2023-06-02

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

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

Final的示例分析

小编给大家分享一下Final的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!事务的划分首先不可能无限细化,因此肯定是不需要无限的出现子类的。一旦无限出现子
2023-06-06

详细分析SuseDHCP的配置

  DHCP可以说是BOOTP的增强版本﹐它分为两个部份﹕一个是服务器端﹐而另一个是客户端。所有的IP网路设定资料都由DHCP伺服器集中管理﹐并负责处理客户端的DHCP要求﹔而客户端则会使用从伺服器分配下来的IP环境资料。一起跟着小编来学习:详细分析SuseDHCP的配置,希望这对大家有所帮助!  小编相信大家都应该知
详细分析SuseDHCP的配置
2024-04-18

Java关键字final的示例分析

小编给大家分享一下Java关键字final的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、常见问题所有的final修饰的字段都是编译期常量吗?如何理解
2023-06-15

try catch finally的执行顺序深入分析

首先执行try,如果有异常执行catch,无论如何都会执行finally,当有return以后,函数就会把这个数据存储在某个位置,然后告诉主函数,我不执行了,接下来你执行吧,所以函数就会推出
2022-11-15

产品数据分析的详细解析

  下面就是小编为大家准备的关于数据分析这一块,下面你就可以阅读文章了!随着业务的发展,以数据报表的形式来提供数据服务逐渐不能满足需求了。一方面,高层期望每天一早便能看到清晰的数据,搞清楚最近的运营效果和趋势;另一方面,虽然数据报表提供了详细的数据,但是还是需要手动去过滤、统计一下才有结果,所有想看数据的人都需要做一遍
产品数据分析的详细解析
2024-04-18

JavaSynchronized的偏向锁详细分析

synchronized作为Java程序员最常用同步工具,很多人却对它的用法和实现原理一知半解,以至于还有不少人认为synchronized是重量级锁,性能较差,尽量少用。但不可否认的是synchronized依然是并发首选工具,本文就来详细讲讲
2023-05-15

pandaslocilocix用法详细分析

pandas处理数据时,我们会经常看到dataframe结构使用loc,iloc,ix等方法,那么这些方法到底有啥区别,下面我们来进行详细分析,感兴趣的朋友跟随小编一起看看吧
2023-01-09

Nginx+PHP的缓存详细分析

本篇内容介绍了“Nginx+PHP的缓存详细分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!以下是对Nginx中的PHP缓存进行了详细的分
2023-06-05

关于Java中finalize析构方法的作用详解

构造方法用于创建和初始化类对象,也就是说,构造方法负责”生出“一个类对象,并可以在对象出生时进行必要的操作,在这篇文章中会给大家简单介绍一下析构方法,需要的朋友可以参考下
2023-05-19

详细分析mybatis中的setting配置

这篇文章主要详细分析mybatis中的setting配置,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。在mybaits中,setting的的配置参数如下(如果不在配置文件中配置将使用默认值):设置参数描述有效值
2023-05-31

编程热搜

  • 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动态编译

目录