其他分享
首页 > 其他分享> > final和finally关键字的区别

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

标签:final,finally,关键字,方法,java
来源: