1.异常的分类
Error:这是我们处理不了的异常。
我们要处理的异常有两种:
编译时被检测异常:
该异常在编译时,如果没有处理(没有抛也没有try),编译失败。该异常会被eclipse标识,代表这可以被处理。
运行时异常(编译时不检测)
该异常的发生说明,我们需要对某些代码进行修正。
2.异常体系的根类是:Throwable
Throwable:
|--Error: 重大的问题,我们处理不了。也不需要编写代码处理。比如说内存溢出。
|--Exception: 一般性的错误,是需要我们对编写的代码进行处理。
|--运行期异常: 在运行时出问题,需要修正代码
|--编译期异常,就是一般的异常(编译期异常)
3.常见异常
ConcurrentModificationException并发修改异常
IndexOutOfBoundsException元素越界
NoSuchElementException没有这样的元素
ClassNotFoundException找不到类
java.lang.IllegalStateException 非法参数异常
NullPointerException空指针
等等。。。。。
4.Throwable类的三个重要方法
getMessage():获取异常信息,返回字符串。
toString():获取异常类名和异常信息,返回字符串。
printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
5.异常的处理·
A:try...catch...finally
基本格式:
try
{
可能出现异常的代码
}
catch(异常对象)
{
异常处理代码
}
finally
{
释放资源
}
变形格式:
try...catch
try...catch...catch...
try...catch...catch...finally
**多个异常同时被捕获的时候,记住一个原则:
先逮小的,再逮大的。
**finally:永远被执行,除非退出jvm。System.exit(0);
finally的return会覆盖catch的return;
6.final,finally,finalize区别?
final是最终的意思。它可以用于修饰类,成员变量,成员方法。
它修饰的类不能被继承,它修饰的变量时常量,它修饰的方法不能被重写。
finally:是异常处理里面的关键字。
它其中的代码永远被执行。特殊情况:在执行它之前jvm退出。System.exit(0);
finalize:是Object类中的一个方法。
它是于垃圾回收器调用的方式。
7.假如catch中有return语句, finally里中的代码会执行吗?
是在return前,还是在return后呢?
会,在return前执行finally里面的代码,如果finally代码的执行不再影响catch里面return的值。
8.throws和throw的区别?
A:有throws的时候可以没有throw。
有throw的时候,如果throw抛的异常是Exception体系,那么必须有throws在方法上声明。
B:throws用于方法的声明上,其后跟的是异常类名,后面可以跟多个异常类,之间用逗号隔开
throw用于方法体中,其后跟的是一个异常对象名
9.自定义异常
定义类继承Exception或者RuntimeException,如果希望写一个检查性异常类,则需要继承 Exception 类。如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
1,为了让该自定义类具备可抛性。
2,让该类具备操作异常的共性方法。
class MyExcepiton extends Exception
{
MyExcepiton(){}
MyExcepiton(String message)
{
super(message);
}
}
class MyException extends RuntimeException
{
MyExcepiton(){}
MyExcepiton(String message)
{
super(message);
}
}
10.测试
public class MyExceptionTest {
public static void main(String[] args) {
try{
int i=1/0;
}catch(Exception e){
throw new MyExcepiton("大件事了,出异常了!");
}
}
}
11.springMVC解诀全局异常
思路:
1.导包log4j和slf4j,slf4j更好用些
2.全局异常处理器测试类,实现HandlerExceptionResolver接口
/**
* 全局异常处理器测试类
* @author 666
*
Description:
Company: www.baidudu.com
}
3.书写配置文件log4j.properties
log4j.rootLogger=INFO,A3,STDOUT
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%n
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.file=logs/server.log//输出位置
log4j.appender.A3.MaxFileSize=1024KB//日志最大1024kb
log4j.appender.A3.MaxBackupIndex=10
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
4.在springmvc.xml中配置全局异常处理器