返回顶部
首页 > 资讯 > 精选 >final、finally、finalize的详细分析
  • 226
分享到

final、finally、finalize的详细分析

2023-06-02 12:06:37 226人浏览 安东尼
摘要

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

  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方法

--结束END--

本文标题: final、finally、finalize的详细分析

本文链接: https://lsjlt.com/news/230034.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • final、finally、finalize的详细分析
      java语言有有很多看起来相似,但用途却完全不同的要素,那么final,finally,finalize又有哪些不同之处呢  final  final可以用来修饰类、方法、变量,分别有不同的意义,  final修饰的class表示不可以...
    99+
    2023-06-02
  • final、finally、finalize()的区别(skycto JEEditor)
        final 表示最终的、不可改变的。用于修饰类、方法和变量。    finally 异常处理的一部分,它只能用在try/catch语句中,表示希望finally语句块中的代码最后一定...
    99+
    2023-06-02
  • Java中final、finally、finalize的区别
    一、功能的区别 final:final关键词主要用于声明某个变量、方法或类是不可变的。一旦被final修饰,就不能被修改或重写。 finally:finally关键词主要用在异常处理中,无论try块中是否发生异常,fin...
    99+
    2023-10-29
    区别 final Java
  • java中final、finally、finalize之间的区别
    区别如下:final: 修饰符(关键字),用于声明属性,方法和类,分别表示属性不可变, 方法不可覆盖,类不可继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改...
    99+
    2016-01-30
    java入门 java final finally finalize 区别
  • java 基础之final、finally和finalize的区别
    java 基础之final、finally和finalize的区别final可以修饰类,不能被继承;可以修饰方法,不能被重写;可以修饰变量,只能赋值一次。finally是try语句中的语句体,不能单独使用,用来释放资源;finalize是一...
    99+
    2023-05-31
    final finally finalize
  • Android源码中final关键字的用法及final,finally,finalize的区别
    hi 大家好,今日,天气剧变,非常冷,不想出门,于是给大家写了篇文章,关于android final关键字及final,finally,finalize的区别相关知识,具体详情...
    99+
    2022-06-06
    finalize final finally Android
  • 如何分析final、finally、finallize的区别
    这篇文章给大家介绍如何分析final、finally、finallize的区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。final、finally、finallize有何区别?    final...
    99+
    2023-06-02
  • Java中final、finally和finalize关键字有什么不同的地方
    这篇文章给大家介绍Java中final、finally和finalize关键字有什么不同的地方,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。final当这个关键字修饰一个类时,意味着他不能派生出新的子类,也就是说不能被...
    99+
    2023-05-31
    java finally final
  • Java超详细分析讲解final关键字的用法
    目录基本介绍final细节01final细节02基本介绍 final 可以修饰类、属性、方法和局部变量. 在某些情况下,程序员可能有以下需求,就会使用到final: Base Sub...
    99+
    2024-04-02
  • Final的示例分析
    小编给大家分享一下Final的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!事务的划分首先不可能无限细化,因此肯定是不需要无限的出现子类的。一旦无限出现子...
    99+
    2023-06-06
  • Java关键字final的示例分析
    小编给大家分享一下Java关键字final的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、常见问题所有的final修饰的字段都是编译期常量吗如何理解p...
    99+
    2023-06-15
  • 关于Java中finalize析构方法的作用详解
    目录一. 析构方法1. 概念2. 作用3. 特点二. 基本使用1. finalize简介2. 代码案例2.1 Counter计数器2.2 CounterTest测试类四. 结语一. ...
    99+
    2023-05-19
    Java finalize析构方法 Java析构方法作用 Java finalize
  • pandaslocilocix用法详细分析
    目录1.什么是label2.loc用法2.1 选择行2.2 选择列2.3 选择指定的行列2.4 loc小结3.iloc用法4.ix1.什么是label pandas处理数据时,我们会...
    99+
    2023-01-09
    pandas loc iloc ix用法 pandas iloc用法 pandas loc iloc ix
  • try catch finally的执行顺序深入分析
    首先执行try,如果有异常执行catch,无论如何都会执行finally 一个函数中肯定会执行finally中的部分。 关于一个函数的执行过程是,当有return以后,函数就会把这个...
    99+
    2022-11-15
    try catch finally 执行顺序
  • MySQL锁机制的详细分析
    这篇文章主要介绍MySQL锁机制的详细分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!文章目录锁锁分类共享锁(读锁,读写互斥,读读互不影响)排他锁(写锁,独占锁)共享锁和排他锁的区...
    99+
    2024-04-02
  • Nginx+PHP的缓存详细分析
    本篇内容介绍了“Nginx+PHP的缓存详细分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!以下是对Nginx中的PHP缓存进行了详细的分...
    99+
    2023-06-05
  • JavaSynchronized的偏向锁详细分析
    目录理论知识源码论证总结上篇文章已经对Synchronized关键字做了初步的介绍,从字节码层面介绍了Synchronized关键字,最终字节码层面就是monitorenter和mo...
    99+
    2023-05-15
    Java synchronized偏向锁 Java synchronized Java偏向锁
  • MySQL日志的详细分析实例
    目录前言1.日志刷新操作2.错误日志3.一般查询日志4.慢查询日志5.二进制日志5.1 二进制日志文件5.2 查看二进制日志5.2.1 mysqlbinlog5.2.2 show b...
    99+
    2024-04-02
  • 详细分析mybatis中的setting配置
    这篇文章主要详细分析mybatis中的setting配置,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。在mybaits中,setting的的配置参数如下(如果不在配置文件中配置将使用默认值):设置参数描述有效值...
    99+
    2023-05-31
    mybatis setting setti
  • Android ViewPager源码详细分析
    1.问题 由于Android Framework源码很庞大,所以读源码必须带着问题来读!没有问题,创造问题再来读!否则很容易迷失在无数的方法与属性之中,最后无功而返。 那么...
    99+
    2022-06-06
    viewpager Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作