final:java
在java中,final能够用来修饰类,方法和变量(成员变量或局部变量)程序员
一、final类中全部的成员方法都会隐式的定义为final方法。socket
二、若父类中final方法的访问权限为private,将致使子类中不能直接继承该方法,所以,此时能够在子类中定义相同方法名的函数,此时不会与重写final的矛盾,而是在子类中从新地定义了新方法。函数
三、final成员变量表示常量,只能被赋值一次,赋值后其值再也不改变。相似于C++中的const。线程
四、final修饰一个成员变量(属性),必需要显示初始化。这里有两种初始化方式:对象
一种是在变量声明的时候初始化;继承
第二种方法是在声明变量的时候不赋初值,可是要在这个变量所在的类的全部的构造函数中对这个变量赋初值。生命周期
finally:资源
一、只有与finally对应的try语句块获得执行的状况下,finally语句块才会执行。虚拟机
二、在 try 语句块中执行了 System.exit (0) 语句,终止了 Java 虚拟机的运行,不会执行finally语句块
三、当一个线程在执行 try 语句块或者 catch 语句块时被打断(interrupted)、被终止(killed)、忽然死机或者断电,都不会执行finally语句块
四、finally块的语句在try或catch中的return语句执行以后返回以前执行,finally里的修改语句可能影响也可能不影响try或catch中 return已经肯定的返回值,若finally里也有return语句则覆盖try或catch中的return语句直接返回。
finalize :
finalize()是在java.lang.Object里定义的,这个方法在gc启动,该对象被回收的时候被调用,通常是不须要程序员去实现finalize的;
特殊状况下,须要程序员实现finalize,当对象被回收的时候释放一些资源,好比:一个socket连接,在对象初始化时建立,整个生命周期内有效,那么就须要实现finalize,关闭这个连接。
使用finalize还须要注意一个事,调用super.finalize();
一个对象的finalize()方法只会被调用一次,并且finalize()被调用不意味着gc会当即回收该对象,因此有可能调用finalize()后,该对象又不须要被回收了,而后到了真正要被回收的时候,由于前面调用过一次,因此不会调用finalize(),产生问题。 因此,推荐不要使用finalize()方法