Java异常之throw,throws和Throwable

Java异常处理中有throw开头的三兄弟,分别是throw,throws以及Throwable,那么他们之间到底怎么区分呢,且听我慢慢道来。

Throwable

Throwable是一个类,该类被异常类Exception以及错误类Error继承,其主要结构如下:

Throwable
       |-- Error 严重错误,如栈溢出,内存溢出等
       |-- Exception
            |- - CheckedException 可查异常,若不加处理,编译不通过
            |- - RuntimeException 运行时异常,可以进行编译

Java异常分为两种,一种是可查异常,即必须通过处理才能够进行编译,如FileNotFoundException等;另外一种是运行时异常,可以不用对其进行处理就能够编译,例如数组下标越界、除0等异常。

因此,Throwable作为所有异常的超类,在不知道发生何种异常的时候,可以直接使用Throwable来代替Exception或者各种具体的异常类。

throws

throws的作用是在方法声明的后面指明该方法可能会抛出异常(并不一定真的会出现异常)。如果在执行这个方法时出现异常,那么这个方法就不再执行了,而是抛出一个异常,把这个异常抛给调用他的方法,并且让调用他的那个方法去处理。

结合一段代码进行分析:

	public static void method1() {
		try {
			method2();
		}catch(Exception e) {
			System.out.println("failed");
		}
	}
	
	public static void method2() throws FileNotFoundException{
		File f = new File("1.txt");
		System.out.println("试图打开文件");
		new FileInputStream(f);
		System.out.println("打开文件成功");
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		method1();		
	}

根据上面的代码,在定义method2时,通过throws指明该方法可能会抛出FileNotFoundException异常。首先main函数调用method1,method1调用method2,而method2中文件f并不存在,因此在new FileInputStream(f)这行代码抛出异常,method2终止,并把这个抛出的异常甩锅给method1 。而此时,method1刚好可以catch住这个异常,异常就被处理掉了,得到的结果如下:
在这里插入图片描述

throw

与throws不同,throw是一定会抛出一个异常,而且是在方法体内部使用。之前所说的异常类对象,都是JVM自动进行实例化的;有时候用户想要亲自实例化异常类对象,那么这个时候throw就登场了。先看一段代码:

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			throw new FileNotFoundException();
		}catch(Throwable e){
			System.out.println("File not found");
		}
	}

该代码比较简单,在catch中通过throw,直接实例化了一个异常类FileNotFoundException的对象,通过catch接住,并进行输出,得到的结果如下:
在这里插入图片描述

总结

Throwable是所有异常类的超类,Exception和Error两个类直接继承它;

throws写在方法声明的后面,表明这个方法可能会抛出某种异常;

throw写在方法体内部,手动抛出一个异常。

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
throwthrows和Throwable这三个概念在Java中有不同的含义和用法。 1. throw: throw是一个关键字,用于在方法体内部显式地抛出异常。使用throw关键字后面跟着一个异常对象,表示出现了某种异常情况。一旦抛出异常,程序会立即停止执行,并且异常对象会被传递给调用栈中的相应的catch块进行处理。 2. throws: throws也是一个关键字,用于方法声明中。它跟在方法名后面,后面跟着异常类名。它表示该方法可能会抛出指定的异常,告诉调用者需要对可能发生的异常进行处理。当方法中可能抛出多种异常时,可以使用逗号分隔多个异常类名。 3. Throwable: ThrowableJava中所有异常类的基类。它是一个类层次结构的根,定义了处理和传播异常的基本行为。Throwable类有两个重要的子类:Exception和Error。Exception类表示可恢复的异常,通常由程序错误引起,可以通过合适的处理方式进行捕获和处理。Error类表示不可恢复的错误,通常由系统错误或资源耗尽等情况引起,程序无法处理。 总结: - throw用于在方法体内抛出异常对象; - throws用于方法声明中,指定方法可能抛出的异常; - Throwable是所有异常类的基类,分为Exception和Error两个子类。 通过使用throwthrows,我们可以在代码中处理异常情况,并在必要时向上层调用栈传递异常信息,以便进行适当的处理和错误处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值