finalize方法_别被final、finally和finalize这三兄弟给骗了

v2-59966ce3149ae23f203d40bc9cc52349_1440w.jpg?source=172ae18b

v2-518bf83109ee56098319e0239e9f31b5_b.jpg

之前小马云在网上火了,马云凭空多出来一个儿子,也真够衰的,哈哈。
百度搜了一下马云的真儿子,叫马元坤;估计比较低调,不像王思聪深怕没人知道他老爸就是王健林。这娃一看就是一枚小鲜肉,还好长得一点都不像他老爸,不然肯定会误认为是“孙悟空转世”。

v2-1c29e13d40f1e583122d340ae213e553_b.jpg


还是回过头来,看一下我们Java的这三个假兄弟final、finally和finalize。你别说,他们三个看起来还真像,不把眼睛睁大点还真分辨不出来。难怪在Java面试时,面试官就喜欢拿来糊弄我们这些Java菜鸟。
你老说它们半毛钱关系也没有,那么他们究竟是哪里来的?别着急!我们马上就让这三兄弟各回各家,各找各妈。

final:

如果你不想让自己写的类被继承,那么就该final修饰符出场了。将final修饰符放到class关键字前,就表示定义的类不能被继承,那么定义的这个类我习惯叫太监类;为什么叫太监类,你懂的哈。

1
2
3
4
//被final修饰的类不能被继承
final class User {
…
}


那有哪些类是太监类呀?String就是一个被final修饰的类,我们只能用,不能继承。

finally:

它是在Java的异常处理中使用。啊,不知道什么是异常处理。简单说就是代码运行出错后的补救措施。你敢不敢写int i = 1 / 0;这句代码, 如果编译运行这行代码就会出现除数为0的异常错误。如果程序猿没有写处理异常的代码,那么这个异常错误就会最终被JVM(Java虚拟机)捕获到,那么后果就是程序执行终止。Java的异常处理是机制如下:

1
2
3
4
5
6
7
try {
... //需要异常处理的代码
} catch() {
...//捕获到异常后执行的代码
} finally {
…//有没有捕获到异常都要执行的代码
}


我们可以看到finally的作用就是其大括号里包含的代码不管有没有异常都要执行。如果你肯动脑经也许会问,如果我在try的大括号里写上return,那finally里的代码还会执行吗?记住,finally不管任何情况下都会执行大括号里包含的代码。不信邪呀,你就试一试。

finalize:

作为一名Java菜鸟估计你是很难有机会遇到它。还是给大家解释一下,这玩意儿是干嘛的。大家都知道Java有GC(自动垃圾回收),所以我们只管new对象,不用担心释放对象。当然,学C++的同学就没有这种福利了,C++菜鸟一不小心就可能搞出一个内存泄漏来。

1
2
3
4
5
Class User {
protected void finalize(){
… //释放一些GC无法释放的资源
}
}


看到了吧,finalize其实是一个方法名,它是在Java的祖宗类Object中定义的,所以所有的类都自动继承这个方法。finalize()方法是在GC释放对象时被自动调用,常用于释放一些GC无法释放的资源。啊,还有GC无法释放的资源。当然有呀,GC可不是万能的哦。
总算把final、finally和finalize介绍完了,渴死了,先喝口水。大家现在应该不会被他们骗到了吧。其他它们是不会骗人的,只是被人利用了,是谁呀,还有谁,Java门神—面试官。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值