final finally finalize的区别

来源:互联网 发布:linux下oracle安装教程 编辑:程序博客网 时间:2024/06/06 09:09

首先看final在java中的用法

public final  class Final {private final String name = "zjh";public final String getName() {return name;}}
从上面可以看出,final能够修饰类,属性,字段。被它修饰的类,不能被继承;被它修饰的方法,也不能被子类重写;至于属性,则是不能够修改。

如下图:

可以看到,final和abstract不能同时修饰类和方法;并且凡是试图修改final属性的行为都会报错。


finally:

public class Finally {public static void main(String[] args) throws SQLException {String driver = "com.mysql.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/scutcs";String user = "root";String password = "root";Connection conn = null;try {Class.forName(driver);conn = DriverManager.getConnection(url, user, password);} catch (Exception e) {e.printStackTrace();} finally {conn.close();}}}
finally是与try/catch配套使用的。它是用来在最后关闭开启的资源,比如这里的数据库连接。
当然,它的深入使用,只言片语是讲不完的,也不合这篇博客的主题,如有兴趣,可以参考这篇博客:java的try-finally


关于finalize,这是一个方法,而且是Object类的方法,也就是每个类都会自动继承过来。


可以看到,这是一个protect方法,平时不会接触到。当然是可以重写的。它用于JVM销毁对象时调用,如果没有重写的话,就什么都不做。

public class Finally {public static void main(String[] args) {Finally finalize = new Finally();System.out.println("Over");}@Overrideprotected void finalize() throws Throwable {// TODO Auto-generated method stubsuper.finalize();System.out.println("-----finalize-----");}}

但是,按照我们的想象,它会打印出finalize字样,但是实际上呢

这是为什么呢?

在Effective java这本书中,作者建议不要依赖finalize这个方法,要避免使用它,因为它是不安全的。从上面的例子可以看出,你根本不知道Java虚拟机什么时候会销毁这个对象,可能在程序结束都不会销毁。具体的用法,请参考这篇博客:Effective Java:Item_7 避免使用finalize方法

以上涉及博客,皆是百度的结果,感谢博主的付出。




0 0
原创粉丝点击