异常:指的是程序在执行过程中。出现的非正常的情况,如果不处理最终会导致JVM
的非正常停止。
为保证程序正常执行,代码必须对可能出现的异常进行处理
说明:
1)异常指的并不是语法错误;语法错了,编译不通过,不会产生字节码文件,根本不能运行。
2)异常也不是指逻辑代码错误,而没有得到想要的结果;例如:求a与b的和,你写成了a-b;
3)充分发挥异常的优点,可以提高程序的可读性 可靠性和可维护性。
分类:按程度
1)Error:虚拟机也无法处理的严重错误
2)Exceptioin:一般性问题, 通常可以处理
异常组合:
try{
// 可能会抛出异常的代码;
}catch(Exception a){
throw new Exception(a); // throw 抛出异常
}
try{
// 可能会抛出异常的代码;
}catch( ){
System.out.println("这里有一个异常!");
}finally{
// 最后一定会执行的代码;
}
try{
// 可能会抛出异常的代码;
}finally{
// 最后一定会执行的代码;
}
// throws 将异常抛出; 不在方法中处理异常,将异常处理的责任传递给方法的调用者
public void myMethod() throws Exception {
// ...
if (someCondition) {
throw new Exception("An error occurred");
}
// ...
}
对一部分代码进行测试检查,确保代码的正确性
步骤:
①选中当前工程 -> 右键 -> build path - add libraries - JUnit 4 - 下一步。
②创建Java类,进行单元测试。
Java类要求:此类是public 类,此类公共的无参构造器。
③此类中声明单元测试方法
单元测试方法:方法的权限是public,没有返回值,没有形参。
④此单元测试方法上需要声明注解:@Test 并在单元测试类中导入test包。
// 例:
import org.junit.test;
public class JUnitTest{
@Test
public void testEquals( ){
// 方法体
}
}
import org.junit.test;
public class JUnitTest{
@Test
public void testEquals( ){
// 方法体
}
}
⑤声明好单元测试方法后,就可以在方法体内测试相关的代码。
⑥写完代码以后,左键双击单元测试方法名,右键:run as - JUnit Test
说明:
如果执行结果没有任何异常,绿色条形框
如果执行结果出现异常,红色条形框
调试程序方式:
① System.out.println();
② Debug
调试
运行编写好的程序时,可能出现的几种情况:
情况1:没有任何bug,程序执行正确!如果出现如下的三种情况,都有必要使用debug
情况2:运行以后,出现了错误或异常信息。但是通过日志文件或控制台,显示了异常信息的位置。
情况3:运行以后,得到了结果,但是结果不是我们想要的。
情况4:运行以后,得到了结果,结果大概率是我们想要的。但是多次运行的话,可能会出现不是我们想要的情况。比如:多线程情况下,处理线程安全问题
Debug的步骤
Debug(调试)程序步骤如下:
1)添加断点
在源代码文件中,在想要设置断点的代码行的前面的标记行处,单击鼠标左键就可以设置断点;
在相同位置再次单击即可取消断点。
2)启动调试
IDEA提供多种方式来启动程序(Launch)的调试,分别是通过菜单(Run –> Debug)、图标 “绿色臭虫” 等
3)单步执行
4)观察变量和执行流程,找到并解决问题
调试操作
IDEA断点调试
操作按钮 | 说明 | 作用 | 快捷键 |
---|---|---|---|
Step into | 跳入 | 进入当前行所调用的方法中 | F7 |
Step over | 跳过 | 执行完当前行的语句,进入下一行 | F8 |
Step out | 跳回 | 执行完当前行所在的方法,进入下一行 | Shift + F8 |
evaluate expression | 计算表达式 | 查询表达式(变量、方法) | Alt + F8 |
Resume Program | 恢复 | 进入下一个断点 | F9 |
Run to Cursor | 直接跳到光标处继续调试 | Alt + F9 | |
Force Step Into | 跳入 | 可以进入一个核心类库方法 | Alt +Shift + F7 |
View Breakpoints | 查看 | 查看所有断点 | Ctrl + Shift + F8 |
Mute Breakpoints | 使得当前代码后面所有的断点失效, 执行到底 | ||
Stop | 结束 | 结束调试 | Ctrl + F2 |
在Debug过程中,可以实时下断点
行断点
断点打在代码所在行的标记行位置。
执行到此行时,会停下来。
方法断点
断点打在方法开始所在的行,当进入方法时,断点可以被唤醒。
也可以设置在方法退出时,断点也被唤醒
在多态的场景下,在父类或接口的方法上打断点,会自动调入到子类或实现类的方法
字段断点
断点打在字段所在的行
在类的属性声明上打断点,默认对属性的修改操作进行监控
条件断点
断点打在条件语句所在的行
只有在指定的条件为真时才会触发暂停,可以用于调试只在特定条件下出现的问题。
异常断点
断点打在异常语句所在的行
对异常进行跟踪。如果程序出现指定异常,程序就会执行断点,自动停住。