java关键字(final finally finalize)

   java中的final,finally,finalize,我想大家都很熟悉,具体怎么用,什么时候用到也是面试官常会问的一个问题,下面进行逐一讲解。

   1 final

    在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。

   1)final修饰类。

   当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。

   java关键字(final finally finalize)

      如果一个类继承被final修饰的类,那么就会报错。

     所以在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。

   2)final修饰方法

   final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写(可以重载多个final修饰的方法)。此处需要注意的一点是:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,将会导致子类中不能直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。(注:类的private方法会隐式地被指定为final方法。)

   java关键字(final finally finalize)

  大家看的到如果不讲父类的Shout()方法定义为final,那么子类是可以重写的。

  java关键字(final finally finalize)

     如果父类的方法加上final,那么子类姜就不能进行重写了。

    如果把父类方法的修饰符public换成private还会不会报错呢?

   java关键字(final finally finalize)

  这正好印证了上面所说的,final修饰的方法不能被子类重写,而重写的前提是你要继承,父类的方法如果是private修饰的,子类是无法继承的,既然没有继承,那么子类写一个和父类方法名一样的方法那是允许的,那就相当于重新写了一个方法。

  3)final修饰变量

  java中的变量分为基本数据类型的变量和引用类型变量。

  对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

 java关键字(final finally finalize)

 其实这个真的比较好理解,不管是基本数据类型还是引用数据类型一旦被赋值或被初始化就不能再让别人触碰了也就是可读不可写。

2 finally

在java中的finally关键一般与try一起使用,在程序进入try块之后,无论程序是因为异常而中止或其它方式返回终止的(仅考虑程序正常执行的情况下,不考虑System.exit(0)等情况),finally块的内容一定会被执行,写个例子来说明下:

java关键字(final finally finalize)

   这个test方法很简单,传递进来的int值作为分母,大家都知道分母是不能为0的,正常的传值10,那么走的就是try和catch。

   那么我若传值0会怎么样呢?大家看看:

  java关键字(final finally finalize)

   如果传入的是0,那么就会产生异常,就会走catch和finally,那么久说明不管走try还是catch,finally里面的代码块都会执行。

 3 finalize

 finalize我们平时基本上用的很少,大家只需要稍微了解下就好。

Java 回收该类的一个对象时,就会调用这个方法。在finalize ( )方法中,你要指定在一个对象被撤消前必须执行的操作。垃圾回收周期性地运行,检查对象不再被运行状态引用或间接地通过其他对象引用。就在对象被释放之 前,Java 运行系统调用该对象的finalize( ) 方法。