Java异常

异常处理机制主要回答了三个问题:What、Where、Why

What:异常类型回答了什么被抛出

Where:异常堆栈跟踪回答了在哪抛出

Why:异常信息回答了为什么被抛出

Java异常

从概念角度解析java的异常处理机制

Error:程序无法处理的程序错误,编译器不做检查(比如内存溢出,这些问题)

Exeption:程序可以处理的异常,捕获后可能恢复

总结是前者无法处理的错误,后者是可以处理的异常

 

 

Java异常

 

 

Java的异常体系

所有异常的父类就是Thrwoable

两个子类 Error和Exception异常(下又有很多异常、运行异常、非运行异常),

从责任角度看:

1.Error属于JVM需要负担的责任

2.RuntimeException是程序应该负担的责任;

3.Checkd Exception可检查异常是Java编译器应该负担的责任

RuntimeException不可预知的,程序应当自行避免(NullPointerExceptio,IndexOutOfBoundsEception)

非RuntimeException可预知的,从编译器检验的异常(IOException,SqlException..)

Java异常

 

 

常见Error以及Exception

RuntimeException

1.NullPointerException-空指针引用异常

2.ClassCastException-类型强制转换异常

3.IllegalArgumentException-传递非法参数异常

4.IndexOutOfBoundsException-下标越界异常
5.NumberFormatException-数字格式异常

非RuntimeException

1.ClassNotFoundException-找不到指定class的异常

2.IOException-IO操作异常

 

Error

1.NoClassDefFoundError-找不到class定义的异常

2.*eError-深递归导致被耗尽而抛出的异常

3.OutOfMemoryError-内存溢出异常

 

Java异常

 

 

 

只有第一个异常会显示出来

其他的异常 只会在第一个异常处理完毕之后继续显示出来然后继续出来

下面分为 递归报错、运行时异常

 

Java异常

package com.binglian.thorwable;

import java.io.FileNotFoundException;

public class ErrorAndException {

	//深度递归异常、内存异常这种
	private void throwError(){
		throw new *Error();
	}
	
	//运行时异常
	private void throwRuntimeException(){
		throw new RuntimeException();
	}
	
	//检查时异常
	private void throwCheckedException() throws FileNotFoundException{
		throw new FileNotFoundException();
	}
	
	public static void main(String[] args)throws FileNotFoundException{
		ErrorAndException andException=new ErrorAndException();
		//报错只会显示第一异常 
		andException.throwError();
		andException.throwRuntimeException();
		andException.throwCheckedException();
		
	}
}

Java的异常处理机制

抛出异常:创建异常对象,交由运行时系统处理

捕获异常:寻找合适的异常处理器异常,否则终止运行

 

有异常就抛出异常,然后捕获异常

try抛出

catch捕获异常

 

看最后结果,, finally不管有没有异常都会运行

Java异常

 

高效主流的异常处理框架

在用户看来,应用系统发生的所有异常都是应用系统内部的异常

设计一个通用的继承自RuntimeException的异常来统一处理

其余异常都统一转译为上诉异常AppException

在Catch之后,抛出上述异常的子类,并提供足以定位的信息

由前端接受AppException做统一处理

 

Java异常

 

try-catch的性能

 

Java异常