首页 > 试题广场 >

简述final,finalize,finally的区别?

[问答题]
简述final,finalize,finally的区别?
推荐
1. final是关键字,final可以修饰类、方法、属性。
    如果一个类被final修饰,那么这个类就是最终类,不能派生出新的子类,不能作为父类被继承,该类中的所有方法都不能被重写,但是final类中的成员变量是可以改变的,要想final类中的成员变量的不可以改变,必须给成员变量添加final修饰。因此,一个类不能同时被final和abstract修饰,这两个关键字相互矛盾。
    如果final修饰方法,那么这个方法是最终方法,不允许任何子类重写该方法,但子类仍可以使用该方法,注意:final参数用来表示这个参数在这个函数内部不允许被修改。
    final修饰属性,被final修饰的变量不可变。这里的不可变有两重含义:引用不可变和对象不可变。final指的是引用不可变,即它只能指向初始化时指向的那个对象,而不关心指向对象内容的变化。因此,被final修饰的变量必须初始化,该变量其实就是常量。
2. finally作为异常处理的一部分,只能用在try/catch语句快中,finally代码块中的语句一定会被执行,经常被用来释放资源,如IO流和数据库资源的释放。
3. finalize是Object类的一个方法,该方法在Object类中声明:
        protected void finalize() throws Throwable { } 
    在垃圾回收器执行时会调用被回收对象的finalize()方法,可以覆盖此方法来实现对其资源的回收。注意:一旦垃圾回收器准备释放某个对象占用的空间,将首先调该对象的
finalize()方法,并且在下一次垃圾回收动作发生时,才真正将该对象占用的内存回收。

编辑于 2017-05-24 13:53:04 回复(0)
final可以作为修饰符修饰变量、方法、类。被final修饰的变量只能赋值一次,被final修饰的方法不能在子类中被重写,被final修饰的类不能被继承。
finalize()方法是Object类中定义的方法,当垃圾回收器将无用的对象从内存中清除时,该对象将调用该方法,由于该方法被protected修饰,子类可以通过重写来实现资源的整合及其他清理工作。
finally是在异常处理中定义总是处理的代码。
发表于 2017-08-05 19:22:32 回复(0)
final 是最终的意思,用它修饰的变量就变成了常量,常量的值不可以变
修饰的类不能被继承
修改的方法不能被重写,但是子类可以继承过来
修饰的普通成员,必须在定义的时候初始化,或在构造函数里初始化若在构造函数初始化,必须在每个构造函数都要初始化。
修改的静态成员,必须在声明的时候初始化
用final修饰的引用型变量,这个变量的引用可变,变量本身不可变。
finalize() 是来自Object类中的一个方法,我们可以重写这个方法在堆上的对象被垃圾回收器回收的时候,会自动调用这个方法 
finally 和 try catch() 块连用,主要用来做一些清理资源的工作
放在  finally 中的语句,不管程序运行出现异常没有,都会执行到
发表于 2020-06-25 21:59:38 回复(0)
             final 是最终的意思,用它修饰的变量就变成了常量,常量的值不可以变
             修饰的类不能被继承
             修改的方法不能被重写
             修饰的普通成员,必须在定义的时候初始化,或在构造函数里初始化
             修改的静态成员,必须在声明的时候初始化
             
             finalize() 是来自Object类中的一个方法,我们可以重写这个方法
             在堆上的对象被垃圾回收器回收的时候,会自动调用这个方法
              
             finally 和 try catch() 块连用,主要用来做一些清理资源的工作
             放在  finally 中的语句,不管程序运行出现异常没有,都会执行到
发表于 2020-06-21 12:57:50 回复(0)
final类虽然无法被继承,但是final类中的变量是可以改变的,final修饰属性,指的是引用不可变,而不是对象不可变,修改对象依然可以改变属性。可以通过private和final共同使用,保证对象的不可变,如string中的char数组。
编辑于 2020-03-05 22:17:52 回复(0)
final是一个关键字 可修饰类,方法,变量,表示类不可继承,变量值(或引用)一旦初始化不可变,方法不可重写,并且方法可以内联实现。
finalize 对象被回收时被调用的方法,可以重写这个方法在对象被回收时,进行一些处理,或者重写赋予对象引用,是对象逃离被回收(对象被“拯救”,但只能生效一次)。
finally 指 try catch 语句中用来进行收尾工作的语句块,无论是否发生异常都会执行。
发表于 2017-08-01 14:43:13 回复(0)
final 定义的类不能被继承,方法不能被重写,变量不能被修改。
finalize 是一个对象被GC回收之前执行的方法。
finally 是无论异常是否捕获都要执行的方法。常用于关闭一些资源。
发表于 2017-07-31 19:03:41 回复(0)
final用于声明属性、方法和类,分别表示属性不可改变,方法不可覆盖和类不可继承;
finalize是Object的一个方法,在垃圾回收器执行时被回收对象调用的finalize()方法,可覆盖此方法来实现对其他资源的回收;
finally用于异常处理的一部分,它只能在try/catch语句中,并且附带一个语句块,表示这段语句一定被执行,经常被用在需要释放资源的情况下。
发表于 2017-07-30 11:46:24 回复(0)
1、final是一个修饰符。被final修饰的类意味着这个类不能作为父类被继承,因此,如果一个抽象类不能够被final修饰符修饰;
被final修饰的变量经常和static一起使用,使该变量作为一个常量只能被使用,不能被重新赋值;final修饰的方法不能够被子类重写。
2、finalize是一个方法。finalize方法是在垃圾回收器回收对象时调用的第一个方法。
对象被回收时,要经过两次标记:
第一次标记,如果finalize被重写,或者finalize被调用过,那么垃圾回收并不会去执行finalize,
第二次标记,如果对象不能在finalize中成功拯救自己,那真的就要被回收了。
3.finally 关键字是对 Java 异常处理模型的最佳补充,finally 内的代码总会执行,而不管有无异常发生。
finally 块必须与 try 或 try/catch 块配合使用。使用 finally 可以维护对象的内部状态,并可以清理非内存资源。

顶0踩
发表于 2017-07-30 10:55:57 回复(0)