java异常resolveExce_javase基础知识03-异常Exception和自定义异常及测试

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;

b1e8885e40c28f42d38ff16ddd142df9.png

7b0eff795c8943904835e5df941eae2c.png

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解诀全局异常

思路:

449d9165a358db42511defe9ace2f4a5.png

1.导包log4j和slf4j,slf4j更好用些

8693cbcfc2dd209ead445c670be4c4dd.png

2.全局异常处理器测试类,实现HandlerExceptionResolver接口

/**

* 全局异常处理器测试类

* @author 666

*

Description:

*

Company: www.baidudu.com

* @version 1.0

*/

public class GlobalExectionResolver implements HandlerExceptionResolver{

private static Logger logger = LoggerFactory.getLogger(GlobalExectionResolver.class) ;//org.slf4j.Logger

@Override

public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,

Exception ex) {

//打印控制台

ex.printStackTrace();

//写日志

logger.debug("测试输出的日志。");

logger.info("系统出现异常了。");

logger.error("系统发生异常",ex);

//发邮件、短信

//使用jmail工具包,使用第三方的WebService

//显示错误页面

ModelAndView modelAndView = new ModelAndView();

modelAndView.setViewName("error/exception");/返回逻辑视图exception.jsp

return modelAndView;

}

}

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中配置全局异常处理器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值