【JAVA面向对象编程机制——封装性】 4 浅谈Java异常处理机制( throw 关键字、try-catch 关键字、Throws 关键字 )

程序的错误通常包括
●语法错误 (程序的运行不符合语言的语法规则,错误可以被编译程序发现)
●逻辑错误 (程序设计不当造成程序没有完成预期,错误可以被测试发现)
●运行异常 (运行环境环境问题造成程序异常终止)

1、 throw 关键字

java中所有操作都是基于对象的,异常也是一样。
当执行过程中遇到异常情况时,将异常信息封装为异常对象,然后抛出,抛出的异常对象将传递给Java 运行时系统(JVM)

Private Muchu(int x) throws OutOfRangeException{
	if (x < 0){
		throw new OutOfRangeException("Number not positive");
		}else{
				x1 = x;
}
		}
		

抛出的异常说明在操作中出现了某种未知错误,需要进行判断捕获和处理。

2、 try-catch 关键字

try{

    		//正常逻辑代码,放入可能发生异常的语句

}catch(ExceptionSubClass1 e){

          //  处理异常的语句 1

}catch(ExceptionSubClass2 e){

              
            //处理异常的语句 2

}

try-catch 语句可以由几个 catch 组成,分别处理发生相应异常。

Java 里的 try-catch 语句一般用来处理异常,将可能出现的异常的语句操作放在 try 里,一旦 try 里语句出现异常,就立即结束 try 部分。处理异常的语句放在catch 里。

▲1、如果JVM找到匹配的catch子句,程序仅仅执行第一个匹配的catch代码块,匹配的catch代码块执行完毕后,将执行最后一个catch代码块之后的语句。

▲2、如果IVM在抛出异常的操作体内没有找到匹配的catch子句,那么说明该操作有可能抛出某类异常,但是未捕捉相应的异常对象。在这种情况下,操作将异常对象抛出给调用它的方法,依此类推,直到被捕捉。如果被调用的方法都没有捕捉该异常对象,异常可能路往外传递直达main()而未被捕捉,则运行将终止,相应的Java 程序也将退出。

由于捕捉异常的顺序和不同catch语句的顺序有关,当捕获到一个异常时,剩下的catch语句就不再进行匹配,因此在安排catch语句的顺序时,首先应该=-捕获子类异常,然 后再逐渐一般化。


package Muchu;

public class ThrowsMain {

    public static void main(String args[]){
        try{
            throw new Exception("自己抛着玩的。") ;    // 抛出异常的实例化对象
        }catch(Exception e){
            System.out.println(e) ;
        }
    }
};

在这里插入图片描述

3、异常类 和 throws关键字

3.1 异常类

异常类的基类是 Throwable 。有两个直接子类 : Exception 、 Error

我们需要关心异常类Exception 的直接或间接子类。

Throwable 类的常用方法

类型 方法
String getMessage()返回此Throwable 的详细信息字符串
void printStackTrace()将此Throwable 及其追踪输出至标准错误流
String toString 返回此Throwable 的简短描述

方法示例:

package Muchu;

public class ExcepMod {

	public static void f() throws Exception {
	
	throw new Exception("This is my Type Exception");
	}
	
	public static void g() throws Exception {

		
		f();
		System.out.println("f()后的代码");
	}
	
	public static void main(String[] args) {
		
		try
		{
			g();
			System.out.println("后面的。。。");
		}
		
		catch(Exception e) {
			System.out.println("caught exception here: ");
			System.out.println("e.getMessage() :"+e.getMessage());
			System.out.println("e.toString :"+e.toString());
			System.out.println("e.printStackTrace :");
				e.printStackTrace();
		}

	}	
}

【JAVA面向对象编程机制——封装性】 4 浅谈Java异常处理机制( throw 关键字、try-catch 关键字、Throws 关键字 )_第1张图片

3.2 Throws 关键字

假如一个方法体要抛出异常,但是该方法体没有抛出异常的处理代码段(try - catch 块),那么在该方的声明部分必须通过 关键字 Throws 对异常进行抛出声明。

●使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理。
throws关键字格式:

public 返回值类型 方法名称(参数列表,,,)throws 异常类{};

▶例:除法操作,可能出现异常,默认throws 就会把异常操作交给JVM处理。

package Muchu;

public class ThrowsMain {
	
	    public int div(int i,int j) throws Exception{    // 定义除法操作,如果有异常,则交给被调用处处理
	        int temp = i / j;    // 可能出现的异常
	        return temp;
	    
	    }
		
	    public static void main(String args[]){
	    	
	    
	    ThrowsMain m = new ThrowsMain();       // 实例化Math类对象
	        try{
	            System.out.println("除法操作:" + m.div(10,0)) ;
	        }catch(Exception e){
	            e.printStackTrace() ;    // 打印异常
	        }
	}
 }

在这里插入图片描述
throws关键字后多个抛出的异常之间可以用逗号隔开。

常见的异常类:

数据格式异常:NumberFormatException

数组越界: ArrayIndexOfBoundException

算术异常类:ArithmeticExecption

空指针引用异常类:NullPointerException

类型强制转换异常:ClassCastException

数组负下标异常:NegativeArrayException

数组下标越界异常:ArrayIndexOutOfBoundsException

违背安全原则异常:SecturityException

文件已结束异常:EOFException

文件未找到异常:FileNotFoundException

字符串转换为数字异常:NumberFormatException

你可能感兴趣的:(Java面向对象编程机制)