java复习-异常

java复习–异常
Error:错误,由JVM生成并抛出,如虚拟机错误,程序不做处理(少见)。

1

Exception:所有异常类的父类(可以处理的错误)。

2

RuntimeException
未检查(unchecked)异常
经常出的错误
不能由编译器检查,编程导致的错误,程序员的错误,编程避免。

注意:
可处理可不处理

3

RuntimeException举例

数组访问越界IndexOutOfBoundsException
访问空指针 NullPointerException
算术异常 ArithmeticException
类转换异常 ClassCastException

4

非Runtime Exception
已检查(checked)异常
有时在特定条件下发生的错误,如试图读取磁盘上不存在的文件
能够用Java编译器进行分析,编译时检查,提高了程序的安全性

非RuntimeException举例

输入输出异常IOException
解析异常ParseException

注意:
必须有相应处理

5

创建异常对象:程序运行出现非正常情况时,系统将错误信息封装为一个Exception对象
抛出异常对象:系统将这个异常对象抛出给发生异常的位置
接收处理异常对象:程序接收异常对象并处理
继续抛出异常对象:如果无法处理则继续抛出

6

try…catch…语句

catch子句
调用某个catch块处理异常对象时,会将异常对象赋值给catch块后的异常形参,包含异常对象的信息

getMessage():得到异常的详细描述字符串
printStackTrace():输出异常的跟踪栈信息(用于调试程序)
printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定输出流
getStackTrace():返回异常的跟踪栈信息

一般题目只让System.out.println(e);即可

7

注意逻辑顺序;
子异常要写在父异常前面!

8

finally子句
不管异常是否发生,finally子句的代码都会执行。
作用:为异常提供了统一的出口,使得在控制流程转到程序其他部分之前,做统一的处理。

finally中通常所做的工作:
关闭打开的文件;
关闭数据库连接;
其它

例子:

FileInputStream in = null;
try {
    
    
in = new FileInputStream("1.txt");
int b;
 while ((b = in.read())!=-1)
	 System.out.print((char)b);} catch (IOException e) {
    
    
        e.printStackTrace();	
} finally {
    
    
      try {
    
    
             if (in!=null)
                  in.close();
      } catch (IOException e) {
    
    
      	e.printStackTrace();
      }
}

9

注意throws与throw的区别!!!
throws用于方法的抛出异常的声明,
参数列表之后,{}之前;
eg:

public static void f()throws Exception
{
    
    
	//....
}

而throw用于方法内部抛出某个具体的异常;

eg:
public void f()throws Exception
{
    
    
	try{
    
    
		//....
	}catch(Exception e){
    
    
		throw new Exception("exception message");
	}
}

10

可以自定义异常;
但必须继承自Exception
提供构造器,通过super向上传参,初始化Exception中的message;

也可通过getMassage()调用message;

11

小总结:
java异常处理:一种用于处理程序中错误的机制

创建异常对象:程序运行出现非正常情况时,系统将错误信息封装为一个Exception对象 XXXException e = new XXXException(“…”)

抛出异常对象:系统将这个异常对象抛出给发生异常的位置 throw e;

接收处理异常对象:程序接收异常对象并处理 try…catch…finally

继续抛出异常对象:如果无法处理则继续抛出 throws XXXException

不过度使用异常
使用异常机制处理一切错误,对于普通的程序逻辑
不编写任何错误处理代码,而是简单抛出异常来代替错误处理
用异常处理来代替流程控制

不使用过度庞大的try块
否则catch块数量太多,逻辑混乱

避免catch All异常
关键异常可能忽略
不能针对不同异常分别处理

不要忽略捕捉到的异常
应当处理并修复这个错误!仅打印信息不够
处理异常、重新抛出新异常、在合适的层处理异常

猜你喜欢

转载自blog.csdn.net/timelessx_x/article/details/112059081
今日推荐