1.什么是异常
程序在执行过程中出现的问题或意外情况导致程序无法按照预期的流程执行
2.异常与错误的区别
1.错误:一般指程序运行时遇到的硬件或操作系统的错误,如内存溢出。将导致程序无法运行,同时也是程序本身不能处理的。程序无法处理的,交由JVM虚拟机处理,不过JVM在大多数情况下会选择终止程序。
3.异常情况
1.ArithmeticException 运算异常
除数为0的情况
public class Test1 { public static void main(String[] args) { int num1=10;//被除数 int num=0;//除数 int result=num1/num; System.out.println(result); System.out.println("程序继续运行......"); } }
抛出了ArithmeticException 运算异常
2.ArrayIndexOutOfBoundsException 数组下标越界异常
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] newarr = new String[0];
try {
newarr = createArray(-1);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("newarr[0]");
}
public static String[] createArray(int length) throws NegativeArraySizeException {
if (length < 0) {
throw new NegativeArraySizeException("数组长度不能为负数");
}
return new String[length];
}
此异常为自定义异常 ,需要自几创建一个异常类继承Exception,构造其中的方法。
自定义的异常类
public class MyException extends Exception { public MyException() { } public MyException(String message) { super(message); } public MyException(String message, Throwable cause) { super(message, cause); } public MyException(Throwable cause) { super(cause); } public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); } }
异常类中的构造方法。
3.一些其他异常
-
NullPointerException (空指针异常):当试图在空对象上调用方法或访问属性时,抛出该异常。通常是因为没有初始化对象或者引用了一个不存在的对象。
- ClassCastException (类转换异常):当试图将一个对象强制转换为不兼容的类型时,抛出该异常。通常是因为对象的实际类型和转换的目标类型之间不兼容。
-
IllegalArgumentException (非法参数异常):当传递给一个方法的参数不合法时,抛出该异常。通常是因为传递了无效的参数值或者参数值不满足预期的条件。
-
FileNotFoundException (文件未找到异常):当试图打开或读取一个不存在的文件时,抛出该异常。通常是因为文件路径错误或文件被其他进程占用。
-
IOException (输入/输出异常):在进行读写操作时,如果发生了错误,就抛出该异常。通常是因为文件读写错误、网络连接问题或设备故障等。
-
InterruptedException (中断异常):当一个线程在等待/休眠状态被打断时,抛出该异常。通常是因为其他线程调用了该线程的interrupt()方法。
以上只是一些常见的异常类型,Java还有很多其他类型的异常。在编写程序时,可以使用try-catch语句来捕获并处理异常,或者使用throws关键字声明方法可能抛出的异常。另外,可以根据具体的异常类型采取相应的处理措施,如输出异常信息、回滚操作或者重新尝试等。
4.优雅的异常处理方式
try-cashtry指“尝试”执行可能出现异常的代码,如果成功,则乎略备用方案, 即如下的代码;但如失败,代码会catch(捕获)到一个异常对象,放弃(A)计划,开始执行(B)计划,如果还有异常就,放弃(B)计划,开始执行(C)计划。
try { Scanner input = new Scanner(System.in); System.out.print("请输入一个数字:"); int num = input.nextInt(); System.out.println("平方为:"+(num * num)); } catch (InputMismatchException e) { System.out.println("输入异常"); }catch (Exception e){ System.out.println("其他异常"); } System.out.println("继续");
try-catch-finally
5.总结
总结起来,异常处理是编写健壮代码的重要一环,通过合理处理异常能够提高程序的稳定性和可靠性。在编写代码时,需要充分考虑可能出现的异常情况,并针对不同的异常采取相应的处理方式,以确保程序的正确运行。同时,合理使用try-catch语句和finally块可以保证资源的释放和代码的清理。