导航:首页 > 编程语言 > 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为什么进不去了 浏览:779
im4java压缩图片 浏览:362
数据查询网站源码 浏览:151
伊克塞尔文档怎么进行加密 浏览:893
app转账是什么 浏览:163