首页 新闻 会员 周边 捐助

关于java异常处理throw和throws异常向调用者抛的问题

0
悬赏园豆:5 [待解决问题]

package 异常处理;

public class 异常处理 {
static void demoproc() {
try {
throw new NullPointerException("demo");

	}catch(NullPointerException e){
		System.out.println("caught inside demopric.");
		throw e;为什么在这里的throw不用有throws语句就可以把异常向上抛。
	}
	
}


public static void main(String args[])
{
	
	try {
		demoproc();
	}catch(NullPointerException e)
	{
		System.out.println("2"+e);
		
	}
}

}

shmily涂的主页 shmily涂 | 初学一级 | 园豆:4
提问于:2020-04-23 21:43
< >
分享
所有回答(1)
0

因为NullPointException是RuntimeException,即运行时异常,归类为非checked异常,即不强制要求调用者catch。
RuntimeException,一般认为是和运行时环境有关,无法避免的,强制要求捕获并处理。
Exception,checked Exception,一般认为是由于编码不规范导致的,不需要强制捕获,完全可以通过代码规避掉。

可以参考下我这篇文章的简单介绍:
https://www.cnblogs.com/ofyou/p/Java-Error-and-Exception.html

为什么有的Exception要catch,有的不需要呢?

我们的原则是,如果能在编码过程中避免的异常,那么就不应该catch,如NullPoint,IndexOutOfBounds,ClassCast等待,如果出错了那么就是我们的代码写的有问题,即使捕获了也无法让程序正常运行。
比如用户增加一个资源,某个字段缺失导致空指针异常,我们捕获了告诉用户异常,用户会把我们赶出去,因为这个字段本来就不是要求非空的,只是我们没去判断而已 😃

什么样的异常我们需要捕获或者显式通过throw声明要求调用者捕获呢?那就是通过代码无法控制,跟运行时的环境有关的异常,譬如IO异常,我们读取磁盘、网络请求等可能会因为文件损坏、丢失、网络异常等原因导致出错,那么这种情况我们就要捕获异常了。等环境恢复后,我们还是可以继续IO操作的。

。淑女范erり | 园豆:961 (小虾三级) | 2020-04-24 08:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册