异常的两种处理方式、throws

1、异常的两种处理方式

1、异常上抛

在方法声明的位置上,使用throws关键字,抛给上一级

谁调用我,我就抛给谁,抛给上一级。

2、异常捕捉

使用try..catch语句进行异常的捕捉

这件事发生了,谁也不知,因为我给抓住了。

举例

我是某集团的一个销售员,因为我的失误,导致公司损失了1000块钱。"损失1000块"这可以看做一个异常发生了。我有两种处理方式。

    第一种方式:我把这件事告诉我的领导。【异常上抛】 第二种方式:我把自己的掏腰包把这个钱补上。【异常的捕捉】

同样的异常发生之后,如果选择上抛,抛给了调用者,调用者需要对这个异常继续处理,那么调用者处理这个异常同样有两种处理方式。

注意

Java中异常发生之后如果一直上抛,最终抛给了main方法,main方法继续向上抛,抛给了调用者JVM,JVM知道这个异常的发生,只有只有一个结果。终止java程序的执行。

2、运行时异常编写程序时可以不处理

public class ExceptionTest01 {
          
   
	public static void main(String[] args) {
          
   
		int a = 10;
		int b = 0;
		int c=a/b;
		/*
		程序执行到此处发生了ArithmeticException异常
		底层new一个ArithmeticException异常对象
		然后抛出了,由于是main方法调用了c=a/b
		所以这个异常ArithmeticException抛给main方法
		main方法没有处理,将这个异常自动抛给JVM
		JVM最终终止程序的执行

		ArithmeticException 继承 RuntimeException,属于运行时异常。
		在编写程序阶段不需要对这种异常进行预先的处理。
		
		*/
		System. out.println(a + "/”+ b + "="+ c);

		//这里的HelloWorld没有输出,没有执行。
		System.out.println("Hello World!");//
	}
}

3、方法声明上使用throws

以下代码报错的原因是什么?

因为doSome()方法声明位置上使用了:throws ClassNotFoundException 而ClassNotFoundException是编译时异常。必须编写代码时处理,没有处理编译器报错。
public class ExceptionText1 {
          
   
    public static void main(String[] args) {
          
   
        //main方法中调用doSome()方法
        //因为doSome()方法声明位置上有:throws ClassNotFoundException
        //我们在调用doSome()方法的时候必须对这种异常进行预先的处理。
        //如果不处理,编译器就报错
        //报错信息: 未报告的异常错误java.lang.ClassNotFoundException
        doSome();
    }

    /**
     * doSome方法在方法声明的位置上使用了:throws ClassNotFoundException
     * 这个代码表示doSome()方法在执行过程中,有可能会出现ClassNotFoundException异常。
     * 叫做类没找到异常。这个异常直接父类是: Exception,所以ClassNotFoundException属于编译异常。
     * @throws ClassNotFoundException
     */
    public static void doSome() throws ClassNotFoundException{
          
   
        System.out.println("doSome!!!");
    }
}
经验分享 程序员 微信小程序 职场和发展