java异常介绍
在 Java 中,所有的异常都继承自Throwable。Throwable有两个主要的子类Exception和Error。一般来说Error是我们程序不可处理的错误,而Exception是我们程序关心的重点。
Exception下面又分为运行时异常和非运行时异常,常见的空指针和数组越界就是属于RuntimeException,而ClassNotFoundException和IoException等则属于非运行时异常。
java程序报错分析
我们通过下面这个小例子来展示下基本的排错方法
public static void main(String[] args) {
String s = new String("");
s.charAt(1);
}
我们运行这个程序会报如下错误
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.charAt(String.java:658)
at com.test.Test2.main(Test2.java:7)
我们仔细分析下报错信息
首先第一行Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 1告诉我们是在主线程中出现了异常,并且告诉我们出现的是StringIndexOutOfBoundsException是这个异常。同时给我们打印了异常信息String index out of range: 1。由此我们就可以知道这是数组越界的异常。但是仅仅通过这些我们并能不知道我们代码的哪个地方导致了这个异常。
但是紧接着第二行错误西你想就告诉我们第一次出现错误的位置。我们通过点击(String.java:658)打开代码可以看到下面的程序。
public char charAt(int index) {
if ((index < 0) || (index >= value.length)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index];
}
其中的throw new StringIndexOutOfBoundsException(index);
即是异常抛出的起点。
接下来我们再看下第三行,即是调用charAt(int index) 这个函数的位置,也就是我们程序的s.charAt(1);到这里我们知道了是因为我们调用了s.charAt(1);才导致了数组越界的错误,而我们稍微分析下就知道是因为我们string字符串的长度为0,而我们却使用了s.charAt(1);这个函数。至此我们就可以找到我们程序错误的位置和原因了。
上面只是一个最简单的含有错误的小程序。虽然简单,但是通过这个小程序,我们以后再遇到报错信息时,我们就知道如何去查找错误原因了,下面就是对java排错的一个简单归纳。
- 首先需要看这个错误的类型
- 然后从报错信息往下查找直到找到我们自己写的程序
- 然后结合错误信息分析程序出错的原因。