记住一点:
Exception 属于应用程序级别的异常,这类异常必须捕捉,Exception体系包括RuntimeException体系和其他非RuntimeException的体系
RunntimeException 就是程序猿不检查犯下的异常,一定是程序猿的错误。
其他的是非检查异常,就是程序猿检查了也没用,还要犯的错误。。
1.java将所有的错误封装为一个对象,其根本父类为Throwable, Throwable有两个子类:Error和Exception。
2.Error
是Throwable
的子类,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然 ThreadDeath
错误是一个“正规”的条件,但它也是 Error
的子类,因为大多数应用程序都不应该试图捕获它。在执行该方法期间,无需在其 throws
子句中声明可能抛出但是未能捕获的 Error
的任何子类,因为这些错误可能是再也不会发生的异常条件。
3.Exception
类及其子类是 Throwable
的一种形式,它指出了合理的应用程序想要捕获的条件。
4.RuntimeException
是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的RuntimeException
的任何子类都无需在 throws
子句中进行声明。它是Exception的子类。
5.异常的分类
Error:一般为底层的不可恢复的类;
Exception:分为未检查异常(RuntimeException)和已检查异常(非RuntimeException)。
未检查异常是因为程序员没有进行必需要的检查,因为疏忽和错误而引起的错误。几个经典的RunTimeException如下:
1.java.lang.NullPointerException; 2.java.lang.ArithmaticException; 3.java.lang.ArrayIndexoutofBoundsException
Runtime Exception:
在定义方法时不需要声明会抛出runtime exception; 在调用这个方法时不需要捕获这个runtime exception; runtime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。 例如:nullpointexception,IndexOutOfBoundsException就属于runtime exception
Exception:
定义方法时必须声明所有可能会抛出的exception; 在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;exception是从java.lang.Exception类衍生出来的。例如:IOException,SQLException就属于Exception
Exception 属于应用程序级别的异常,这类异常必须捕捉,Exception体系包括RuntimeException体系和其他非RuntimeException的体系
RuntimeException 表示系统异常,比较严重,如果出现RuntimeException,那么一定是程序员的错误
什么是unchecked异常?
即RuntimeException(运行时异常)
不需要try...catch...或throws 机制去处理的异常
常见的RuntimeException- -
RuntimeException是开发中最容易遇到的,下面列举一下常见的RuntimeException:
1、NullPointerException:见的最多了,其实很简单,一般都是在null对象上调用方法了。
String s=null; boolean eq=s.equals(""); // NullPointerException
这里你看的非常明白了,为什么一到程序中就晕呢?
public int getNumber(String str){ if(str.equals("A")) return 1; else if(str.equals("B")) return 2; }
这个方法就有可能抛出NullPointerException,我建议你主动抛出异常,因为代码一多,你可能又晕了。
public int getNumber(String str){ if(str==null) throw new NullPointerException("参数不能为空"); //你是否觉得明白多了 if(str.equals("A")) return 1; else if(str.equals("B")) return 2; }
2、NumberFormatException:继承IllegalArgumentException,字符串转换为数字时出现。比如int i= Integer.parseInt("ab3");
3、ArrayIndexOutOfBoundsException:数组越界。比如 int[] a=new int[3]; int b=a[3];
4、StringIndexOutOfBoundsException:字符串越界。比如 String s="hello"; char c=s.chatAt(6);
5、ClassCastException:类型转换错误。比如 Object obj=new Object(); String s=(String)obj;
6、UnsupportedOperationException:该操作不被支持。如果我们希望不支持这个方法,可以抛出这个异常。既然不支持还要这个干吗?有可能子类中不想支持父类中有的方法,可以直接抛出这个异常。
7、ArithmeticException:算术错误,典型的就是0作为除数的时候。
8、IllegalArgumentException:非法参数,在把字符串转换成数字的时候经常出现的一个异常,我们可以在自己的程序中好好利用这个异常.
参考:RuntimeException和Exception区别
参考:java 中的Exception RuntimeException 区别