Java异常处理(一)

  • 先创建一个自定义异常类 CCException ,再添加搭配 BB 类里捕捉异常的处理中。
package z1;

//自定义异常
public class CCException extends Exception{

    String message;
    public CCException(String messageError){
        message=messageError;
    }
    public String getMessage(){
    
        return message;
    }
}
package z1;

public class BB{
    
    static int arr(int x,int y)throws CCException{
    
        if(y<0)
        {
            throw new CCException("不能为负数");
        }
        
        return x/y;
    }
    public static void main(String[] args){

        try{
            
            int value=arr(12,-3);
            System.out.println(value);
        }catch(CCException e){
            
            System.out.println(e.getMessage());//自定义异常  
        }catch(ArithmeticException e){
            
            System.out.println("算术异常"); 
        }catch(Exception e){
            
            System.out.println("程序发生了其他异常");    
        }
    }
}
  • 运行结果:


    Java异常处理(一)_第1张图片
    image.png

注意事项:

  • 在方法中使用throw关键字抛出异常后,方法不再继续执行

  • Error是在JVM运行时出错的,程序员无法控制并改变;
    Exception是程序员可控的,可以修改程序解决的异常

  • Java允许忽略运行时异常,编译器会通过,但可根据情况进行处理
    其他异常编译器会检查出来,并强制进行异常处理。

  • 执行一个catch方法后,就不再执行后面的catch方法了,
    所以把所有异常的父类Exception放在最后一个catch中来捕捉异常

  • 调用方法必须遵循任何可查异常的处理和声明规则。若覆盖一个方法,则不能声明与覆盖方法不同的异常。声明的任何异常必须是被覆盖方法所声明异常的同类或子类。

[java] view plain copy
void method1() throws IOException{}  //合法    
   
//编译错误,必须捕获或声明抛出IOException    
void method2(){    
  method1();    
}    
   
//合法,声明抛出IOException    
void method3()throws IOException {    
  method1();    
}    
   
//合法,声明抛出Exception,IOException是Exception的子类    
void method4()throws Exception {    
  method1();    
}    
   
//合法,捕获IOException    
void method5(){    
 try{    
    method1();    
 }catch(IOException e){…}    
}    
   
//编译错误,必须捕获或声明抛出Exception    
void method6(){    
  try{    
    method1();    
  }catch(IOException e){throw new Exception();}    
}    
   
//合法,声明抛出Exception    
void method7()throws Exception{    
 try{    
  method1();    
 }catch(IOException e){throw new Exception();}    
}  

Java异常类层次结构图

Java异常处理(一)_第2张图片
Java异常类层次结构图
1. runtimeException子类:

1、 java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。

2、java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。

3、java.lang.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等

4、java.lang.ClassNotFoundException 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。

5、java.lang.NegativeArraySizeException 数组长度为负异常

6、java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常

7、java.lang.SecurityException 安全性异常

8、java.lang.IllegalArgumentException 非法参数异常

2.IOException

IOException:操作输入流和输出流时可能出现的异常。

EOFException 文件已结束异常

FileNotFoundException 文件未找到异常

3. 其他

ClassCastException 类型转换异常类

ArrayStoreException 数组中包含不兼容的值抛出的异常

SQLException 操作数据库异常类

NoSuchFieldException 字段未找到异常

NoSuchMethodException 方法未找到抛出的异常

NumberFormatException 字符串转换为数字抛出的异常

StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常

IllegalAccessException 不允许访问某类异常

InstantiationException 当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常

参考资料:

  • Java从入门到精通
  • http://blog.csdn.net/hguisu/article/details/6155636 @真实的归宿

你可能感兴趣的:(Java异常处理(一))