三种异常类型
-
Error 这意味着恢复不是一个不可能但困难的严重问题。例如,内存溢出。不可能指望程序处理这种情况。
-
RuntimeException表示设计或实现问题。也就是说,如果程序运行正常,就不会发生。例如,如果数组索引扩展不超过数组边界,则ArrayIndexOutOfBoundsException异常永远不会抛出。例如,这也适用于取消引用空值对象的变量。这种异常通常不会发生在正确设计和实现的程序中。这将导致一个操作信息,以确保采取措施纠正问题,而不是隐藏在没有人注意到的地方。
-
其他异常表示操作困难;它通常是由环境效应引起的,可以处理。具体例子包括未找到或无效的文件URL异常(用户犯了错误)URL)。
(摘自《java 77从入门到精通 张峰 编着)
(图片来源 《java马朝辉教程(第四版) 等译)
错误(Error)运行异常(RuntimeException)称为不可控异常;
其他异常属于可控异常,可控异常在方法中用throws声明。
至于操作异常,你的程序有问题,也就是有问题bug,当然,你也可以修改程序throws声明。
常见的异常类型
算术操作异常(ArithmeticException)
数组下标越界异常(ArrayIndexOutOfBoundsException)
数组元素类型不匹配异常(ArrayStoreException)
强制类型转换异常(ClassCastException)
索引越界异常(IndexOutOfBoundsException)
空指针异常(NullPointerException)
异常的数字格式转换(NumberFormatException)
字符串索引越界异常(StringIndexOutOfBoundsException)
操作错误(UnsupportedOperationException)
找不到指定类(ClassNotFoundException)
请求方法不存在(NoSuchMethodException)
异常无法访问(IllegalAccessException)
非法参数异常(IllegalArgumentException)
可以到jdk帮助文档查看更多异常类型
自定义异常类
系统中的异常类别有限,开发中会出现各种异常,定制异常类别非常重要
class 类名 extends ExceptionType{ code }
自定义异常类需要继承Exception类或其子类
package pc; public class demo4 { static void fun(int n) throws MyException { if(n < 0){ MyException e = new MyException(n); throw(e); //抛出异常 } double number = Math.sqrt(n); System.out.println(n "的平方根:" number); } public static void main(String[] args) { try { fun(-5); } catch (MyException e) { System.out.println(e.getMessage()); // e.printStackTrace(System.out); //使用此代码,输出与系统异常输出相同 ////在此指定输出流System.out,printStackTrace()默认使用System.err输出流输出,与System.out是两种不同的输出流 } } } // 自定义异常类 class MyException extends Exception { String message; MyException(int n){ message=n "不是正数"; } public String getMessage() { return message; } }