标签:
【异常】
<1>运行期出现的错误(不是编译时的语法错误)。
<2>观察错误的名字和行号很重要!
【程序分析:数组越界】
int [] arr = {1,2,3};
System.out.println(arr[4]);
注:在C和C++中编译通过,因为在C和C++中不进行数组越界的检查(这就很容易造成缓冲区溢出漏洞)。
Java可以检查数组下标是否越界,但是有一定的检查范围。
报错:Exception in thread ‘main‘ java.lang.ArrayIndexOutOfBoundsException: 4[出错的下标]at ***(出错位置)
----数组下标越界
【程序分析:分母为0】
System.out.println(2/0);
报错:Exception in thread ‘main‘ java.lang.ArithmaticException: by zero at ***
解决:捕获异常
try{
System.out.println(2/0);
}catch(ArithmaticException ae){
//Java程序在出错时,ae对象是可以直接使用的,以内默认情况下已经初始化
System.out.println("系统维护中...");
//这是很多网站常用的提示,因此持续刷新并不能解决问题
ae.printStackTrace();
//这是常用的解决方式,即把错误的堆栈信息打印出来(把引起错误的所有信息打印,这样便于程序员进行调试)
}
【程序】
<1>查看API文档可知,每种方法都会有对应的Exception,意在提醒用户在使用该方法时要格外注意该异常的出现,可以使用 throw Exception语句解决;还有一种异常直接在方法声明中就给出,例如public int read() throws IOException{}。
<2>在方法定义时,使用throws关键字抛出可能的异常;在调用该方法时,使用try-catch语句捕获异常。
<3>throw的用法:
void A(int i) throws ArithmaticException{
if(i==0){
throw new ArithmaticException("被除数不能为0");
//这相当于一个错误打印语句
}
}
【异常分类】
<1>所有的异常均来自这样一个类:Throwable(java.lang.Throwable其有两个子类--Error、Exception)。
<2>Exception是可以初始化的异常,其中还有一个比较特殊的异常:RuntimeException。
<3>Throwable意为"可抛出的",只要从该类继承的对象,都是可以抛出异常。
<4>Error是系统级错误,即虚拟机错误,我们用户无法处理;Exception可以由用户处理。
<5>RuntimeException是经常出现的错误,可以不进行处理;另外一种Exception(不是运行时的Exception)必须进行捕获并处理(JDK中有些方法后面直接写出throws的即代表必须处理的异常)。
【Exception分类】
【finally】
工作原理:
存在的必要性:
如果前面执行打开文件操作,当操作出错时,对应的代码不会继续执行,但是我们必须要把打开的文件关闭,这段代码就需要放置在finally代码块中。
【try】
【catch】
【finally】
示例程序:
【异常的抛出和处理】
程序:
void f() throws FileNotFoundException,IOException{
//比较严格的是抛出多种可能的异常,可以根据实际捕获的异常作出不同的处理
FileInputStream in = new FileInputStream("**.txt");
int b;
b = in.read();
while(b == -1){
System.out.println((char)b);
b = in.read();
}
}
void f2(){
try{
f();
catch(FileNotFoundException e){
e.getMessage();
//必须要对Exception作出相应的处理,否则就相当于把Exception认为吞并了
}catch(IOException e){
e.printStackTrace();
}
}
}
void f2() throws IOException{
f();
}
//捕获异常后不知道怎么处理,可采用上述方法。
注:如果任何异常都不想处理,也可以在main函数上直接抛出异常,这时抛出的异常是交给Java运行系统。除了在做测试意外,实际编程中不要在main函数中抛出异常。
【Exception举例】
注:这里要特别注意出错的行号(极其重要--说明哪个方法在哪个地方出的错),这时往往是由于其中一个地方错误引起的。
注:Exception应该放在后面,不能置于其子类的前面。
报错:已捕获到异常 java.io.FileNotFoundException ****
【自定义异常】
在实际项目中往往需要自己定义需要的异常类,从已存在的类(RuntimeException等)继承即可。
步骤:
【举例】
【注意】
注:<1>第一个抛出的异常类型和原来的不一致,应该为IOException。
<2>第二个抛出的范围大了(范围大了小了都不可以)。
<3>第三个不抛异常可以重写方法。
<4>第四个抛出异常多了。
Java——异常处理
标签:
原文地址:http://www.cnblogs.com/yedushusheng/p/4354681.html