21.异常处理
21.1 知识点
Java中的异常捕获和C#中使用基本一致
语法:
try
{
// 需要进行异常捕获的代码块
}
catch (NullPointerException ex)
{
// ex.getMessage()
// 捕获异常信息
}
catch (ArrayIndexOutOfBoundsException ex)
{
// ex.getMessage()
// 捕获异常信息
}
catch (Exception ex)
{
// ex.getMessage()
// 捕获异常信息
}
finally
{
// 不管之前的代码块是否发生异常
// finally中的内容都将执行
// 注意:以下几种情况下finally中内容不会执行
// 1. finally 语句块中发生异常
// 2. 在finally之前执行了 System.exit() 退出程序
// 3. 程序所在的线程销毁
// 4. 关闭 CPU
}
Java中的常见异常类
- NullPointerException: 空指针异常
- IOException: 输入输出异常
- FileNotFoundException: 文件未找到异常
- ArrayIndexOutOfBoundsException: 数组越界异常
- NegativeArraySizeException: 数组元素个数为负数抛出异常
- ClassCastException: 类型转换异常
- ArithmeticException: 算数异常
- ArrayStoreException: 数组包含不兼容的值抛出的异常
- ClassNotFoundException: 未找到相应类异常
- 等等
Java中自定义异常
继承 Exception 异常基类
实现一个有参构造函数
通过 throw 关键字自己抛出异常对象
public class Lesson21_MyException extends Exception {
public int i = 0;
public Lesson21_MyException(String str) {
super(str);
}
}
try {
int i = -3;
if (i < 0) {
Lesson21_MyException ex = new Lesson21_MyException("数组容量不合法");
ex.i = i;
throw ex;
}
int[] ints = new int[i];
} catch (Lesson21_MyException ex) {
System.out.println(ex.getMessage() + ";数组容量为:" + ex.i);
} finally {
System.out.println("异常捕获结束");
}
方法中抛出异常
如果某个方法可能发生异常,但是又不想再方法内处理这个异常
想在调用这个方法的外部进行处理
可以使用 throws 关键字在声明方法时抛出可能的异常
多个异常可以使用逗号分割
那么外部调用该方法时,发生对应异常时即可进行处理
注意:
继承时,覆盖有抛异常的方法时,该方法必须抛出相同的异常或者异常的子类
如果父类中方法抛出多个异常,那么子类的覆盖方法必须抛出那些异常的子集,不能抛出新异常
public static void Test() throws ArrayIndexOutOfBoundsException, NegativeArraySizeException {
int[] ints = new int[-3];
}
try {
Test();
} catch (NegativeArraySizeException ex) {
System.out.println("容量为负了");
} catch (ArrayIndexOutOfBoundsException ex) {
System.out.println("索引越界");
}
总结
Java中的异常捕获和C#中基本一致,需要时直接使用即可。
21.2 知识点代码
public class Lesson21_异常处理
{
public static void Test() throws ArrayIndexOutOfBoundsException, NegativeArraySizeException
{
int[] ints = new int[-3];
}
public static void main(String[] args)
{
//知识点1:Java中的异常捕获和C#中使用基本一致
//语法:
try
{
//需要进行异常捕获的代码块
}
catch (NullPointerException ex)
{
//ex.getMessage()
//捕获异常信息
}
catch (ArrayIndexOutOfBoundsException ex)
{
//ex.getMessage()
//捕获异常信息
}
catch (Exception ex)
{
//ex.getMessage()
//捕获异常信息
}
finally
{
//不管之前的代码块是否发生异常
//finally中的内容都将执行
//注意:以下几种情况下finally中内容不会执行
//1.finally 语句块中发生异常
//2.在finally之前执行了System.exit()退出程序
//3.程序所在的线程销毁
//4.关闭CPU
}
//知识点2:Java中的常见异常类
//NullPointerException:空指针异常
//IOException:输入输出异常
//FileNotFoundException:文件为找到异常
//ArrayIndexOutOfBoundsException:数组越界异常
//NegativeArraySizeException:数组元素个数为负数抛出异常
//ClassCastException:类型转化异常
//ArithmeticException:算数异常
//ArrayStoreException:数组包含不兼容的值抛出的异常
//ClassNotFoundException:未找到相应类异常
//等等
//知识点3:Java中自定义异常
//继承Exception异常基类
//实现一个有参构造函数
//通过throw关键字自己抛出异常对象
try
{
int i = -3;
if (i < 0)
{
Lesson21_MyException ex = new Lesson21_MyException("数组容量不合法");
ex.i = i;
throw ex;
}
int[] ints = new int[i];
}
catch (Lesson21_MyException ex)
{
System.out.println(ex.getMessage() + ";数组容量为:" + ex.i);
}
finally
{
System.out.println("异常捕获结束");
}
//知识点4:方法中抛出异常
//如果某个方法可能发生异常,但是又不想再方法内处理这个异常
//想在调用这个方法的外部进行处理
//可以使用throws关键字在声明方法时抛出可能的异常
//多个异常可以使用逗号分割
//那么外部调用该方法时,发生对应异常时即可进行处理
//注意:
//继承时,覆盖有抛异常的方法时,该方法必须抛出相同的异常或者异常的子类
//如果父类中方法抛出多个异常,那么子类的覆盖方法必须抛出那些异常的子集,不能抛出新异常
try
{
Test();
}
catch (NegativeArraySizeException ex)
{
System.out.println("容量为负了");
}
catch (ArrayIndexOutOfBoundsException ex)
{
System.out.println("索引越界");
}
//总结
//Java中的异常捕获和C#中基本一致
//需要时直接使用即可
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com