文章目录**复习知识点** ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
❤Java面试题(十二)----- final、finally和finallize的区别
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
一、考查的知识点
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
✨前言部分✨ 姓名:洋葱爱代码 喜欢:Java编程 重要的事情说三遍!!! 欢迎大家来访问哦,互相学习 欢迎大家来访问哦,互相学习 欢迎大家来访问哦,互相学习 让我们一起来学习Java面试题吧!!! ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
合抱之木,生于毫末;百丈之台,起于垒土;千里之行,始于足下。------《老子》
今日学习任务!!!!!
1、Java面试题(十二)----- final、finally和finallize的区别
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
一、考查的知识点✨1、final✨
final关键字可以用来修饰类的属性 方法的参数 方法以及类的本身。
✨1、final修饰方法时表示该方法不可被覆盖
✨2、final修饰类的时表示该类不可以被继承
✨3、final修饰属性时候表示该属性不可变
当使用final修饰属性(变量、对象)时候,必须对属性(变量、对象)进行初始化。如果final修饰的是变量是基本数据类型,则一旦该变量被初始化就不能被赋予新值.
如果final修饰的是一个引用类型的对象,则这里的不可变是指该引用所引用的地址不能改变,并不表示该引用对象的内容本身不能改变,例如:
解释:上面的这段程序 , 字符串str最初指向字符串常量"abc" , 接下来试图执行str = str+ “abc”; 将字符串"abc" 与字符串"Java"连接起来 , 并用str指向形成的新的字符串(由于字符串类型是不可变类型 , 所以str指向的字符串本身内容不能被修改)但是由于str开始的时候被声明为final , 所以会发生编译错误
上面的代码,虽然str被声明为了final,但是指向的对象是StringBuffer类型的对象 , 其内容可以被改变,所以通过append方法修改StringBuffer里面字符串的内容是可以的
❤通过String类和StringBuffer类的两个例子, 我们可以清晰的看出来 , 当使用final修饰引用型变量时,它只能指向初始值时的那个对象 , 而指向对象的内容可以被修改。
❤当使用final修饰方法的参数时候则表示该参数在方法内部不能被修改, 它有点类似C++中用const修饰函数的形参
❤当使用final修饰方法时,该方法不能子类覆盖重写,但是该方法的在子类中仍然可以被使用。与此同时,在Java中用final修饰的函数也被称为内联函数,这个内联函数类似于C++中的内联函数,它并不是必需的 , 而是在编译的时候告诉编译器这个函数可以作为内联函数编译。至于最终编译如何处理则由于编译器自己决定。内联函数的优势在于当调用函数时,系统会直接将方法主体插入调用处,从而省去了方法调用的环境,提升了程序的执行的效率。
❤3、当一个类被final修饰时, 该类不能被继承,因此该类的方法因此也不能被覆盖而重写。意思就是说抽象类 (abstract class)和接口(interface)不能用final修饰 , 因为定义定义的抽象类和接口就是用来实现和继承的
✨2、finally✨
✨finally关键就是只有在异常处理的时候才会用到 , 通常于try catch搭配使用 , 不管try中是否发生异常,也不管哪一个catch块会执行 , finally语句块最终总会被执行到 , 所以finally 块中常用作资源回收 , 文件流关闭等操作等。
✨3、finalize✨
✨finalize是Object类的一个方法 ,。 在垃圾回收机制执行的时候会调用的被回收对象的finalize方法 ,因为finalize是Object类的方法 , 所以Java中任何类都可以覆盖这个方法 , 并在该方法清理对象所占资源。
⭐因为java中增加了垃圾回收机制 , 所以可以省去人们手动是方法对象内存空间的麻烦 , 在很大程度上避免了内存泄露的发生。那么为什么还有有finalize方法呢 ? 这是 因为,有时在撤销之前保证这些资源被释放,为了处理这种情形 , java提供了所谓的收尾机制 , 使用收尾机制可以在一个对象将要被垃圾回收程序释放时调用到该对象的finalize方法 , 从而清理一些非Java的资源。
⭐在使用finalize时需要特别注意一点 , 不要认为finalize方法一个会被执行 ,。 垃圾回收机制何时调用对象的finalize方法对程序完全是透明的 , 当系统中资源充足时 , 垃圾回收机制可能并不会得到执行 , 因此如果想要保证某一个时刻某一个类的资源一定被清理就不要把这个操作放在这个类的finalize方法进行,因为并不能确定该方法什么时候被执行,是否被执行。
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
每日一夸!!!
就如同薛之謙对毛不易夸奖的
"你现在就是流星" , 但是我相信你 ,你坚持下去你就是巨星"



