//: Human.java
// Catching Exception Hierarchies
class Annoyance extends Exception {}
class Sneeze extends Annoyance {}
public class Human {
public static void main(String[] args) {
try {
throw new Sneeze();
}
catch(Sneeze s) {
System.out.println("Caught Sneeze");
}
catch(Annoyance a) {
System.out.println("Caught Annoyance");
} catch(Exception e){
System.out.println("Caught Exception");
}
}
}
为什么会报错?class Annoyance extends Exception {}
class Sneeze extends Annoyance {}
public class Human {
public static void main(String[] args) {
try {
throw new Annoyance();
}
catch(Sneeze s) {
System.out.println("Caught Sneeze");
}
catch(Annoyance a) {
System.out.println("Caught Annoyance");
} catch(Exception e){
System.out.println("Caught Exception");
}
}
}
这样为什么有不报错呢?
Exception是Annoyance的父类不报错
而上例Annoyance是Sneeze的父类却会报错?
// Catching Exception Hierarchies
class Annoyance extends Exception {}
class Sneeze extends Annoyance {}
public class Human {
public static void main(String[] args) {
try {
throw new Sneeze();
}
catch(Sneeze s) {
System.out.println("Caught Sneeze");
}
catch(Annoyance a) {
System.out.println("Caught Annoyance");
} catch(Exception e){
System.out.println("Caught Exception");
}
}
}
为什么会报错?class Annoyance extends Exception {}
class Sneeze extends Annoyance {}
public class Human {
public static void main(String[] args) {
try {
throw new Annoyance();
}
catch(Sneeze s) {
System.out.println("Caught Sneeze");
}
catch(Annoyance a) {
System.out.println("Caught Annoyance");
} catch(Exception e){
System.out.println("Caught Exception");
}
}
}
这样为什么有不报错呢?
Exception是Annoyance的父类不报错
而上例Annoyance是Sneeze的父类却会报错?
解决方案 »
- java 正则零宽断言提取字符串
- 关于如何让SWT中的ProgressBar的进度条颜色多样化,顺带散分
- 正则表达符同时匹配两个以上字符的问题
- Collection 和 Collections的区别。
- 初学java这本书如何?
- 一个新手对于学习JAVA的迷茫,请大家多多指点!
- 急问! 帮我看看为什么没有输出,很短的代码
- 比较菜鸟的问题session.getValue("XX")和session.getAttribute("XX")有什么区别吗
- 有一个jar文件,我把它解压缩,然后修改了MANIFEST.MF里面的一些内容,我想把这些文件再从新打包城jar文件,怎么办??
- 有关java多线程的问题,闲人免进。
- 关于WinUser键盘鼠标钩子
- 多个类如何统一输出信息
第一个输出aught Sneeze,第二个例子输出Caught Annoyance
没问题啊。
第一个catch到Sneeze异常,所以打印Sneeze
第二个catch到Annoyance异常,所以打印Annoyance。
正确的程序
先捕获最精确地那个异常,然后范围慢慢扩大
比如
java.lang.Exception
java.io.IOException
java.nio.charset.CharacterCodingException进行IO操作的时候,有可能会出现编码错误,应该先捕获CharacterCodingException,然后 IOException, 最后是Exception.catch(CharacterCodingException){}
catch(IOException){}
catch(Exception)如果最上层的异常被捕获了,下面的就不会再运行了