欢迎来到HugNew-拥抱变化,扫一扫右边二维码关注微信订阅号:Martin说 或 加QQ群:427697041互相交流,Stay hungry, Stay foolish.

final、finally、finalize的区别

J2SE Martin 2319℃ 0评论
final:如果一个变量或方法参数被final修饰,就表示它只能被赋值一次,但是JAVA虚拟机为变量设定的默认值不记作一次赋值。

final的用途
1、可用来定义变量,包括静态变量和非静态变量。
2、可用来定义方法传入的参数。
3、可用来定义类。
4、可用来定义方法。

修饰变量:修饰基本类型,赋予它的值是不可变的,即是常量;修饰的是一个对象,这个对象的引用是不可变的,但是对象本身还是可以变得。修饰变量必须得初始化。

初始化可在:
1、自定义时初始化(所有变量)。
2、初始化块中初始化(非静态变量)。
3、静态初始化块中初始化(静态变量)。
4、构造函数中初始化(静态与非静态变量)。
final修饰的变量更有效率,应该尽可能多将普通变量替换为final变量。

修饰方法:final修饰的方法可以被继承但不可以被重写。
修饰类:final修饰的类是不可以被继承的。例如String类就是final的,表示不可变的。final类不可被继承,final的所有方法都默认为final。

finally:finally只能跟在try/catch语句中,并且附带一个语句块,表示最后执行。但是也会有不一定的时候,当try/catch中有return、break、continue就会改变这种状况。编译器会先执行finally语句块,再执行return,break,continue。如:

Java代码  收藏代码
  1. public final class FinallyTest {
  2.     // 测试return语句
  3.     public ReturnClass testReturn() {
  4.         try {
  5.             return new ReturnClass();
  6.         } catch (Exception e) {
  7.             e.printStackTrace();
  8.         } finally {
  9.             System.out.println(“执行了finally语句”);
  10.         }
  11.         return null;
  12.     }
  13.     // 测试continue语句
  14.     public void testContinue() {
  15.         for (int i = 0; i < 3; i++) {
  16.             try {
  17.                 System.out.println(i);
  18.                 if (i == 1) {
  19.                     continue;
  20.                 }
  21.             } catch (Exception e) {
  22.                 e.printStackTrace();
  23.             } finally {
  24.                 System.out.println(“执行了finally语句”);
  25.             }
  26.         }
  27.     }
  28.     // 测试break语句
  29.     public void testBreak() {
  30.         for (int i = 0; i < 3; i++) {
  31.             try {
  32.                 System.out.println(i);
  33.                 if (i == 1) {
  34.                     break;
  35.                 }
  36.             } catch (Exception e) {
  37.                 e.printStackTrace();
  38.             } finally {
  39.                 System.out.println(“执行了finally语句”);
  40.             }
  41.         }
  42.     }
  43.     public static void main(String[] args) {
  44.         FinallyTest ft = new FinallyTest();
  45.         // 测试return语句
  46.         ft.testReturn();
  47.         System.out.println();
  48.         // 测试continue语句
  49.         ft.testContinue();
  50.         System.out.println();
  51.         // 测试break语句
  52.         ft.testBreak();
  53.     }
  54. }
  55. class ReturnClass {
  56.     public ReturnClass() {
  57.         System.out.println(“执行了return语句”);
  58.     }
  59. }

finalize:finalize是gc操作的运行机制中得一部分,进行gc操作时会调用finalize方法,而且finalize方法是object的方法,所有每个类都有这个方法并且可以重写这个方法,在这个方法里实现释放系统资源及其他清理工作,如实现流的关闭。

转载请注明:HugNew » final、finally、finalize的区别

喜欢 (1)or分享 (0)
发表我的评论
取消评论

表情