明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

Java FAQ(4)

[摘要]四、 關(guān)鍵字篇Q4.1 java里面怎么定義宏?答:java不支持宏,因?yàn)楹甏鷵Q不能保證類型安全。如果你需要定義常量,可以將它定義為某個(gè)類的static final成員。參見Q4.2和Q4.6。Q4.2 java里面沒法用const。答:你可以用final關(guān)鍵字。例如 final int m ...

四、 關(guān)鍵字篇

Q4.1  java里面怎么定義宏?
答:java不支持宏,因?yàn)楹甏鷵Q不能保證類型安全。如果你需要定義常量,可以將它定義為某個(gè)類的static final成員。參見Q4.2和Q4.6。


Q4.2  java里面沒法用const。
答:你可以用final關(guān)鍵字。例如 final int m = 9。被聲明為final的變量不能被再次賦值。唯一的例外是所謂blank final,如下例所示:
public class MyClass1 {
  private final int a = 3;
    private final int b; // blank final

    public MyClass1() {
        a = 5; // 不合法,final變量不能被再次賦值。
        b = 4; // 合法,這是b第一次被賦值。
        b = 6; // 不合法,b不能被再次賦值。
    }
}
final也可以用于聲明方法或類,被聲明為final的方法或類不能被繼承。
注意const是java的保留字以備擴(kuò)充。

Q4.3  java里面也不能用goto。
答:甚至在面向過程的語言中你也可以完全不用goto。請檢查你的程序流程是否合理。如果你需要從多層循環(huán)中迅速跳出,java增強(qiáng)了(和C++相比)break和continue的功能,支持label。
例如:
outer : 
while( ... )
{
    inner :
    for( ... )
    {
           ...   break inner; ...
           ... continue outer; ...
    }
}
和const一樣,goto也是java的保留字以備擴(kuò)充。

Q4.4  java里面能不能重載操作符?
答:不能。String的+號是唯一一個(gè)內(nèi)置的重載操作符。你可以通過定義接口和方法來實(shí)現(xiàn)類似功能。

Q4.5  我new了一個(gè)對象,但是沒法delete掉它。
答:java有自動內(nèi)存回收機(jī)制,即所謂Garbarge Collection。你不需要?jiǎng)h除對象。你再也不用擔(dān)心指針錯(cuò)誤,內(nèi)存溢出了。

Q4.6  我想知道為什么main方法必須被聲明為public static?為什么在main方法中不能調(diào)用非static成員?


答:聲明為public是為了這個(gè)方法可以被外部調(diào)用,詳情見Q5.4。
static是為了將某個(gè)成員變量/方法關(guān)聯(lián)到類(class)而非實(shí)例(instance)。你不需要?jiǎng)?chuàng)建一個(gè)對象就可以直接使用這個(gè)類的static成員,因而在static成員中不能調(diào)用非static成員,因?yàn)楹笳呤顷P(guān)聯(lián)到對象實(shí)例(instance)的。在A類中調(diào)用B類的static成員可以使用B.staticMember的寫法。注意一個(gè)類的static成員變量是唯一的,被所有該類對象所共享的,在多線程程序設(shè)計(jì)
中尤其要謹(jǐn)慎小心。類的static成員是在類第一次被JRE裝載的時(shí)候初始化的。你可以使用如下方法來使用非static成員:
public class A
{
    private void someMethod() //非static成員
    {}
    public static void main(String args)
    {
         A a = new A();  //創(chuàng)建一個(gè)對象實(shí)例
         a.someMethod();  //現(xiàn)在你可以使用非static方法了
    }
}


Q4.7  throw和throws有什么不同?


答:throws用于方法聲明中,聲明一個(gè)方法會拋出哪些異常。而throw是在方法體中實(shí)際執(zhí)行拋出異常的動作。如果你在方法中throw一個(gè)異常,卻沒有在方法聲明中聲明之,編譯器會報(bào)錯(cuò)。注意Error和RuntimeException的子類是例外,無需特別聲明。

Q4.8  什么是異常?


答:異常最早在Ada語言中引入,用于在程序中動態(tài)處理錯(cuò)誤并恢復(fù)。你可以在方法中攔截底層異常并處理之,也可以拋給更高層的模塊去處理。你也可以拋出自己的異常指示發(fā)生了某些不正常情況。常見的攔截處理代碼如下:
try
{
    ......//以下是可能發(fā)生異常的代碼
        ...... //異常被你或低層API拋出,執(zhí)行流程中斷并轉(zhuǎn)向攔截代碼。
        ...... 
}
catch(Exception1 e) //如果Exception1是Exception2的子類并要做特別處理,應(yīng)排在前面
{
  //發(fā)生Exception1時(shí)被該段攔截
}
catch(Exception2 e)
{
  //發(fā)生Exception2時(shí)被該段攔截
}
finally //這是可選的
{
   //無論異常是否發(fā)生,均執(zhí)行此段代碼
   //即使在catch段中又向外拋出了新的exception,finally段也會得到執(zhí)行。
}





標(biāo)簽:Java FAQ(4) 

相關(guān)文章