Java:异常处理机制



try-catch-finally


1:try-catch-finally语法一般形式

在Java中,异常通过try-catch语句捕获。其一般语法形式为:

try {
    
      
	// 可能会发生异常的程序代码  
} catch (Type1 id1){
    
      
	// 捕获并处置try抛出的异常类型Type1  
} catch (Type2 id2){
    
      
	 //捕获并处置try抛出的异常类型Type2  
}finally {
    
      
	// 无论是否发生异常,都将执行的语句块  
} 



2:注意catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面

  • catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓。
  • catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错

例题中:Exception是NullPointerException,NumberFormatException的父类,则需要放在后面

@Test
	public void test1(){
    
    
		
		String str = "123";
		str = "abc";
		int num = 0;
		try{
    
    
			num = Integer.parseInt(str);
			
			System.out.println("hello-----1");
		}catch(NumberFormatException e){
    
    
			System.out.println("出现数值转换异常了,不要着急....");
		}catch(NullPointerException e){
    
    
			System.out.println("出现空指针异常了,不要着急....");
		}catch(Exception e){
    
    
			System.out.println("出现异常了,不要着急....");
			
		}		
		System.out.println("hello-----2");
	}

3:在catch中常用的异常对象处理的方式:printStackTrace()

  • ① String getMessage()
  • printStackTrace()

在这里插入图片描述
在这里插入图片描述
注意:两种方式输出语句和打印结果的异同!!!


4:如要在try结构中使用变量,请生命在外部

在try结构中声明的变量,再出了try结构以后,就不能再被调用
如需使用,可以声明在外部,在内部使用。

举例:
在这里插入图片描述
解决方案:声明在外部,内部使用
在这里插入图片描述


5:finally中声明的是一定会被执行的代码**

注意:如果finally中的代码也可能出现异常,就也需要在finally中try-catch
在这里插入图片描述



throws + 异常类型


1:格式举例

public void readFile(String file) throws FileNotFoundException {
    
    
	……
	// 读文件的操作可能产生FileNotFoundException类型的异常
	FileInputStream fis = new FileInputStream(file);
	..……
}

“throws + 异常类型” 写在方法的声明处

指明此方法执行时,可能会抛出异常类型。

一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出,异常代码后续的代码就不再执行


2:子类重写方法不能抛出比被父类被重写的方法范围更大的异常类型。

public class A {
    
    
	public void methodA() throws IOException {
    
    
	……
	} 
}
public class B1 extends A {
    
    
	public void methodA() throws FileNotFoundException {
    
    
	……
	}
}
public class B2 extends A {
    
    
public void methodA() throws Exception {
    
     //报错
……
} }

3:子类重写的方法中有异常,必须使用try-catch-finally 方式处理


4: Throws抛出可查异常和不可查的规则:

  • 如果是不可查异常(unchecked exception),即Error、RuntimeException或它们的子类,那么可以不使用throws关键字来声明要抛出的异常,编译仍能顺利通过,但在运行时会被系统抛出。
  • 如果一个方法可能出现可查异常(checked exception),要么用try-catch语句捕获,要么用throws子句声明将它抛出,否则会导致编译错误。

猜你喜欢

转载自blog.csdn.net/m0_51755061/article/details/115075979