- 先创建一个自定义异常类 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("程序发生了其他异常");
}
}
}
-
运行结果:
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异常类层次结构图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()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常
网友评论