類(lèi)的更多方面
本節(jié)介紹依賴(lài)于使用對(duì)象引用的類(lèi)的更多方面以及你在前面的對(duì)象部分中了解到的點(diǎn)運(yùn)算符。
從方法返回值方法返回到調(diào)用它的代碼。
完成方法中的所有語(yǔ)句。
到達(dá)return語(yǔ)句。
或拋出異常(稍后介紹)。
以先發(fā)生者為準(zhǔn)。
你在方法聲明中聲明方法的返回類(lèi)型,在方法體內(nèi),使用return語(yǔ)句返回值。
聲明為void的任何方法都不返回值,它不需要包含return語(yǔ)句,但它可能會(huì)這樣做,在這種情況下,可以使用return語(yǔ)句分支出控制流程塊并退出該方法,并且可以像這樣使用:
return;
如果你嘗試從聲明為void的方法返回值,則會(huì)出現(xiàn)編譯器錯(cuò)誤。
任何未聲明為void的方法都必須包含帶有相應(yīng)返回值的return語(yǔ)句,如下所示:
return returnValue;
返回值的數(shù)據(jù)類(lèi)型必須與方法聲明的返回類(lèi)型匹配,你不能從聲明為返回布爾值的方法返回一個(gè)整數(shù)值。
在對(duì)象部分中討論的Rectangle類(lèi)中的getArea()方法返回一個(gè)整數(shù):
// a method for computing the area of the rectangle public int getArea() { return width * height; }
此方法返回表達(dá)式width * height求值的整數(shù)。
getArea方法返回基本類(lèi)型,方法還可以返回引用類(lèi)型,例如,在一個(gè)操作Bicycle對(duì)象的程序中,我們可能有這樣的方法:
public Bicycle seeWhosFastest(Bicycle myBike, Bicycle yourBike, Environment env) { Bicycle fastest; // code to calculate which bike is // faster, given each bike"s gear // and cadence and given the // environment (terrain and wind) return fastest; }返回類(lèi)或接口
如果此部分讓你感到困惑,請(qǐng)?zhí)^(guò)它并在完成接口和繼承課程后返回該部分。
當(dāng)一個(gè)方法使用類(lèi)名作為其返回類(lèi)型時(shí),例如whosFastest,返回對(duì)象的類(lèi)型類(lèi)必須是返回類(lèi)型的子類(lèi)或確切的類(lèi)。假設(shè)你有一個(gè)類(lèi)層次結(jié)構(gòu),其中ImaginaryNumber是java.lang.Number的子類(lèi),而java.lang.Number又是Object的子類(lèi),如下圖所示。
現(xiàn)在假設(shè)你有一個(gè)聲明為返回Number的方法:
public Number returnANumber() { ... }
returnANumber方法可以返回ImaginaryNumber而不是Object,ImaginaryNumber是一個(gè)Number,因?yàn)樗?b>Number的子類(lèi),但是,Object不一定是Number — 它可以是String或其他類(lèi)型。
你可以重寫(xiě)方法并定義它以返回原始子類(lèi)的方法,如下所示:
public ImaginaryNumber returnANumber() { ... }
這種稱(chēng)為協(xié)變返回類(lèi)型的技術(shù)意味著允許返回類(lèi)型在與子類(lèi)相同的方向上變化。
注意:你還可以使用接口名稱(chēng)作為返回類(lèi)型,在這種情況下,返回的對(duì)象必須實(shí)現(xiàn)指定的接口。使用this關(guān)鍵字
在實(shí)例方法或構(gòu)造函數(shù)中,這是對(duì)當(dāng)前對(duì)象的引用 — 正在調(diào)用其方法或構(gòu)造函數(shù)的對(duì)象,你可以使用此方法從實(shí)例方法或構(gòu)造函數(shù)中引用當(dāng)前對(duì)象的任何成員。
將this與字段一起使用使用this關(guān)鍵字的最常見(jiàn)原因是因?yàn)樽侄伪环椒ɑ驑?gòu)造函數(shù)參數(shù)遮蔽。
例如,Point類(lèi)就是這樣寫(xiě)的:
public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; } }
但它可能是這樣寫(xiě)的:
public class Point { public int x = 0; public int y = 0; //constructor public Point(int x, int y) { this.x = x; this.y = y; } }
構(gòu)造函數(shù)的每個(gè)參數(shù)都會(huì)影響對(duì)象的一個(gè)??字段 — 構(gòu)造函數(shù)內(nèi)部的x是構(gòu)造函數(shù)的第一個(gè)參數(shù)的本地副本,要引用Point字段x,構(gòu)造函數(shù)必須使用this.x。
將this與構(gòu)造函數(shù)一起使用在構(gòu)造函數(shù)中,你還可以使用this關(guān)鍵字來(lái)調(diào)用同一個(gè)類(lèi)中的另一個(gè)構(gòu)造函數(shù),這樣做稱(chēng)為顯式構(gòu)造函數(shù)調(diào)用,這是另一個(gè)Rectangle類(lèi),其實(shí)現(xiàn)與對(duì)象部分中的實(shí)現(xiàn)不同。
public class Rectangle { private int x, y; private int width, height; public Rectangle() { this(0, 0, 1, 1); } public Rectangle(int width, int height) { this(0, 0, width, height); } public Rectangle(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } ... }
該類(lèi)包含一組構(gòu)造函數(shù),每個(gè)構(gòu)造函數(shù)初始化一些或所有矩形的成員變量,構(gòu)造函數(shù)為任何成員變量提供默認(rèn)值,其初始值不是由參數(shù)提供的。例如,無(wú)參數(shù)構(gòu)造函數(shù)在坐標(biāo)0,0處創(chuàng)建1x1矩形。雙參數(shù)構(gòu)造函數(shù)調(diào)用四參數(shù)構(gòu)造函數(shù),傳遞寬度和高度,但始終使用0,0坐標(biāo),和之前一樣,編譯器根據(jù)參數(shù)的數(shù)量和類(lèi)型確定要調(diào)用的構(gòu)造函數(shù)。
如果存在,則另一個(gè)構(gòu)造函數(shù)的調(diào)用必須是構(gòu)造函數(shù)中的第一行。
控制對(duì)類(lèi)成員的訪問(wèn)訪問(wèn)級(jí)別修飾符確定其他類(lèi)是否可以使用特定字段或調(diào)用特定方法,訪問(wèn)控制有兩個(gè)級(jí)別:
在頂級(jí) — public或package-private(沒(méi)有顯式修飾符)。
在成員級(jí)別 — public、private、protected或package-private(無(wú)顯式修飾符)。
可以使用修飾符public聲明一個(gè)類(lèi),在這種情況下,該類(lèi)對(duì)于所有類(lèi)都可見(jiàn),如果一個(gè)類(lèi)沒(méi)有修飾符(默認(rèn),也稱(chēng)為包私有),它只在自己的包中可見(jiàn)(包是相關(guān)類(lèi)的命名組 — 你將在后面的課程中了解它們)。
在成員級(jí)別,你也可以使用public修飾符或無(wú)修飾符(package-private),就像使用頂級(jí)類(lèi)一樣,并且具有相同的含義。對(duì)于成員,還有兩個(gè)額外的訪問(wèn)修飾符:private和protected,private修飾符指定只能在其自己的類(lèi)中訪問(wèn)該成員,protected修飾符指定只能在其自己的包中訪問(wèn)該成員(與package-private一樣),此外,還可以在另一個(gè)包中通過(guò)其類(lèi)的子類(lèi)訪問(wèn)該成員。
下表顯示了每個(gè)修飾符允許的成員訪問(wèn)權(quán)限。
修飾符 | 類(lèi) | 包 | 子類(lèi) | 所有 |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y | N |
無(wú)修飾符 | Y | Y | N | N |
private | Y | N | N | N |
第一個(gè)數(shù)據(jù)列指示類(lèi)本身是否可以訪問(wèn)由訪問(wèn)級(jí)別定義的成員,如你所見(jiàn),類(lèi)始終可以訪問(wèn)自己的成員,第二列指示與該類(lèi)相同的包中的類(lèi)(不管父子關(guān)系)可以訪問(wèn)該成員,第三列指示在此包外聲明的該類(lèi)的子類(lèi)是否可以訪問(wèn)該成員,第四列指示是否所有類(lèi)都可以訪問(wèn)該成員。
訪問(wèn)級(jí)別以?xún)煞N方式影響你,首先,當(dāng)你使用來(lái)自其他源的類(lèi)(例如Java平臺(tái)中的類(lèi))時(shí),訪問(wèn)級(jí)別將確定你自己的類(lèi)可以使用的那些類(lèi)的哪些成員,其次,當(dāng)你編寫(xiě)一個(gè)類(lèi)時(shí),你需要確定每個(gè)成員變量和類(lèi)中的每個(gè)方法應(yīng)具有的訪問(wèn)級(jí)別。
讓我們看一下類(lèi)的集合,看看訪問(wèn)級(jí)別如何影響可見(jiàn)性,下圖顯示了此示例中的四個(gè)類(lèi)以及它們之間的關(guān)系。
下表顯示了Alpha類(lèi)的成員對(duì)于可應(yīng)用于它們的每個(gè)訪問(wèn)修飾符的可見(jiàn)性。
修飾符 | Alpha | Beta | Alphasub | Gamma |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y | N |
無(wú)修飾符 | Y | Y | N | N |
private | Y | N | N | N |
選擇訪問(wèn)級(jí)別的提示:
如果其他程序員使用你的類(lèi),你希望確保不會(huì)發(fā)生濫用錯(cuò)誤,訪問(wèn)級(jí)別可以幫助你執(zhí)行此操作。
使用對(duì)特定成員有意義的最嚴(yán)格的訪問(wèn)級(jí)別,除非你有充分的理由不使用private。
避免除常量之外的public字段(本教程中的許多示例都使用public字段,這可能有助于簡(jiǎn)明地說(shuō)明一些要點(diǎn),但不建議用于生產(chǎn)代碼),public字段傾向于將你鏈接到特定實(shí)現(xiàn),并限制你更改代碼的靈活性。
了解類(lèi)成員在本節(jié)中,我們將討論使用static關(guān)鍵字創(chuàng)建屬于類(lèi)的字段和方法,而不是類(lèi)的實(shí)例。
類(lèi)變量當(dāng)從同一個(gè)類(lèi)藍(lán)圖創(chuàng)建許多對(duì)象時(shí),它們每個(gè)都有自己不同的實(shí)例變量副本,在Bicycle類(lèi)的情況下,實(shí)例變量是cadence、gear和speed,每個(gè)Bicycle對(duì)象都有這些變量自己的值,這些變量存儲(chǔ)在不同的內(nèi)存位置。
有時(shí),你希望擁有所有對(duì)象共有的變量,這是通過(guò)static修飾符完成的,在聲明中具有static修飾符的字段稱(chēng)為靜態(tài)字段或類(lèi)變量,它們與類(lèi)相關(guān)聯(lián),而不是與任何對(duì)象相關(guān)聯(lián),該類(lèi)的每個(gè)實(shí)例共享一個(gè)類(lèi)變量,該變量位于內(nèi)存中的一個(gè)固定位置,任何對(duì)象都可以更改類(lèi)變量的值,但也可以在不創(chuàng)建類(lèi)實(shí)例的情況下操作類(lèi)變量。
例如,假設(shè)你要?jiǎng)?chuàng)建多個(gè)Bicycle對(duì)象并為每個(gè)對(duì)象分配一個(gè)序列號(hào),從第一個(gè)對(duì)象開(kāi)始為1,此ID號(hào)對(duì)于每個(gè)對(duì)象都是唯一的,因此是一個(gè)實(shí)例變量。同時(shí),你需要一個(gè)字段來(lái)跟蹤已創(chuàng)建的Bicycle對(duì)象的數(shù)量,以便你知道要分配給下一個(gè)對(duì)象的ID,這樣的字段與任何單個(gè)對(duì)象無(wú)關(guān),而與整個(gè)類(lèi)有關(guān),為此,你需要一個(gè)類(lèi)變量numberOfBicycles,如下所示:
public class Bicycle { private int cadence; private int gear; private int speed; // add an instance variable for the object ID private int id; // add a class variable for the // number of Bicycle objects instantiated private static int numberOfBicycles = 0; ... }
類(lèi)變量由類(lèi)名本身引用,如:
Bicycle.numberOfBicycles
這清楚地表明它們是類(lèi)變量。
注意:你也可以使用對(duì)象引用來(lái)引用靜態(tài)字段myBike.numberOfBicycles,但這是不鼓勵(lì)的,因?yàn)樗鼪](méi)有說(shuō)明它們是類(lèi)變量。
你可以使用Bicycle構(gòu)造函數(shù)來(lái)設(shè)置id實(shí)例變量并增加numberOfBicycles類(lèi)變量:
public class Bicycle { private int cadence; private int gear; private int speed; private int id; private static int numberOfBicycles = 0; public Bicycle(int startCadence, int startSpeed, int startGear){ gear = startGear; cadence = startCadence; speed = startSpeed; // increment number of Bicycles // and assign ID number id = ++numberOfBicycles; } // new method to return the ID instance variable public int getID() { return id; } ... }類(lèi)方法
Java編程語(yǔ)言支持靜態(tài)方法以及靜態(tài)變量,靜態(tài)方法在其聲明中具有static修飾符,應(yīng)該使用類(lèi)名調(diào)用,而不需要?jiǎng)?chuàng)建類(lèi)的實(shí)例,如:
ClassName.methodName(args)
注意:你也可以使用對(duì)象引用來(lái)引用靜態(tài)方法instanceName.methodName(args),但這是不鼓勵(lì)的,因?yàn)樗鼪](méi)有說(shuō)明它們是類(lèi)方法。
靜態(tài)方法的常見(jiàn)用途是訪問(wèn)靜態(tài)字段,例如,我們可以向Bicycle類(lèi)添加一個(gè)靜態(tài)方法來(lái)訪問(wèn)numberOfBicycles靜態(tài)字段:
public static int getNumberOfBicycles() { return numberOfBicycles; }
并非所有實(shí)例和類(lèi)變量和方法的組合都是允許的:
實(shí)例方法可以直接訪問(wèn)實(shí)例變量和實(shí)例方法。
實(shí)例方法可以直接訪問(wèn)類(lèi)變量和類(lèi)方法。
類(lèi)方法可以直接訪問(wèn)類(lèi)變量和類(lèi)方法。
類(lèi)方法不能直接訪問(wèn)實(shí)例變量或?qū)嵗椒?— 它們必須使用對(duì)象引用,此外,類(lèi)方法不能使用this關(guān)鍵字,因?yàn)闆](méi)有要引用的實(shí)例。
常量static修飾符與final修飾符結(jié)合使用,也用于定義常量,final修飾符表示此字段的值不能更改。
例如,以下變量聲明定義了一個(gè)名為PI的常量,其值是pi的近似值(圓周長(zhǎng)與直徑之比):
static final double PI = 3.141592653589793;
以這種方式定義的常量不能重新分配,如果你的程序嘗試這樣做,則它是編譯時(shí)錯(cuò)誤,按照慣例,常量值的名稱(chēng)拼寫(xiě)為大寫(xiě)字母,如果名稱(chēng)由多個(gè)單詞組成,則單詞由下劃線(_)分隔。
注意:如果將基本類(lèi)型或字符串定義為常量并且該值在編譯時(shí)已知,則編譯器會(huì)將代碼中的常量名稱(chēng)替換為其值,這稱(chēng)為編譯時(shí)常量。如果外部世界中常量的值發(fā)生變化(例如,如果立法規(guī)定pi實(shí)際上應(yīng)該是3.975),則需要重新編譯使用此常量來(lái)獲取當(dāng)前值的任何類(lèi)。Bicycle類(lèi)
在本節(jié)中進(jìn)行了所有修改之后,Bicycle類(lèi)現(xiàn)在是:
public class Bicycle { private int cadence; private int gear; private int speed; private int id; private static int numberOfBicycles = 0; public Bicycle(int startCadence, int startSpeed, int startGear) { gear = startGear; cadence = startCadence; speed = startSpeed; id = ++numberOfBicycles; } public int getID() { return id; } public static int getNumberOfBicycles() { return numberOfBicycles; } public int getCadence() { return cadence; } public void setCadence(int newValue) { cadence = newValue; } public int getGear(){ return gear; } public void setGear(int newValue) { gear = newValue; } public int getSpeed() { return speed; } public void applyBrake(int decrement) { speed -= decrement; } public void speedUp(int increment) { speed += increment; } }初始化字段
如你所見(jiàn),你通常可以在其聲明中為字段提供初始值:
public class BedAndBreakfast { // initialize to 10 public static int capacity = 10; // initialize to false private boolean full = false; }
當(dāng)初始化值可用并且初始化可以放在一行上時(shí),這很有效,然而,這種形式的初始化由于其簡(jiǎn)單性而具有局限性,如果初始化需要一些邏輯(例如,錯(cuò)誤處理或for循環(huán)來(lái)填充復(fù)雜數(shù)組),則簡(jiǎn)單的賦值是不合適的。實(shí)例變量可以在構(gòu)造函數(shù)中初始化,其中可以使用錯(cuò)誤處理或其他邏輯,為了為類(lèi)變量提供相同的功能,Java編程語(yǔ)言包括靜態(tài)初始化塊。
注意:沒(méi)有必要在類(lèi)定義的開(kāi)頭聲明字段,盡管這是最常見(jiàn)的做法,只有在使用它們之前才需要聲明和初始化它們。靜態(tài)初始化塊
靜態(tài)初始化塊是用大括號(hào){}括起來(lái)的常規(guī)代碼塊,前面是static關(guān)鍵字,這是一個(gè)例子:
static { // whatever code is needed for initialization goes here }
一個(gè)類(lèi)可以有任意數(shù)量的靜態(tài)初始化塊,它們可以出現(xiàn)在類(lèi)體中的任何位置,運(yùn)行時(shí)系統(tǒng)保證按照它們?cè)谠创a中出現(xiàn)的順序調(diào)用靜態(tài)初始化塊。
還有靜態(tài)塊的替代方法 — 你可以編寫(xiě)私有靜態(tài)方法:
class Whatever { public static varType myVar = initializeClassVariable(); private static varType initializeClassVariable() { // initialization code goes here } }
私有靜態(tài)方法的優(yōu)點(diǎn)是,如果需要重新初始化類(lèi)變量,可以在以后重用它們。
初始化實(shí)例成員通常,你可以使用代碼在構(gòu)造函數(shù)中初始化實(shí)例變量,使用構(gòu)造函數(shù)初始化實(shí)例變量有兩種選擇:初始化塊和final方法。
實(shí)例變量的初始化程序塊看起來(lái)就像靜態(tài)初始化程序塊,但沒(méi)有static關(guān)鍵字:
{ // whatever code is needed for initialization goes here }
Java編譯器將初始化程序塊復(fù)制到每個(gè)構(gòu)造函數(shù)中,因此,該方法可用于在多個(gè)構(gòu)造函數(shù)之間共享代碼塊。
無(wú)法在子類(lèi)中重寫(xiě)final方法,這在接口和繼承的課程中討論,以下是使用final方法初始化實(shí)例變量的示例:
class Whatever { private varType myVar = initializeInstanceVariable(); protected final varType initializeInstanceVariable() { // initialization code goes here } }
如果子類(lèi)可能想要重用初始化方法,這尤其有用,該方法是final,因?yàn)樵趯?shí)例初始化期間調(diào)用非final方法可能會(huì)導(dǎo)致問(wèn)題。
創(chuàng)建和使用類(lèi)和對(duì)象的總結(jié)類(lèi)聲明為類(lèi)命名,并將類(lèi)主體括在大括號(hào)之間,類(lèi)名可以在前面加上修飾符,類(lèi)主體包含類(lèi)的字段、方法和構(gòu)造函數(shù),類(lèi)使用字段來(lái)包含狀態(tài)信息,并使用方法來(lái)實(shí)現(xiàn)行為,初始化類(lèi)的新實(shí)例的構(gòu)造函數(shù)使用類(lèi)的名稱(chēng),看起來(lái)像沒(méi)有返回類(lèi)型的方法。
你可以通過(guò)相同的方式控制對(duì)類(lèi)和成員的訪問(wèn):在聲明中使用諸如public之類(lèi)的訪問(wèn)修飾符。
你可以通過(guò)在成員聲明中使用static關(guān)鍵字來(lái)指定類(lèi)變量或類(lèi)方法,未聲明為static的成員隱式地是實(shí)例成員,類(lèi)變量由類(lèi)的所有實(shí)例共享,可以通過(guò)類(lèi)名和實(shí)例引用來(lái)訪問(wèn),類(lèi)的實(shí)例獲取每個(gè)實(shí)例變量的自己的副本,必須通過(guò)實(shí)例引用訪問(wèn)它們。
你可以使用new運(yùn)算符和構(gòu)造函數(shù)從類(lèi)創(chuàng)建對(duì)象,new運(yùn)算符返回對(duì)已創(chuàng)建對(duì)象的引用,你可以將引用分配給變量或直接使用它。
可以通過(guò)使用限定名稱(chēng)來(lái)引用可在其聲明的類(lèi)之外的代碼訪問(wèn)的實(shí)例變量和方法,實(shí)例變量的限定名稱(chēng)如下所示:
objectReference.variableName
方法的限定名稱(chēng)如下所示:
objectReference.methodName(argumentList)
或者:
objectReference.methodName()
垃圾收集器自動(dòng)清理未使用的對(duì)象,如果程序不再包含對(duì)它的引用,則不使用該對(duì)象,你可以通過(guò)將包含引用的變量設(shè)置為null來(lái)顯式刪除引用。
上一篇: 對(duì)象 下一篇:嵌套類(lèi)文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/72302.html
Java? 教程 Java教程是為JDK 8編寫(xiě)的,本頁(yè)面中描述的示例和實(shí)踐沒(méi)有利用在后續(xù)版本中引入的改進(jìn)。 Java教程是希望使用Java編程語(yǔ)言創(chuàng)建應(yīng)用程序的程序員的實(shí)用指南,其中包括數(shù)百個(gè)完整的工作示例和數(shù)十個(gè)課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識(shí)的路徑 這些教程以書(shū)籍的形式提供,如Java教程,第六版,前往Amazon.com購(gòu)買(mǎi)。 入門(mén) 介紹Java技術(shù)和安裝Java開(kāi)發(fā)軟件并使用...
對(duì)象 典型的Java程序會(huì)創(chuàng)建許多對(duì)象,如你所知,通過(guò)調(diào)用方法進(jìn)行交互,通過(guò)這些對(duì)象交互,程序可以執(zhí)行各種任務(wù),例如實(shí)現(xiàn)GUI,運(yùn)行動(dòng)畫(huà)或通過(guò)網(wǎng)絡(luò)發(fā)送和接收信息,一旦對(duì)象完成了創(chuàng)建它的工作,它的資源就會(huì)被回收以供其他對(duì)象使用。 這是一個(gè)名為CreateObjectDemo的小程序,它創(chuàng)建了三個(gè)對(duì)象:一個(gè)Point對(duì)象和兩個(gè)Rectangle對(duì)象,你將需要所有三個(gè)源文件來(lái)編譯此程序。 public ...
摘要:反對(duì)者在某些領(lǐng)域?qū)Υ擞枰苑裾J(rèn)。下面再引用一段來(lái)自維基百科中關(guān)于的歷史。類(lèi)的更嚴(yán)格的定義是由某種特定的元數(shù)據(jù)所組成的內(nèi)聚的包。類(lèi)還可以有運(yùn)行時(shí)表示形式元對(duì)象,它為操作與類(lèi)相關(guān)的元數(shù)據(jù)提供了運(yùn)行時(shí)支持。 在開(kāi)始部分,請(qǐng)看官非常非常耐心地閱讀下面幾個(gè)枯燥的術(shù)語(yǔ)解釋?zhuān)緛?lái)這不符合本教程的風(fēng)格,但是,請(qǐng)看官諒解,因?yàn)榱形粚?lái)一定要閱讀枯燥的東西的。這些枯燥的屬于解釋?zhuān)鶃?lái)自維基百科。 1、問(wèn)題...
摘要:它們是通過(guò)來(lái)自遠(yuǎn)程的服務(wù)器的連接發(fā)送字節(jié)碼并在本地運(yùn)行,這一點(diǎn)令人興奮。中有一個(gè)自定義的,它不是從本地文件系統(tǒng)加載類(lèi)文件,而是從遠(yuǎn)程服務(wù)器上獲取,通過(guò)加載原始字節(jié)碼,再在中轉(zhuǎn)化為類(lèi)。它將字節(jié)碼解析為運(yùn)行時(shí)的數(shù)據(jù)結(jié)構(gòu),檢查其有效性等。 前言 Java ClassLoader是java運(yùn)行系統(tǒng)中一個(gè)至關(guān)重要但是經(jīng)常被忽略的組件。它負(fù)責(zé)在運(yùn)行時(shí)尋找并加載類(lèi)文件。創(chuàng)建自定義的ClassLoad...
多態(tài)性 多態(tài)性的字典定義是指生物學(xué)中的原理,其中生物體或物種可以具有許多不同的形式或階段,這個(gè)原則也可以應(yīng)用于面向?qū)ο蟮木幊毯拖馢ava語(yǔ)言之類(lèi)的語(yǔ)言,類(lèi)的子類(lèi)可以定義它們自己的唯一行為,但仍然共享父類(lèi)的一些相同功能。 可以通過(guò)對(duì)Bicycle類(lèi)的微小修改來(lái)演示多態(tài)性,例如,可以將printDescription方法添加到顯示當(dāng)前存儲(chǔ)在實(shí)例中的所有數(shù)據(jù)的類(lèi)中。 public void printD...
閱讀 964·2021-11-24 10:42
閱讀 3475·2021-11-19 11:34
閱讀 2605·2021-09-29 09:35
閱讀 2525·2021-09-09 09:33
閱讀 641·2021-07-26 23:38
閱讀 2515·2019-08-30 10:48
閱讀 1385·2019-08-28 18:07
閱讀 422·2019-08-26 13:44