final和finally关键字的区别
作者:互联网
final和finally的区别
一. final关键字
final可以声明变量,形参,方法,类
1.当用final修饰变量时,该变量变为常量,常量的值不可改变.例如char[]arr={1,2,3,4,5},当定义一个数组时,数组默认被final修饰即不可改变,且final直接初始化赋值时用static修饰
(1)static final int a=10; (2)若声明的为成员变量final int b;则在构造方法中进行赋值
public class FinalDemo { static int b=20; final int a; public FinalDemo(int a) { this.a = 10; } }
当用final修饰形参时,形参的值不可在改变.
2.当用final修饰方法时,被修饰的方法不能再被子类重写,但可以在本类中重载
public final static void xx(){ } public final static void xx(int a){ }
3.当用final修饰类的时候,该类不能被继承
public final class FinalDemo { }
二.finally关键字
finally是对java的一种异常处理机制,finally是对java异常处理模型的最佳补充
finaly{}结构的代码块使其中的代码在出现异常,虚拟机停止运行时仍会执行执行final代码块中的内容.
public class FinallyDemo { public static void main(String[] args) { System.out.println(sout(10,0)); } public static int sout(int a,int b){ try { return a / b;//当使用try+finally类型时,此处没用处理异常,try中一旦出现问题后,执行完finally中代码块,虚拟机停止 }finally { System.out.println(".............."); } } }
finally与catch执行顺序
1.当catch中没有return语句时,执行顺序为try-----catch-----finally
2.当catch中有return语句而finally没有return语句,执行try代码块------执行catch中return之前的代码------finally中的代码块------最后执行catch中的return
3.当catch和finally中都用return语句,时执行顺序为try-----catch-----finally,但最后finally中的return语句会覆盖catch中的return语句,返回的是finally中的return语句.
eg:
public class ReturnExceptionDemo { static void methodA() { try { System.out.println("进入方法A");1 throw new RuntimeException("制造异常");3 } finally { System.out.println("用A方法的finally");2 } } static int methodB() { try { System.out.println("进入方法B");4 throw new Exception(); return 1; } catch (Exception e) { return 3; } finally { System.out.println("调用B方法的finally");5 return 2;6 } } public static void main(String[] args) { try { methodA(); } catch (Exception e) { System.out.println(e.getMessage()); } int i = methodB() System.out.println(i);2 } }
结果:
进入方法A 用A方法的finally 制造异常 进入方法B 调用B方法的finally 2