1.•非受查异常(unchecked exception)
–编译器
不要求强制处置的异常
–java.lang.RuntimeException类及它的子类都是非受查异常
•错误的类型转换异常:
ClassCastException
•组下标越界异常:
ArrayIndexOutOfBoundsException
•空指针访问异常:
NullPointerException
除零溢出异常:ArithmeticException
2.•受查异常(checked exception)
–编译器要求必须处置的异常
•没有找到具有指定名称的类:
ClassNotFoundException
•访问不存在的文件异常:
java.io.FileNotFoundException
•操作文件时发生的异常:
java.io.IOException
•操作数据库时发生的异常:
java.sql.SQLException
- package com.mys.ajax;
- import java.io.IOException;
- public class CatchTest {
- /**
- * @param args
- */
- public static void main(String[] args) {
- test1();
- test2();
- test3();
- test4();
- test5();
- }
- private static void test1() {
- try{
- System.out.println("www.csdn.net");
- }catch (IndexOutOfBoundsException ex) {
- ex.printStackTrace();
- }
- }
- private static void test2() {
- try{
- System.out.println("www.csdn.net");
- }catch (NullPointerException ex) {
- ex.printStackTrace();
- }
- }
- private static void test3() {
- try{
- System.out.println("www.csdn.net");
- }catch (IOException ex) {//1.
- ex.printStackTrace();
- }
- }
- private static void test4() {
- try{
- System.out.println("www.csdn.net");
- }catch (ClassNotFoundException ex) {//2.
- ex.printStackTrace();
- }
- }
- private static void test5() {
- try{
- System.out.println("www.csdn.net");
- }catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- }
上面1和2出编译是就报错,由于编译器认为System.out.println("www.csdn.net"); 这句话不可能抛出这两个异常。
根据Java语言规范,如果一个catch子句试图捕获一个Checked异常,那么它对应的try子句必须可能抛出该Checked异常或者其子类异常,否则,编译器即提示编译错误!
区别于RuntimeException异常,Runtime异常非常灵活,无须显示声明抛出,只要程序有需要,即可以在任何有需要的地方使用try...catch来捕获。