深坑索引
- 原则
- 借鉴
- 控制台无输出
- tomcat执行效果无变化
- 报错位置语法没问题
- `ArithmeticException : / by zero`算术异常,除数不能为0。
- `InputMismatchException`输入不匹配异常。
- IDEA里的module莫名其妙变成gradle
- `InstantiationException`实例化异常
- `StackOverflowError` 栈内存溢出异常
- `StringIndexOutOfBoundsException: String index out of range: 8`
- `ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.`
- `FileNotFoundException: d:\a\2.txt (系统找不到指定的文件。)`
- `NotSerializableException: cn.tedu.serializable.Student`序列化
原则
- 不要害怕BUG,真正的勇士敢于直面自己写的BUG。
- 学会看报错的信息提示,确定自己错误的方法。
- 学会看报错的行号提示,确定报错的位置,哪里不对点哪里。注意:源码一般不会错,要看的是自己写的代码。
- 所有的实现以自己环境下实测结果为准
借鉴
控制台无输出
使用System.out.println(p);
打印对象的时候,控制台没有任何输出,可以修改输出的内容,比如改成"phone" + p
tomcat执行效果无变化
修改了源码后,使用eclipse里面的tomcat自动部署无任何反应,可以尝试更换电脑。
报错位置语法没问题
当前行代码显示错误,但是检查后发现当前行代码语法无误时,可以使用格式化快捷键Ctrl+Shift+F
或是Ctrl+Alt+L
检查IDE能否正常格式化代码。如果不行,则说明有大括号漏掉了。
ArithmeticException : / by zero
算术异常,除数不能为0。
System.out.println("两数相除的结果:" + a / b);
这个语句中当b为零时会报这个错
InputMismatchException
输入不匹配异常。
int b = new Scanner(System.in).nextInt();
这个语句中调用的是nextInt()
方法,如果获取的是非整数,就会报这个错
IDEA里的module莫名其妙变成gradle
- 情景:IDEA里面的module里面多出
.gradle
文件夹、gradle
文件夹、gradlew
文件夹、gradlew.bat
文件,而且里面的.java文件变成了红色的图标,类里面即使有main()
方法,点击右键时也没有运行选项,此时可以在右侧栏上看到一个gradle的标签,我们点开后,可以在这个窗口里面看到出问题的这个module,在这里我们先选中这个module然后点击这个窗体中的-
号,就是从这里面删除这个module的意思。
如此操作后就会变成可以运行的状态了。参考原文
如果此时还是不能运行,可以在这个module的src
文件夹上点右键 -Mark Directory as
-Resources Root
,这样应该就可以按正常的java的module来使用了。但是发现这样修改回来后的moudle上没有了原生的mdule上的那个青蓝色的小方块了。目前还不清楚为什么,后面发现了原因再补笔记
InstantiationException
实例化异常
使用反射获取一个接口的对象的时候,会报这个错误,一般看到这个错误可以先看下是否要创建对象Class是个接口或是抽象类。如果都不是,那么检查对应的类里面是否有定义无参构造。
StackOverflowError
栈内存溢出异常
- 普通方法循环调用
有可能是两个方法互相调用,形成死循环 - 构造方法的循环调用
代码可以定位到一对象内部声明了一个自己类型的变量并同时new了自己的对象,此时构成死循环。
即:一个类内部定义了一个自己类型的变量,并同时赋值为new出来的自己的对象。此时由于创建对象时就需要初始化所有成员变量,但初始化这个成员变量时又需要创建此类的变量,循环往复
StringIndexOutOfBoundsException: String index out of range: 8
调用String
的charAt(int index)
方法时,如果index
>length()
会报这个错误`
ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
使用BigDecimal进行除法运算,结果是一个除不尽的数时,会报这个错误,只要再传一个指定保留几位小数的标识就可以了。
FileNotFoundException: d:\a\2.txt (系统找不到指定的文件。)
使用InputStream读取一个不存在的文件的时候会遇到这个异常
NotSerializableException: cn.tedu.serializable.Student
序列化
使用ObjectOutputStream
把对象进行序列化输出时,如果该对象未implements Serializable
,则会报些 错误