1. 程式人生 > >java關於丟擲異常的小細節

java關於丟擲異常的小細節

業餘接觸java 4年,但最近才發現一個關於丟擲異常的小細節

try{
	int y=0/0;
}catch(Exception e){
	e.printStackTrace();
	try {
		throw new Exception();//這一行必須加try-catch才編譯通過
	} catch (Exception e1) {}
	throw e;//這一行無論加不加try-catch都編譯通過
}
後面的throw e;不用加try-catch另我很困惑,但是後來我修改了一下
try{
	int y=0/0;
	new Socket("127.0.0.1",1000).close();
}catch(Exception e){
	e.printStackTrace();
	try {
		throw new Exception();//這一行必須加try-catch才編譯通過
	} catch (Exception e1) {}
	throw e;//這時這一行就必須加try-catch才能編譯通過了
}
也就是說,java編譯器會識別try{}裡可能會丟擲那些異常,如果try{}裡可能丟擲的異常都是RuntimeException那麼在catch裡把異常向上丟擲時就不必加try-catch了