【问题标题】:In Java, what purpose do the keywords `final`, `finally` and `finalize` fulfil? [closed]在 Java 中,关键字 `final`、`finally` 和 `finalize` 的用途是什么? [关闭]
【发布时间】:2011-12-10 12:15:17
【问题描述】:

在Java中,关键字finalfinallyfinalize有什么作用?

【问题讨论】:

  • 家庭作业问题? allu.wordpress.com/2006/11/08/…
  • 它们甚至不是可比的概念。它们只是碰巧拼写相似。做一些阅读。
  • 它们彼此没有任何关系——从概念上讲,它们完全不相关。分别研究。
  • 这不应该被关闭,因为它似乎是一个相对常见的问题。
  • 投票决定重新开放,因为答案很好,这可能对登陆这里的用户有用。

标签: java final finally finalize


【解决方案1】:

java中final的含义是: -应用于一个变量意味着各自的变量一旦初始化就不能再修改了

private final double numer = 12;

如果你尝试修改这个值,你会得到一个错误。

-应用于一个方法意味着相应的方法不能被覆盖

 public final void displayMsg()
    {
        System.out.println("I'm in Base class - displayMsg()");
    }

但是final方法可以被继承,因为final关键字限制了方法的重定义。

-应用于一个类意味着不能扩展相应的类。

class Base
{

    public void displayMsg()
    {
        System.out.println("I'm in Base class - displayMsg()");
    }
}

finally的意思是:

class TestFinallyBlock{  
  public static void main(String args[]){  
  try{  
   int data=25/5;  
   System.out.println(data);  
  }  
  catch(NullPointerException e){System.out.println(e);}  
  finally{System.out.println("finally block is always executed");}  
  System.out.println("rest of the code...");  
  }  
} 

在这个例子中,无论 try-catch 是否被执行,finally 中的内容总是会被执行。 finalize的含义:

class FinalizeExample{  
public void finalize(){System.out.println("finalize called");}  
public static void main(String[] args){  
FinalizeExample f1=new FinalizeExample();  
FinalizeExample f2=new FinalizeExample();  
f1=null;  
f2=null;  
System.gc();  
}}  

在调用垃圾收集器之前。

【讨论】:

    【解决方案2】:

    1.最终 • Final 用于对类、方法和变量应用限制。 • final 类不能被继承,final 方法不能被覆盖,final 变量值不能被改变。 • 最终变量在创建时初始化,但在构造函数中初始化的空白最终变量除外。 • Final 是一个关键字。

    2。终于 • finally 与try 和catch 一起用于异常处理。 • 无论是否处理异常都会执行。 • 此块用于关闭数据库连接、I/O 资源等资源。 • finally 是一个块。

    3.完成 • 垃圾收集线程在收集合格对象以执行清理处理之前调用Finalize。 • 这是对象执行任何清理的最后机会,但由于不能保证是否会调用 finalize (),因此将资源保留到 finalize 调用是不好的做法。 • Finalize 是一种方法。

    【讨论】:

      【解决方案3】:

      最终

      final 可用于将变量标记为“不可更改”

      private final String name = "foo";  //the reference name can never change
      

      final 也可以使方法不可“覆盖”

      public final String toString() {  return "NULL"; }
      

      final 也可以使类不是“可继承的”。即该类不能被子类化。

      public final class finalClass {...}
      public class classNotAllowed extends finalClass {...} // Not allowed
      

      终于

      finally 用于 execute code "always" 的 try/catch 语句中

      lock.lock();
      try {
        //do stuff
      } catch (SomeException se) {
        //handle se
      } finally {
        lock.unlock(); //always executed, even if Exception or Error or se
      }
      

      Java 7 有一个new try with resources statement,您可以使用它来自动关闭显式或隐式实现java.io.Closeablejava.lang.AutoCloseable 的资源

      敲定

      finalize 在对象被垃圾回收时调用。您很少需要覆盖它。一个例子:

      protected void finalize() {
        //free resources (e.g. unallocate memory)
        super.finalize();
      }
      

      【讨论】:

      • 比大多数 Java 书籍更好的答案!
      • 谢谢。与其他自称为“专家”的人相比,这个答案得到了很好的解释。
      • 很好的答案,但是 finalize 方法的签名是错误的。
      • 注意:Object#finalize() 方法在 Java 9 (JDK-8165641) 中已弃用。
      【解决方案4】:

      决赛: final 是一个关键字。 decleared as final 的变量应该是 只初始化一次,不能更改。 Java 类 声明为 final 不能延长。声明为 final 的方法 不能被覆盖。

      最后: finally 是一个块。 finally 块总是在 尝试阻止退出。这确保了 finally 块被执行 即使发生意外的异常。但最后是有用的 不仅仅是异常处理——它允许程序员 避免通过返回意外绕过清理代码, 继续,或中断。将清理代码放在 finally 块中是 始终是一个好的做法,即使没有预料到的例外情况。

      最终确定: finalize 是一种方法。 在对象被垃圾回收之前, 运行时系统调用它的 finalize() 方法。你可以写系统 在获取垃圾之前,资源在 finalize() 方法中释放代码 收集。

      【讨论】:

        【解决方案5】:

        http://allu.wordpress.com/2006/11/08/difference-between-final-finally-and-finalize/

        final – 常量声明。

        finally – finally 块总是在 try 块退出时执行,除了 System.exit(0) 调用。这样可以确保即使发生意外异常也会执行 finally 块。但 finally 不仅仅对异常处理有用——它允许程序员避免清理代码意外地被 return、continue 或 break 绕过。将清理代码放在 finally 块中始终是一种很好的做法,即使在没有预期异常的情况下也是如此。

        finalize() - 方法有助于垃圾收集。在垃圾收集器丢弃对象之前调用的方法,允许它清理其状态。不应用于释放非内存资源,如文件句柄、套接字、数据库连接等,因为 Java 只有有限数量的这些资源,而且您不知道垃圾收集何时开始释放这些非内存资源通过 finalize() 方法。

        您是否尝试在 google 上搜索,并且需要澄清以获得解释?

        【讨论】:

        • 欢迎来到 Stack Overflow!虽然这篇文章实际上可能回答了这个问题,it would be preferable 在这里包含了答案的基本部分,并提供了链接以供参考。 Stack Overflow 仅与它的问题和答案一样有用,如果此博客主机出现故障或 URL 移动,此答案将变得无用。谢谢!
        【解决方案6】:

        final关键字用于声明常量。

        final int FILE_TYPE = 3;
        

        finally 关键字在 try catch 语句中用于指定要执行的代码块,而不考虑抛出的异常。

        try
        {
          //stuff
        }
        catch(Exception e)
        {
          //do stuff
        }
        finally
        {
          //this is always run
        }
        

        最后(哈哈),finalize im 不完全确定是一个关键字,但是 Object 类中有一个finalize() 函数。

        【讨论】:

          【解决方案7】:
          • “Final”表示无法更改某些内容。您通常希望将其用于在程序的整个生命周期中保持相同值的静态变量。
          • “Finally”与 try/catch 块结合使用。无论“try”块中的代码是否引发异常,“finally”子句中的任何内容都将被执行。
          • 在对象即将被垃圾回收之前,JVM 会调用“Finalize”。

          【讨论】:

            猜你喜欢
            • 2013-09-20
            • 2012-06-18
            • 1970-01-01
            • 2011-10-26
            • 2014-12-05
            • 1970-01-01
            • 2015-06-07
            • 2015-03-05
            • 2014-05-26
            相关资源
            最近更新 更多