文章目录
该文介绍了Java的一些常见异常,并给出对应的例子进行解释。介绍异常的使用原则,即创建,抛出异常的编程规范。
前要:Java API中提供了一些异常类,这些异常类用来在控制台中,反馈出经常发生的BUG。这些异常中,一些是Java虚拟机自动进行捕获处理的,一些需要程序员进行捕获处理或声明抛出。
异常类 | 说明 |
ArithmeticException | 算术异常 |
ArrayIndexOutOfBoundsException | 数组下标越界异常 |
ArrayStoreException | 数组中包含不兼容的值抛出的异常 |
ClassCastException | 类型转换异常 |
ClassNotFoundException | 未找到相应类异常 |
NullPointerException | 空指针异常 |
NoSuchFieldException | 字段未能找到异常 |
NegativeArrarySizeException | 数组长度为负异常 |
IllegalArgumentException | 非法参数异常 |
SQLException | 操作数据库异常 |
SecurityException | 安全性异常 |
(1)ArithmeticException
算数异常:即运算中与运算逻辑不相符的错误运算。
实例:
public class Demo {
public static void main(String[] args) {
int a = 1;
int b = a/0;
//此处发生了算数异常,除法运算中,除数不能为零
}
}
(2)ArrayIndexOutOfBoundsException
数组下标越界异常:即赋值或调用数组时,数组的索引位置超出了创建该数组的范围。
实例:
public class Demo {
public static void main(String[] args) {
int a[] = new int[100];
//创建了一个 a[]数组,容量范围为 0-99
a[100] = 1;
//此处发生了数组下标越界异常,a[]数组的索引范围为 0 ≤ x < 100 ,所以100超出索引范围
}
}
输出结果:
(3)ArrayStoreException
数组中包含不兼容的值异常:即给数组赋值时,此赋值的数据类型与创建时该数组的数据类型不相符。
实例:
public class Demo {
public static void main(String[] args) {
// 创建一个整数数组
Object arr[] = new Integer[5];
// 尝试将一个字符串对象存储到整数数组中
arr[0] = "Hello";
//此处发生了数组中包含不兼容的值异常,arr[]数组 数据类型为 整数,arr[0] 数据类型为 String
}
}
(4)ClassCastException
类型转换异常:即在赋值或运算过程中,转换数据的类型前后不对应(即使进行了强转换)。
实例:
public class Demo {
public static void main(String[] args) {
//创建了一个 Integer 整数类型的 obj 对象
Object obj = new Integer(10);
//尝试将 Integer类型的obj 转换为 String类型
String str = (String) obj;
//这里发生了类型转换异常,整数类型转换为了String类型,不能转换
}
}
(5)ClassNotFoundException
未找到相应类异常:即调用了一个不存在的类,或者调用路径错误,拼写错误,导致不存在。
实例:
public class Demo {
public static void main(String[] args) {
try {
//该类的路径不存在此类
Class.forName("com.example.NonExistentClass");
//发生了异常
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
(6)NullPointerException
空指针异常:即引用对象为null,没有指向一个具体的数据,相关的操作指令无法进行。
实例:
public class Demo {
public static void main(String[] args) {
String str = null;
int length = str.length();
//这里会抛出空指针异常,因为str为null
}
}
(7)NegativeArrarySizeException
数组长度为负异常:即创建的一个数组时,其索引范围为一个负数,使x<0,与0≤x相违背。
实例:
public class Demo {
public static void main(String[] args) {
try {
int[] arr = new int[-5];
// 尝试创建一个具有负数大小的数组,发生异常
} catch (NegativeArraySizeException e) {
e.printStackTrace();
}
}
}
(8)IllegalArgumentException
非法参数异常:即我们调用方法时, 传递了无效、不合法或不符合预期的参数值。
实例:
public class Demo {
public static void main(String[] args) {
try {
int age = -5;
if (age < 0) {
throw new IllegalArgumentException("age 是一个不符合预期的参数:年龄不能小于零");
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}
输出结果:
(1)发生异常尽量不要抛出,尽量直接处理掉。
(2)不能忽略抛出的异常,并且一定要使用 try-catch 代码块反馈报错。
(3)不要将过于庞大的代码套入 try-catch 代码块。此操作会增加异常产生的可能性,更难识别出异常的性质。尽可能是代码中的一小部分套入 try-catch 代码块。
(4)不要过度使用 catch 代码块。多余的 catch 代码块(本意用于反馈并处理异常,但是画蛇添足) 会使进程进行多余的判断,增加CPU的运行压力,浪费系统资源。
(5)子类抛出的异常不能比父类更高级。(特例:RuntimeException 异常及其子类不受此原则的约束)。
以上就是对Java异常的一些常见API中异常的总结,异常的使用规范的补充内容。如果对该文有补充或指正的内容,欢迎在评论区中留言。博主会及时进行反馈的。