final、finally和finalize的区别

本文将介绍三者的主要区别和具体的使用场景。

  1. final(注意:不可与abstract一同使用,因为抽象类必须通过子类继承实现才能体现意义)
  • final修饰的类不可被继承,为最终类
  • final修饰的属性变量不可被更改,只能赋值一次
  • final修饰的方法不可被覆盖,为最终方法
public abstract class testFinal {//抽象类可以没有抽象方法,但有抽象方法就一定要用abstract修饰
public final void getTime(){//如果此功能不需要覆写,采用final关键字限定
	code();//具体的实现代码,这里只是以简单调用内部抽象方法为例子
	//,具体的可通过子类具体实现
}
public abstract void code();//此处有抽象方法,所以类用abstract进行修饰
}

解释:final在英文中为“最终”的意思,不加final修饰时,表明此处为一变量,可以更改。在实际开发中,常量名称定义时有所有字母必须大写的规范,如果有多个单词组成,可用“_”(英文下划线)连接。

应用场景:一般用于修饰常量,很少修饰类和方法,在具体的项目中有如下意义:比如在用户登录某一网站,比如自己的博客时,用户ID和昵称就为常量,在实际项目中一般会用static final修饰,这样定义能够保证你在打开一个浏览器时服务器后台为该访问创建一个不可改变的实例,使得你在此浏览器打开的所有标签页中只拥有这唯一用户,不必再多次登录验证。(当然这种唯一属性也依靠着浏览器客户端的cookie表和服务器端的session表共同管理维护,在后面的开发会具体分析)

2. finally(笔试题类型:finally相对return的执行顺序问题)

解释:finally在java项目中大多是用于对资源关闭的处理,请记住,无论是否发生异常,资源都必须进行关闭

应用场景:传统的JSP+Servlet的设计模式和小项目测试会较多的使用finally对资源访问进行关闭处理,但是采用企业级的开发框架后,这些操作框架便会自动帮开发者处理,因此实际的企业开发中很少使用finally关键字。但是,在笔试和面试时,很多公司都会问到这个知识点,目的也是看看程序员的对资源访问机制的理解程度,所以也请记清楚这个知识点。

2.1 以下两点将不会执行finally语句内容:1.try语句没有执行到就返回了,此时finally不会执行;2.try块中有System.exit(0)语句,也不会执行finally语句(System.exit(0)是停止JVM虚拟机的,JVM停止了finally自然也执行不到)

2.2 关于finally和return执行顺序问题,可以参考

连接1:https://blog.csdn.net/lanxuezaipiao/article/details/16922895

连接2:https://www.cnblogs.com/lanxuezaipiao/p/3440471.html

3. finalize(知道即可,笔试面试很少问及)

      之所以要使用finalize(),是存在着垃圾回收器不能处理的特殊情况。假定你的对象(并非使用new方法)获得了一块“特殊”的内存区域,由于垃圾回收器只知道那些显示地经由new分配的内存空间,所以它不知道该如何释放这块“特殊”的内存区域,那么这个时候java允许在类中定义一个由finalize()方法。

       finalize()是Object中的方法,当垃圾回收器将要回收对象所占内存之前被调用,即当一个对象被虚拟机宣告死亡时会先调用它finalize()方法,让此对象处理它生前的最后事情(这个对象可以趁这个时机挣脱死亡的命运)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值