http://superwind.iteye.com/blog/425164
http://blessht.iteye.com/blog/908286 这篇文章很好
Throwable:Java中的异常类,包括内置的异常类以及自定义的异常类,都直接或者间接地继承至java.lang.Throwable类。
Error:Error类及其子类描述了java运行时系统的内部错误和资源耗尽错误。出现这样的错误的,除了通知用户,并接尽力使程序安全地终止之外,没有更好的办法。
Exception:Exception类的层次结构又分为三个分支:一个分支由RuntimeException派生,第二个分支由IOException派生,另外一个分支包含除这两类之外的所有异常类。
RuntimeException[运行时异常]:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。
[非运行时异常]编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
Java的编译器检查代码中所有的已检查的异常类是否都提供了异常处理程序,如果没有的话,将报错;代码中不需要显示的声明未检查的异常,因为这些异常要么Error,代表java运行时系统的内部错误;要么是RuntimeException,这种错误是由程序员引起的错误,完全可以修正代码解决。
throw:
主动throw一个Exception/系统自己抛出一个Exception,异常将会沿着调用链往上传,直到被一个合适的catch接住,或者被操作系统捕获。
public class test2 { public static void main(String[] args) { f1(); } private static void f1() { f2(); } private static void f2() { f3(); } private static void f3() throws RuntimeException { throw new RuntimeException(); } }
try catch:
try catch的try把可能抛出异常的位置括起来,catch则接住这种异常并进行“处理”。处理可以忽略这个异常(什么都不写);也可以增加异常信息再抛出;等等。
public class test2 { public static void main(String[] args) { f1(); } private static void f1() { f2(); } private static void f2() { try { f3(); } catch (RuntimeException e) { throw new RuntimeException("caught in f2()."); } } private static void f3() throws RuntimeException { throw new RuntimeException(); } }
throws:
函数名后增加throws关键字:对于未检查的异常【红色部分】,可写可不写,仅仅表示声明;
对于已检查的异常【黄色部分】,则必须强制写throws,并且在上一层,必须throws或者catch住进行处理。
public class test2 { public static void main(String[] args) { f1(); } private static void f1() { f2(); } private static void f2() { //这里IDE强制进行检查,或throws,或catch try { f3(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //throws是强制写的 private static void f3() throws IOException { throw new IOException(); } }
http://blog.csdn.net/ghost_t/article/details/5811485
//正确写法1 if (name != null && !name.equals("")) { //do something } //正确写法2 if (!"".equals(name)) {//将""写在前头,这样,不管name是否为null,都不会出错。 //do something }
//1,错误用法一: if (name == "") { //do something } //2,错误用法二: if (name.equals("")) { //do something } //3,错误用法三: if (!name.equals("")) { //do something }
更进一步,可以考虑《面试题:用Exception异常还是if判断》的感想 .
http://blog.csdn.net/m13666368773/article/details/7473638
// 注释一行
/* ...... */ 注释若干行
/** ...... */ 注释若干行,并写入 javadoc 文档