先上两张截自《Java核心技术:卷一》的图:
下面纯属个人的理解,仅供参考:
异常处理:
1.捕获 catch try-catch
我自己来处理
2.抛出 throws
交给上层程序处理(捕获)
个人对异常的理解:
所以异常处理流程就是这么一回事:
1.首先我声明说我可能会抛出什么样的异常:例如在方法或类后面跟throws IOException, EOFException
2.
/*** 时空A ***/
try{
//这里执行一大串的程序A
code
more code
more code
}
/*** 时空跳转到另一层程序:也即程序A所在的时空B ******/
我是一大串程序A{
code
more code
/* 等等,我发现了个异常,我处理不了或者不想去处理,
决定要抛出去,交给上层(也就是写了try-catch的那一层代码)去处理 */
if(n < 0)
throws new IOException;
}
/*** 时空B抛出了一个异常导致自动进行时空切换,回到时空A ***/
………
//这里执行一大串的程序A
}
catch(ExceptionType e)
{
抓到一只异常,放着我来,我来处理这个问题
……
handle for this type
}
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.UnknownHostException;
/**
* @author Lv Lang
*
*/
public class Exception {
public static void print(String s)
throws FileNotFoundException,
UnknownHostException,
IOException
{}
public static void main(String[] args) {
try
{
//code that might throw exceptions
print("Hello");
/**
如果没有调用print()或者print后面没跟有相应的异常类型,
程序会报错:Unreachable catch block for
FileNotFoundException.
This exception is never thrown from
the try statement body。
*/
}
catch(FileNotFoundException e){}
catch(UnknownHostException e){}
catch(IOException e){}
}
}
/**
* eclipse快捷键汇总:
* http://blog.csdn.net/wconvey/article/details/41743365
*
* ctrl+shift+o:自动import全部需要的包
*/
两种异常处理方式:
第二种方法也是够坑的,明明你read函数是给我提供服务的,现在反倒要我来处理你抛出来的异常:嫁接责任到我这边来。如果采取这种方式则必须在read方法后面声明说我会抛出IOException否则报错。
然后是finally在异常中的作用:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.UnknownHostException;
/**
* @author lv.lang
*
*/
public class Exception {
public static void print(String s)
throws FileNotFoundException,
UnknownHostException,
IOException
{}
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(
"C:/Users/lv.lang/Desktop/Study/Readme.md");
try
{
//code that might throw exceptions
print("Hello");
/**
如果没有调用print()或者print后面没跟有相应的异常类型,
程序会报错:Unreachable catch block for
FileNotFoundException.
This exception is never thrown from
the try statement body。
*/
}
catch(FileNotFoundException e){
System.out.println("File not found");
}
catch(UnknownHostException e){}
catch(IOException e){}
finally
/**
* finally里面的代码必定会被执行,常用于执行空间释放
* 例如出现异常则断开数据库连接,或者像本例的关闭文件
*/
{
in.close();
}
}
}
/**
* eclipse快捷键汇总:
* http://blog.csdn.net/wconvey/article/details/41743365
*
* ctrl+shift+o:自动import全部需要的包
*/