abstract Java 關(guān)鍵字
abstract 關(guān)鍵字可以修改類(lèi)或方法。
abstract 類(lèi)可以擴(kuò)展(增加子類(lèi)),但不能直接實(shí)例化。
abstract 方法不在聲明它的類(lèi)中實(shí)現(xiàn),但必須在某個(gè)子類(lèi)中重寫(xiě)。
示例
public abstract class MyClass
{
}
public abstract String myMethod();
注釋
采用 abstract 方法的類(lèi)本來(lái)就是抽象類(lèi),并且必須聲明為 abstract。
abstract 類(lèi)不能實(shí)例化。
僅當(dāng) abstract 類(lèi)的子類(lèi)實(shí)現(xiàn)其超類(lèi)的所有 abstract 方法時(shí),才能實(shí)例化 abstract 類(lèi)的子類(lèi)。這種類(lèi)稱(chēng)為具體類(lèi),以區(qū)別于 abstract 類(lèi)。
如果 abstract 類(lèi)的子類(lèi)沒(méi)有實(shí)現(xiàn)其超類(lèi)的所有 abstract 方法,該子類(lèi)也是 abstract 類(lèi)。
abstract 關(guān)鍵字不能應(yīng)用于 static、private 或 final 方法,因?yàn)檫@些方法不能被重寫(xiě),因此,不能在子類(lèi)中實(shí)現(xiàn)。
final 類(lèi)的方法都不能是 abstract,因?yàn)?final 類(lèi)不能有子類(lèi)。
extends Java 關(guān)鍵字
extends 關(guān)鍵字用在 class 或 interface 聲明中,用于指示所聲明的類(lèi)或接口是其名稱(chēng)后跟有 extends 關(guān)鍵字的類(lèi)或接口的子類(lèi)。
示例
public class Rectangle extends Polygon
{
}
注釋
在上例中,Rectangle 類(lèi)繼承 Polygon 類(lèi)的所有 public 和 protected 變量和方法。
Rectangle 類(lèi)可以重寫(xiě) Polygon 類(lèi)的任何非 final 方法。
一個(gè)類(lèi)只能擴(kuò)展一個(gè)其他類(lèi)。
final Java 關(guān)鍵字
final 關(guān)鍵字可以應(yīng)用于類(lèi),以指示不能擴(kuò)展該類(lèi)(不能有子類(lèi))。
final 關(guān)鍵字可以應(yīng)用于方法,以指示不能重寫(xiě)任何子類(lèi)中的方法。
示例
public final class MyFinalClass
{
}
public class MyClass
{
public final String myFinalMethod()
{
<statements>
}
}
注釋
一個(gè)類(lèi)不能同時(shí)是 abstract 又是 final。abstract 意味著必須擴(kuò)展類(lèi),final 意味著不能擴(kuò)展類(lèi)。
一個(gè)方法不能同時(shí)是 abstract 又是 final。abstract 意味著必須重寫(xiě)方法,final 意味著不能重寫(xiě)方法。
finally Java 關(guān)鍵字
finally 關(guān)鍵字用來(lái)定義始終在 try-catch-finally 語(yǔ)句中執(zhí)行的塊。
finally 塊通常包含清理代碼,用在部分執(zhí)行 try 塊后恢復(fù)正常運(yùn)行。
示例
try
{
<可能引發(fā)異常的塊>
}
catch (<java.lang.Exception 或子類(lèi)> e)
{
<處理異常 e 的代碼>
}
finally
{
<有異?;驘o(wú)異常情況下都執(zhí)行的語(yǔ)句>
}
注釋
開(kāi)始和結(jié)束標(biāo)記 { 和 } 是 finally 子句語(yǔ)法的一部分,即使該子句只包含一個(gè)語(yǔ)句,也不能省略這兩個(gè)標(biāo)記。
每個(gè) try 塊都必須至少有一個(gè) catch 或 finally 子句。
如果執(zhí)行 try 塊的任何部分,不論是否出現(xiàn)異常,也不論 try 或 catch 塊是否包含 return、continue 或 break 語(yǔ)句,都一定會(huì)執(zhí)行 finally 塊中的代碼。
如果不出現(xiàn)異常,控件將跳過(guò) try 塊,進(jìn)入 finally 塊。
如果在執(zhí)行 try 塊期間出現(xiàn)異常,并且相應(yīng)的 catch 塊包含 break、continue 或 return 語(yǔ)句,控件將首先穿過(guò) finally 塊,之后再執(zhí)行 break、continue 或 return。
implements Java 關(guān)鍵字
implements 關(guān)鍵字在 class 聲明中使用,以指示所聲明的類(lèi)提供了在 implements 關(guān)鍵字后面的名稱(chēng)所指定的接口中所聲明的所有方法的實(shí)現(xiàn)。
示例
public class Truck implements IVehicle
{
}
注釋
在上例中,Truck 類(lèi)必須提供在 IVehicle 接口中所聲明的所有方法的實(shí)現(xiàn)。
否則,Truck 類(lèi)將是獨(dú)立的;它可以聲明其他方法和變量,并擴(kuò)展另一個(gè)類(lèi)。
一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。
instanceof Java 關(guān)鍵字
instanceof 關(guān)鍵字用來(lái)確定對(duì)象所屬的類(lèi)。
示例
if (node instanceof TreeNode)
{
<statements>
}
注釋
在上例中,如果 node 是 TreeNode 類(lèi)的實(shí)例,或者是 TreeNode 的子類(lèi)的實(shí)例,則 instanceof 表達(dá)式的值將為 true。
interface Java 關(guān)鍵字
interface 關(guān)鍵字用來(lái)聲明新的 Java 接口,接口是方法的集合。
接口是 Java 語(yǔ)言的一項(xiàng)強(qiáng)大功能。任何類(lèi)都可聲明它實(shí)現(xiàn)一個(gè)或多個(gè)接口,這意味著它實(shí)現(xiàn)了在這些接口中所定義的所有方法。
示例
public interface IPolygon
{
public float getArea();
public int getNumberOfSides();
public int getCircumference();
}
注釋
實(shí)現(xiàn)了接口的任何類(lèi)都必須提供在該接口中的所有方法的實(shí)現(xiàn)。
一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。
static Java 關(guān)鍵字
static 關(guān)鍵字可以應(yīng)用于內(nèi)部類(lèi)(在另一個(gè)類(lèi)中定義的類(lèi))、方法或字段(類(lèi)的成員變量)。
示例
public class MyPublicClass
{
public final static int MAX_OBJECTS = 100;
static int _numObjects = 0;
static class MyStaticClass
{
}
static int getNumObjects()
{
}
}
注釋
通常,static 關(guān)鍵字意味著應(yīng)用它的實(shí)體在聲明該實(shí)體的類(lèi)的任何特定實(shí)例外部可用。
static(內(nèi)部)類(lèi)可以被其他類(lèi)實(shí)例化和引用(即使它是頂級(jí)類(lèi))。在上面的示例中,另一個(gè)類(lèi)中的代碼可以實(shí)例化 MyStaticClass 類(lèi),方法是用包含它的類(lèi)名來(lái)限定其名稱(chēng),如 MyClass.MyStaticClass。
static 字段(類(lèi)的成員變量)在類(lèi)的所有實(shí)例中只存在一次。
可以從類(lèi)的外部調(diào)用 static 方法,而不用首先實(shí)例化該類(lèi)。這樣的引用始終包括類(lèi)名作為方法調(diào)用的限定符。在上面的示例中,MyClass 類(lèi)外部的代碼以 MyClass.getNumObjects() 的形式調(diào)用 getNumObjects() static 方法。
模式:
public final static <type> varName = <value>;
通常用于聲明可以在類(lèi)的外部使用的類(lèi)常量。在引用這樣的類(lèi)常量時(shí)需要用類(lèi)名加以限定。在上面的示例中,另一個(gè)類(lèi)可以用 MyClass.MAX_OBJECTS 形式來(lái)引用 MAX_OBJECTS 常量。
switch Java 關(guān)鍵字
switch 語(yǔ)句用于基于某個(gè)表達(dá)式選擇執(zhí)行多個(gè)代碼塊中的某一個(gè)。
示例
int arg = <some value>;
switch (arg)
{
case 1:
<statements>
break;
case 2:
<statements>
break;
default:
<statements>
break;
}
char arg = <some value>;
switch (arg)
{
case 'y':
case 'Y':
<statements>
break;
case 'n':
case 'N':
<statements>
break;
default:
<statements>
break;
}
注釋
switch 條件的計(jì)算結(jié)果必須等于 byte、char、short 或 int。
case 塊沒(méi)有隱式結(jié)束點(diǎn)。break 語(yǔ)句通常在每個(gè) case 塊末尾使用,用于退出 switch 語(yǔ)句。
如果沒(méi)有 break 語(yǔ)句,執(zhí)行流將進(jìn)入所有后面的 case 和/或 default 塊。
synchronized Java 關(guān)鍵字
synchronized 關(guān)鍵字可以應(yīng)用于方法或語(yǔ)句塊,并為一次只應(yīng)由一個(gè)線程執(zhí)行的關(guān)鍵代碼段提供保護(hù)。
示例
public class MyClass
{
public synchronized static String mySyncStaticMethod()
{
}
public synchronized String mySyncMethod()
{
}
{
public class MyOtherClass
{
Object someObj;
public String myMethod()
{
<statements>
synchronized (someObj)
{
<statements affecting someObj>
}
}
}
注釋
synchronized 關(guān)鍵字可防止代碼的關(guān)鍵代碼段一次被多個(gè)線程執(zhí)行。
如果應(yīng)用于靜態(tài)方法(如上例中的 MySyncStaticMethod),那么,當(dāng)該方法一次由一個(gè)線程執(zhí)行時(shí),整個(gè)類(lèi)將被鎖定。
如果應(yīng)用于實(shí)例方法(如上例中的 MySyncMethod),那么,當(dāng)該方法一次由一個(gè)線程訪問(wèn)時(shí),該實(shí)例將被鎖定。
如果應(yīng)用于對(duì)象或數(shù)組,當(dāng)關(guān)聯(lián)的代碼塊一次由一個(gè)線程執(zhí)行時(shí),對(duì)象或數(shù)組將被鎖定。
throw Java 關(guān)鍵字
throw 關(guān)鍵字用于引發(fā)異常。
示例
import java.io.IOException;
public class MyClass
{
public method readFile(String filename) throws IOException
{
<statements>
if (error)
{
throw new IOException("error reading file");
}
}
}
注釋
throw 語(yǔ)句將 java.lang.Throwable 作為參數(shù)。Throwable 在調(diào)用棧中向上傳播,直到被適當(dāng)?shù)?catch 塊捕獲。
引發(fā)非 RuntimeException 異常的任何方法還必須在方法聲明中使用 throws 修飾符來(lái)聲明它引發(fā)的異常。
throws Java 關(guān)鍵字
throws 關(guān)鍵字可以應(yīng)用于方法,以便指出方法引發(fā)了特定類(lèi)型的異常。
示例
import java.io.IOException;
public class MyClass
{
public method readFile(String filename) throws IOException
{
<statements>
if (error)
{
throw new IOException("error reading file");
}
}
}
注釋
throws 關(guān)鍵字將逗號(hào)分隔的 java.lang.Throwables 列表作為參數(shù)。
引發(fā)非 RuntimeException 異常的任何方法還必須在方法聲明中使用 throws 修飾符來(lái)聲明它引發(fā)的異常。
要在 try-catch 塊中包含帶 throws 子句的方法的調(diào)用,必須提供該方法的調(diào)用者。
transient Java 關(guān)鍵字
transient 關(guān)鍵字可以應(yīng)用于類(lèi)的成員變量,以便指出該成員變量不應(yīng)在包含它的類(lèi)實(shí)例已序列化時(shí)被序列化。
示例
public class MyClass
{
private transient String password;
}