Java中 异常与抛出异常

异常

try catch

写法:

try {

                  //可能产生的异常的代码区,也称为监控区

        }catch (ExceptionType1 e) {

                  //捕获并处理try抛出异常类型为ExceptionType1的异常

        }catch(ExceptionType2 e) {

                  //捕获并处理try抛出异常类型为ExceptionType2的异常

        }

try catch final

写法:

  try {

       //可能产生的异常的代码区

   }catch (ExceptionType1 e) {

       //捕获并处理try抛出异常类型为ExceptionType1的异常

   }catch (ExceptionType2 e){

       //捕获并处理try抛出异常类型为ExceptionType2的异常

   }finally{

       //无论是出现异常,finally块中的代码都将被执行

   }

执行顺序;

1、try没有捕获异常时,try代码块中的语句依次被执行,跳过catch。如果存在finally则执行finally代码块,否则执行后续代码。

2、try捕获到异常时,如果没有与之匹配的catch子句,则该异常交给JVM处理。如果存在finally,则其中的代码仍然被执行,但是finally之后的代码不会被执行。

3、try捕获到异常时,如果存在与之匹配的catch,则跳到该catch代码块执行处理。如果存在finally则执行finally代码块,执行完finally代码块之后继续执行后续代码;否则直接执行后续代码。另外注意,try代码块出现异常之后的代码不会被执行。

4、如果想让finally不执行,需要退出虚拟机,System.exit

5、finally会比return 先执行。

实例:

package Exception;

import java.util.InputMismatchException;
import java.util.Scanner;

public class TCF {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.println("请输入被除数:");
		try {			
			int numA=input.nextInt();
			System.out.println("请输入除数:");
			int numB=input.nextInt();
			System.out.println("结果是:"+numA/numB);
		}
		catch(InputMismatchException e) {
			System.out.println("只能输入整数.");
		}
		catch(ArithmeticException e) {
			System.out.println("除数不能为0");
		}
		catch(Exception e) {
			System.out.println("网络异常");
		}
		finally {
			input.close();//关闭数据流
		}
	}
}

throw和throws

1、throws抛出异常

如果一个方法可能抛出异常,但是没有能力处理该异常或者需要通过该异常向上层汇报处理结果,可以在方法声明时使用throws来抛出异常。这就相当于计算机硬件发生损坏,但是计算机本身无法处理,就将该异常交给维修人员来处理。

2、throw抛出异常

在方法内,用throw来抛出一个Throwable类型的异常。一旦遇到到throw语句,后面的代码将不被执行。然后,便是进行异常处理——包含该异常的try-catch最终处理,也可以向上层抛出。注意我们只能抛出Throwable类和其子类的对象。

tips:只有在抛出RuntimeException异常的时候,throw可以单独使用。

3、可查异常:编译器要求必须处理的异常。正确的程序在运行过程中,经常容易出现的、符合预期的异常情况。一旦发生此类异常,就必须采用某种方式进行处理。除RuntimeException及其子类外,其他的Exception异常都属于可查异常。编译器会检查此类异常,也就是说当编译器检查到应用中的某处可能会此类异常时,将会提示你处理本异常——要么使用try-catch捕获,要么使用throws语句抛出,否则编译不通过。

4、不可查异常:编译器不会进行检查并且不要求必须处理的异常,也就说当程序中出现此类异常时,即使我们没有try-catch捕获它,也没有使用throws抛出该异常,编译也会正常通过。该类异常包括运行时异常(RuntimeException极其子类)和错误(Error)

5、自定义异常

代码:

package Exception;

public class AgeException extends Exception {
	String error;
	public AgeException(){
		this("年龄不能低于0岁或大于150岁!");
	}
	public AgeException(String error) {
		super(error);
	}
}

package Exception;

public class TR {
	private int age;
	private String name;
	public TR(){
		
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) throws AgeException{
		if(age>150||age<0) {
			throw new AgeException();
		}
		this.age = age;
	}
	
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值