public static void main(String[] args) {
Class c = TestPrintStream1.class;
try {
Object o = c.newInstance();
if (o instanceof TestPrintStream1)
TestPrintStream1 tt = (TestPrintStream1) o;// 這裏爲什麼會報錯呢,說tt 和 TestPrintStream1不能解析
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
這個例子寫完後,你會發現,編譯器並不讓你通過,爲什麼呢,語法沒有問題啊,奇怪吧
可是在仔細看看,你會發現對於if()這個語句,我們是這樣來定義的
System.out.println("haha");
}
是不是在例子的代碼後面沒有加入{}
這個涉及到了一個問題:我們知道,在if後面如果只有一個語句,那麼我們會習慣的忽略{},可是在JAVA解析的時候
TestPrintStream1 tt = (TestPrintStream1) o;這個語句會被解析成
TestPrintStream1 tt; tt = new TestPrintStream1 (); 這樣,在if{}這個模塊中,只執行TestPrintStream1 tt;這個語句而不會執行
tt = new TestPrintStream1 (); ,解析tt = new TestPrintStream1 (); 的時候,就會找不到tt的定義了,因爲TestPrintStream1 tt;的作用域已經結束了
所以,在平時,一定要養成良好的代碼書寫規範,不僅僅會規約我們的書寫習慣,還會減少一些看起來很奇怪的問題