java解惑中的—異常,簡單程序,但容易錯(cuò)
下面三個(gè)程序每一個(gè)都會(huì)打印些什么? 不要假設(shè)他們都可以編譯通過:
第一個(gè)程序:
import java.io.IOException;

public class Arcane1 {
public static void main(String[] args) {
try{
System.out.println("hello lsbwahaha");
}catch(IOException e){
System.out.println("I've never seen println fail!");
}
}
}
第二個(gè)程序:
第三個(gè)程序:
interface Type1{
void f() throws CloneNotSupportedException;
}

interface Type2{
void f() throws InterruptedException;
}

interface Type3 extends Type2,Type1{}

public class Arcane3 implements Type3 {
public void f(){
System.out.println("hello lsbwahaha");
}
public static void main(String[] args) {
Type3 t3 = new Arcane3();
t3.f();
}
}
分析第一個(gè)程序:
看起來應(yīng)該會(huì)打印出hello lsbwahaha,這個(gè)程序不能編譯,因?yàn)閜ringln犯法沒有會(huì)拋出任何受檢查異常,
而IOException 卻正是一個(gè)受檢查異常。
語言規(guī)范中描述:如果一個(gè)catch子句要捕獲一個(gè)類型為E的受檢查異常,而其相對(duì)應(yīng)的try子句不能拋出E的某種子類型的異常,
那么這就是一個(gè)編譯期錯(cuò)誤。
分析第二個(gè)程序:
基于第一個(gè)程序,那么第二個(gè)程序應(yīng)該不可以編譯,但是它卻可以。它之所以可以編譯,是因?yàn)樗ㄒ坏腸atch子句檢查了Exception
捕獲Exception或Throwable的catch子句是合法的,不管于其相對(duì)應(yīng)的try子句的內(nèi)容為何。 這個(gè)程序什么都不會(huì)打印。
分析第三個(gè)程序:
看起來它也不能編譯。 如果它能編譯,那是為什么呢?
結(jié)果居然能編譯通過。。。。 這個(gè)到底是為什么呢?、、、、、、、
Type3 中 因?yàn)槊恳粋€(gè)接口都限制了方法f可以拋出的受檢查異常集合。一個(gè)方法可以拋出的受檢查異常集合是它所適用的所有類型聲明
要拋出的受檢查異常交集,而不是并集。
第一個(gè)程序:











第二個(gè)程序:
1
public class Arcane2 {
2
public static void main(String[] args) {
3
try{
4
//you have noting nice to say
5
}catch(Exception e){
6
System.out.println("this can't happen");
7
}
8
}
9
}

2

3

4

5

6

7

8

9

第三個(gè)程序:



















分析第一個(gè)程序:
看起來應(yīng)該會(huì)打印出hello lsbwahaha,這個(gè)程序不能編譯,因?yàn)閜ringln犯法沒有會(huì)拋出任何受檢查異常,
而IOException 卻正是一個(gè)受檢查異常。
語言規(guī)范中描述:如果一個(gè)catch子句要捕獲一個(gè)類型為E的受檢查異常,而其相對(duì)應(yīng)的try子句不能拋出E的某種子類型的異常,
那么這就是一個(gè)編譯期錯(cuò)誤。
分析第二個(gè)程序:
基于第一個(gè)程序,那么第二個(gè)程序應(yīng)該不可以編譯,但是它卻可以。它之所以可以編譯,是因?yàn)樗ㄒ坏腸atch子句檢查了Exception
捕獲Exception或Throwable的catch子句是合法的,不管于其相對(duì)應(yīng)的try子句的內(nèi)容為何。 這個(gè)程序什么都不會(huì)打印。
分析第三個(gè)程序:
看起來它也不能編譯。 如果它能編譯,那是為什么呢?
結(jié)果居然能編譯通過。。。。 這個(gè)到底是為什么呢?、、、、、、、
Type3 中 因?yàn)槊恳粋€(gè)接口都限制了方法f可以拋出的受檢查異常集合。一個(gè)方法可以拋出的受檢查異常集合是它所適用的所有類型聲明
要拋出的受檢查異常交集,而不是并集。
posted on 2009-04-07 20:51 胡鵬 閱讀(200) 評(píng)論(0) 編輯 收藏 所屬分類: java基礎(chǔ)