什么是异常?
异常是程序在运行中出现的非正常状态。
异常体系
Throwable
|--Error
|--Exception
|--RuntimeException
error和exception的区别?
error表示恢复不是不可能但是很困难的情况下的一种严重问题,比如内存溢出不可能指望程序能够处理。
exception是实现或设计问题,也就是说如果程序运行正常,从不会发生的情况。
运行时异常和一般异常的区别?
异常是程序运行中出现的非正常状态。运行时异常是java虚拟机的通常操作中出现的异常,是一种常见的运行错误。java编译器要求方法必须声明或抛出可能发生的非运行时异常,但不要求必须声明抛出未被捕获的运行时异常。
throw和throws关键字
throw:在方法内抛出异常对象。
throws:在方法上声明可能发生的异常。
异常处理语句格式
- //格式一
- try
- {
- }
- catch ()
- {
- }
- //格式二
- try
- {
- }
- catch ()
- {
- }
- finally
- {
- }
- //格式三
- try
- {
- }
- finally
- {
- }
//格式一
try
{
}
catch ()
{
}
//格式二
try
{
}
catch ()
{
}
finally
{
}
//格式三
try
{
}
finally
{
}
finally表示总是被执行,通常在里面做关闭资源的动作。只有遇到Sytem.exit(0);语句时finally语句不会被执行。
如果没有对异常进行处理,虚拟机进行默认处理,调用默认异常处理机制,程序终止。
多异常处理
1.声明异常时,建议声明更为具体的异常,这样处理更具体
2.对方声明几个异常,就对应几个catch块
如果对个catch中的异常出现继承关系,父类异常catch块放在最下面,不要定义多余的
catch块。
自定义异常
因为项目中会出现特有的问题,而这些问题未被java所描述并封装对象,所以对于这些特有问题可以按照java对问题封装思想。将特有问题进行自定义的异常封装。这就是自定义异常。必须继承Exception、
自定义异常信息
因为父类已经将异常信息的操作(如getMessage)都完成了,所以子类只要在构造时,将异常信息传递给父类通过super语句,那么就可以直接通过getMessage方法获取自定义的异常信息。
- class FuShuException extends Exception
- {
- FuShuException(String msg)
- {
- super(msg);
- }
- }
- class ExceptionTest
- {
- try
- {
- //捕获异常
- }
- catch (FuShuException e)//异常处理
- {
- System.out.println(e.toString());
- }
- }
class FuShuException extends Exception
{
FuShuException(String msg)
{
super(msg);
}
}
class ExceptionTest
{
try
{
//捕获异常
}
catch (FuShuException e)//异常处理
{
System.out.println(e.toString());
}
}