導航:首頁 > 編程語言 > java枚舉實例化

java枚舉實例化

發布時間:2022-12-19 07:33:47

java枚舉類型的疑問

樓主說的完全正確,枚舉類型的每一個成員都以該類型的一個實例,而且默認的都是聲明為public static final的,它們有自己的方法,當然也可以怎麼能直接用類名調用這個枚舉變數。樓主可以用javap反編譯一下類文件就清楚了!

㈡ java枚舉有什麼不好

沒有他說的那麼絕對。沒有不好用的,只有不適合用、不擅長用的。
在webapp裡面,用枚舉不如用xml或properties或數據字典,因為維護容易,用枚舉得改類,再編譯,再替換到伺服器上,而用後面的直接修改伺服器文件或者在系統上配置就OK了

㈢ java 枚舉 參數傳遞

這樣做是不行的,原因是:Java中的對象實例化都是在堆中,如果是普通的類實例變數,比如在方法1中定義的普通類實例變數,傳到了方法2中,由於方法1和方法2中的實例變數對應著堆中的同一個對象實例,所以方法2中修改了對象實例的值,方法1中的值也會跟著變化。但是java中的枚舉不是這樣子的。比如下面的代碼:

publicclassEnumClass{

publicstaticvoidmain(String[]args){
Colorcolor=Color.RED;
convert(color);
System.out.println(color.name());
}
publicstaticvoidconvert(Colorc){
System.out.println(c.name());
c=Color.BLUE;
}
}

enumColor{
RED,BLUE,GREEN;
}

如你問題中表述的,兩次輸出都是RED。具體原因,我們可以用javap反編譯一下這個類。得到下面的代碼

Compiledfrom"EnumClass.java"
finalclassorg.concurrency.art.Colorextendsjava.lang.Enum<org.concurrency.art.Color>{
publicstaticfinalorg.concurrency.art.ColorRED;
publicstaticfinalorg.concurrency.art.ColorBLUE;
publicstaticfinalorg.concurrency.art.ColorGREEN;
publicstaticorg.concurrency.art.Color[]values();
publicstaticorg.concurrency.art.ColorvalueOf(java.lang.String);
static{};
}

可以看到枚舉其實也是用class實現的。而枚舉的值是這個類的static final型的常量。當EnumClass這個類載入後,虛擬機就會在堆區創建這三個實例化變數。這就可以回答為什麼改變後無效了。main方法把color變數傳遞給convert方法的c時,兩者是指向堆區中的同一個地址,也就是Color.RED實例的地方,而後,變數c被重新賦值,此時變數c是指向了堆區中的Color.BLUE實例的位置。 這個賦值跟main方法中color變數是沒有一點關系的,main中的color變數還是指向的Color.RED實例的地方。 所以covert方法執行完後,main方法中的color變數是沒有變的。


如果想要它變化,我感覺有兩種方法,一種是covert方法返回一個想要的枚舉變數,在main中賦值給color,另一種方法是把這個變數再用一個類封裝一下,傳入到covert方法中。希望對你有幫助。

㈣ java枚舉如何運用

看了第一個回答的代碼,理解了下,感覺枚舉也就是類,在類裡面實例化了自己

㈤ Java 中 Enum 如何繼承

Java Enum是不能繼承的,以下是解釋:
枚舉類使用enum定義後在編譯後默認繼承了java.lang.Enum類,而不是普通的繼承Object類。enum聲明類繼承了Serializable和Comparable兩個介面。且採用enum聲明後,該類會被編譯器加上final聲明(同String),故該類是無法繼承的。枚舉類的內部定義的枚舉值就是該類的實例(且必須在第一行定義,當類初始化時,這些枚舉值會被實例化)。
Java 5新增的enum關鍵詞,可以定義枚舉類。該類是一個特殊的類,可以定義自己的field、方法、可以實現介面,也可以定義自己的構造器。

㈥ java 獲取枚舉類型的實例

public class MJTest {
public enum MJ {
MJ1(1), MJ(2),MJ(3);
}
public static void main(String[] args) {
MJ[] elements = MJ.values();
for (Light i : elements) {
System.out.println(" 當前值 : " + i.name());
}
}
}

㈦ 為什麼java中用枚舉實現單例模式會更好

單例模式實現方式有很多:在第一次使用的時候創建(構造函數中判斷是否已經有實例存在),在類載入的時候用靜態塊兒創建(靜態塊初始化),在應用啟動的時候創建。

在單線程中,基本大同小異,保證類的實例在整個應用中只有一個,都是沒問題的。

但是在多線程環境下,什麼時候創建這個實例是要考慮線程安全的。

枚舉類型最大的特點就是:構造函數是private修飾的,也就是不能對其進行new,對象的實例都是預定義的,也就是在類載入的時候都是定義好了的,不會給其它調用去創建實例的機會。

結論是,可以模擬這個思路去創建單例,不一定非得用枚舉,但是推薦用使用定義枚舉的方式去實現單例模式

㈧ Java語言中的枚舉類型如何使用

Java語言中的枚舉類型的使用方法如下:

用法一:常量;

publicenumColor{
RED,GREEN,BLANK,YELLOW
}

用法二:switch;

enumSignal{
GREEN,YELLOW,RED
}
publicclassTrafficLight{
Signalcolor=Signal.RED;
publicvoidchange(){
switch(color){
caseRED:
color=Signal.GREEN;
break;
caseYELLOW:
color=Signal.RED;
break;
caseGREEN:
color=Signal.YELLOW;
break;
}
}
}

用法三:向枚舉中添加新方法;

publicenumColor{
RED("紅色",1),GREEN("綠色",2),BLANK("白色",3),YELLO("黃色",4);
//成員變數
privateStringname;
privateintindex;
//構造方法
privateColor(Stringname,intindex){
this.name=name;
this.index=index;
}
//普通方法
publicstaticStringgetName(intindex){
for(Colorc:Color.values()){
if(c.getIndex()==index){
returnc.name;
}
}
returnnull;
}
//getset方法
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetIndex(){
returnindex;
}
publicvoidsetIndex(intindex){
this.index=index;
}
}

用法四:覆蓋枚舉的方法;

publicclassTest{
publicenumColor{
RED("紅色",1),GREEN("綠色",2),BLANK("白色",3),YELLO("黃色",4);
//成員變數
privateStringname;
privateintindex;
//構造方法
privateColor(Stringname,intindex){
this.name=name;
this.index=index;
}
//覆蓋方法
@Override
publicStringtoString(){
returnthis.index+"_"+this.name;
}
}
publicstaticvoidmain(String[]args){
System.out.println(Color.RED.toString());
}
}

用法五:實現介面;

publicinterfaceBehaviour{
voidprint();
StringgetInfo();
}
{
RED("紅色",1),GREEN("綠色",2),BLANK("白色",3),YELLO("黃色",4);
//成員變數
privateStringname;
privateintindex;
//構造方法
privateColor(Stringname,intindex){
this.name=name;
this.index=index;
}
//介面方法
@Override
publicStringgetInfo(){
returnthis.name;
}
//介面方法
@Override
publicvoidprint(){
System.out.println(this.index+":"+this.name);
}
}

用法六:使用介面組織枚舉。

publicinterfaceFood{
enumCoffeeimplementsFood{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enumDessertimplementsFood{
FRUIT,CAKE,GELATO
}
}

以上就是Java語言中枚舉類型的基本使用方法。

㈨ Java類的實例化順序是什麼樣的Java線程同步的方式有哪些

引言:java是在1990年初 ,被詹姆斯•高斯林等人開發的一門面向對象的編程語言。起初,java被稱為0ak,來經過發展0ak改名為java,與1995年的五月份正式向大家發布。

一、java類的實例化順序

java的實例化順序在繼承沒有的情況

單獨一個類的場景下,初始化順序為依次為靜態數據,繼承的基類的構造函數,成員變數,被調用的構造函數。

其中靜態數據只會初始化一次。(靜態數據包括靜態代碼塊和靜態變數,每個類的靜態數據只會初始化一次)

在繼承的情況下

添加兩個基類,讓繼承父親,父親繼承祖父。

繼承的情況就比較復雜了。由繼承了基類,還將往上回溯,遞歸地調用基類的無參構造方法。

在我們的例子中,在初始化靜態數據後,會先往上追溯,調用父的默認構造方法,此時再往上追溯到爺爺的默認構造方法。


無論是java還是什麼別的東西他都體現了現代社會與信息技術的不斷發展,人們在進行進行技術開發時也有了越來越多的方法。程序類的工作也有了更為快捷的方法,這為信息技術的發展也提供了更好的發展方法

㈩ 請問java中枚舉Enum可以被實例化嗎

當然可以,每一個枚舉裡面定義的都是這個枚舉的實例。

閱讀全文

與java枚舉實例化相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:382
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163