java 排错的技巧
2015-08-15 18:54
316 查看
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排错的一个简单归纳。
首先需要看这个错误的类型
然后从报错信息往下查找直到找到我们自己写的程序
然后结合错误信息分析程序出错的原因。
相关文章推荐
- Struts之Action(Action继承类、实现接口、访问servlet API方法)
- java使用nircmd代替cmd解决管理员权限问题
- Java并发编程:volatile关键字解析
- JavaSE基础--(三)面向对象 部分
- mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类
- JavaSE基础--(二)IO部分
- 修改eclipse界面
- Java并发编程实践读书笔记
- eclipse修改字体大小
- Eclipse快捷键
- Spring继承Bean的配置
- Java的JNI:使用Java调用C程序(入门)
- struts2 多文件上传与下载
- 流行Java IDE工具大比拼[转]
- java学习个人笔记---容器之Map与Set关系
- java继承内部类问题(java编程思想笔记)
- 智渔课堂官方免费教程四十六 :Java基础之序列化和反序列化
- I学霸官方免费教程四十六 :Java基础之序列化和反序列化
- Spring自动装配Bean属性
- java学习个人笔记---java类总体初始化顺序