1. 异常分类
所有的异常派生于Throwable
1.1 Error: 系统内部错误或者资源耗尽
1.2 Exception
1.2.1 RuntimeException: 类型转化错误、数组越界、访问空指针
1.2.2 其他异常: IOException等
1.3 RuntimeException和Error为未检查异常、其他称为已检查异常
2. 声明异常
public FileInputStream(String name) throws FileNotFoundException
子类throws的异常不能超过父类
3. 捕获异常
try{} catch(){}
4. 捕获并再次抛出异常
try{
access the database
} catch(SQLException e) {
Throwable se = new ServletException("database error");
se.setCause(e);
throw se;
}
5. finally语句始终都会执行,如果try和finally中都存在return语句,那么最终返回finally中的return
6. 堆栈跟踪
6.1 在JDK1.4之前,使用printStackTrace方法
6.2 在JDK1.4及之后,使用StackTraceElement对象数组
Throwable t = new Throwable();
StackTraceElement[] frames = t.getStackTrace();
for (StackTraceElement frame : frames) {print something;}
7. 断言: 断言机制允许在测试期间向代码中插入一些检查语句,当代码发布,插入的检测语句将会自动移走
7.1 assert x >= 0; 检查是否为非负数 或者 assert x >=0 : x; 将x的实际值传递给AssertionError对象,在后面显示出来
7.2 启动断言: java -enableassertions MyApp 或者 java -ea MyApp
8. Java调试技巧
8.1 -verbose: 运行Java虚拟机,观察类的加载过程
8.2 javac -Xlint 对一些普遍代码问题进行检查
8.3 监控应用程序,查看内存消耗、线程使用、类加载情况
java -Dcom.sun.management.jmxremote MyProgram.java // 启动虚拟机
jconsole processID // 运行jconsole,在Win下,使用任务管理器查看processID,linux下使用ps查看