「java引用枚举」java中的枚举详解

博主:adminadmin 2022-11-25 06:29:07 47

本篇文章给大家谈谈java引用枚举,以及java中的枚举详解对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java中枚举如何使用?

怎么解释枚举呢。枚举的定义就是一个有限值的集合。一个枚举类型的变量它的值只可能是类型值中的一个。

所以 Drection 是类型名,Drection drection 则是此类型的变量,变量的值应该是类型里边所列的值中的一个,如果单写个 WEST跟本不知道它是什么,所以要加类名限定 即 Drection.WEST. 于是,对一个枚举变量赋值的样子就像这样。

 if(drection==Drection.WEST) return true;   String west="WEST"; drection.toString().equals(west) return true;

Java中什么是对象什么是引用还有枚举,求大佬解决最好用表达式。

如果你是初学者,我用最好理解的方式跟你说.

对象:就是一个名词而已,没啥特别的,学过C语言么?学过C语言的话,结构体,就是对象.

如果没学过C,我再找一个方式给你说.不过要说对象,得先说类.

在JAVA中,有一种数据结构,

Class student{

    String name;

    void showname(){

        System.Out.print(this.name)

    }

}

这就是这种数据结构,JDK也会提供很多,系统给你写好的,这个是我程序员自己写的学生类,我们定义了一种学生类,我觉得学生应该有名字属性,还应该有一个让别人知道他名字的能力,所以,他有了名字,有了说出名字的能力,都是我写的,你觉得学生还应该有性别,你就加进去,别赋值.因为学生应该有性别,但不该固定死,你说学生就该是男的么?或者就该是女的?不可能,所以你可以说学生有性别这个属性,但是他到底是什么,我不知道,所以你定义类,不能赋值.

那这是我觉得学生类,所有学生都该这样.

而类跟个体有什么区别呢?这就像你和人类的关系,类有大的方向性的东西,只有个体有具体的特色.

那么个体怎么展现他的特性呢?

还拿这个Student类来说,这个类是大方向,代表所有学生都有名字和说出名字的能力,但具体个体,比如你叫张伟,

那么

Student zhangwei=new Student("zhangwei");

就是通过new关键字,从学生类,创建出来一个真真实实的叫张伟的个体.

那么这个张伟就是对象,所有由new关键字,从类中创建的个体就叫对象.

现在明白什么叫对象了么?

下面说引用,如果你是一个初学者,我希望你只听我说的第一部分.

int number=123;

这就是一个引用,你这条代码,执行后,会在存储空间开辟一个小单元,里面放着123这个实际数据.

那么你想使用这个数据,怎么办呢?你不知道这个小单元的位置啊,怎么用呢?Java和所有编程语言都如此,会给你提供一种方案,那就是,给这个单元起个名字,这个单元就叫number,以后你代码中再写number,我知道去哪个小单元找数据.

而这个number就是在123这个数据单元的引用.或者number引用123这个单元,说起来,中文有点绕,你怎么说好像都对,反正你明白这个意思就行.就是一个东西等价另一个东西,这就是一个队另一个的引用.

这是第一部分,如果你是初学者,听到这里就可以了,如果你是想钻研深度的,下面的继续,

Java中有四种引用,分别为强引用,软引用,弱引用,虚引用.我再强调一遍啊,如果你是新手,别看这部分.容易让你乱.

强引用::::::说起来也容易理解,强引用,就是我刚才写的int number=123这个代码,这就是强引用,我写了这代码,虚拟机运行时,发现,卧槽,内存不够了啊,这可怎么办?要不,我偷偷的,不给你分配内存存储123?也不告诉你?不行!!!虚拟机如果发现内存不够了,就会停止运行,告诉你报错了,内存不够.因为你写的这个代码叫强引用型,特点就是必须要引用成功.

软引用::::那么这是什么,这也是一种引用类型,目的就是,告诉虚拟机,啊,你运行吧,我要创建int number=123,但是,我允许你在出现内存不足时,释放123这个空间,不用担心我不让,我同意了,你可以在内存不足时删掉我.

这就是软引用,那具体怎么实现呢?

int number=123;

SoftReference ruanyinyong=new SoftReference(number);

number=null;

ruanyinyong=get();

这段代码就是在创建一个软引用,首先第一行肯定是一个硬引用,就是,无论你内存够不够,你必须给我创建数据.

第二行通过系统提供的创建软引用的类,来为你创建一个软引用,就是将number等价的存到ruanyinyong这个变量中.

第三行,释放number这个硬引用为弱引用(后面说),就是告诉系统,number现在不是硬引用了,你可以删除我了.但是,不幸的是,number在第二行已经重新扔给了ruanyinyong.

现在ruanyingyong就出现了.懂么?

弱引用:::::下面是弱引用,弱引用在刚才说了一嘴,什么是弱引用呢?弱引用就是比软引用还低级的引用方式,软引用是内存不足,才会删除,弱引用是内存不管你足不足,我虚拟机垃圾回收器只要在周期性扫描垃圾的时候发现你小子了,你就给我玩蛋去.

怎么达成弱引用呢?那就是使用number=null这种方式,来释放内存,其实这就是弱引用了,你必须通过=null的方式来告诉虚拟机,这个数据没用了.但是注意,虚拟机的垃圾回收期是周期性扫描的,也就是说,你虽然写了=null,但是他不一定立刻删除,需要扫描到你的时候,才会删除.但是,你还要注意一点,那就是,虽然还没删除,但是引用已经断开了,人家没删除指的是具体数据单元的数据123没删除,而不是说你这个引用number没删除,其实即使你的123没删除,但是number的引用的那根线已经切断了,你也无法通过number去引用了.

虚引用::::唉呀妈呀,你这也没个悬赏,我可是一个字一个字给你手写的,就看你爱学,喜欢认真研究的人,才给你写的,你要不好好看,多对不起啊.

虚引用我不是很清楚,这个你自己百度下吧,我也查过了,不是很看的懂,所以没法用自己的语言给你解释了.

最后最后最后,你的枚举是吧.

枚举,我还真把JAVA源代码给反编译成汇编看过,枚举其实就是一个Class类,特殊的类.

你反编译,看代码,发现它也是类,可是为啥特殊呢?

这个没法有通俗易懂的语言,我也没法按你是新手或者老手不同解释,这就一个解释,不懂,你就去看明白啥是类就行了.

我给你描述一个类:

构造器是私有化的,类中的属性只有get方法,没有set 方法,而且所有属性都是静态的最终的,这样子的类,就是枚举类型.

为啥呢?因为枚举嘛,本意就是不想让你再创建新的对象,只让你使用他枚举列表里提供的常量,那么私有化构造器,你就无法使用new调用构造器去创建新对象了.而保证成员属性不可变,那就是不提供set方法,只有get方法.而属性是最终的finall类型的,也进一步禁止你修改属性.

所以你只能用他提供的,不能自己去构造,修改任何数据.这就是枚举.

这个类其实就是枚举了.但是这个我们写出来的模仿出来的枚举,跟真正的枚举类是差不多的,只差一点,我们写的这个,可以通过反射的形式,创建对象,而我们当初设计枚举时,可一定一定一定不允许用户创建新的或者修改数据啊,你只能用,不能创建啊!那怎么办?没事,你自己模仿的枚举不行,我系统提供一个,枚举类,连反射都无法创建对象,看你怎么办?所以我们写的,跟系统提供的区别仅在于,我们的通过常规手段创建不了,但是反射能创建,而系统提供的,反射都无法创建对象.

那么你会发现,卧槽,这个特性很符合我们26中设计模式中的"单例模式"的需求啊,设计单利模式不也是需要私有化构造器,然后提供一个不可变的,静态的对象么?这个算是扩展,你了解单例模式,再说,其实现实中就有很多人用枚举来完成单例模式,代码更优雅,更安全,更美观,我就这么干....

Java语言中的枚举类型如何使用?

Java语言中的枚举类型的使用方法如下:

用法一:常量;

public enum Color {  

  RED, GREEN, BLANK, YELLOW  

}

用法二:switch;

 enum Signal {

        GREEN, YELLOW, RED

    }

    public class TrafficLight {

        Signal color = Signal.RED;

        public void change() {

            switch (color) {

            case RED:

                color = Signal.GREEN;

                break;

            case YELLOW:

                color = Signal.RED;

                break;

            case GREEN:

                color = Signal.YELLOW;

                break;

            }

        }

    }

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

public enum Color {

        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

        // 成员变量

        private String name;

        private int index;

        // 构造方法

        private Color(String name, int index) {

            this.name = name;

            this.index = index;

        }

        // 普通方法

        public static String getName(int index) {

            for (Color c : Color.values()) {

                if (c.getIndex() == index) {

                    return c.name;

                }

            }

            return null;

        }

        // get set 方法

        public String getName() {

            return name;

        }

        public void setName(String name) {

            this.name = name;

        }

        public int getIndex() {

            return index;

        }

        public void setIndex(int index) {

            this.index = index;

        }

    }

用法四:覆盖枚举的方法;

public class Test {

    public enum Color {

        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

        // 成员变量

        private String name;

        private int index;

        // 构造方法

        private Color(String name, int index) {

            this.name = name;

            this.index = index;

        }

        // 覆盖方法

        @Override

        public String toString() {

            return this.index + "_" + this.name;

        }

    }

    public static void main(String[] args) {

        System.out.println(Color.RED.toString());

    }

}

用法五:实现接口;

public interface Behaviour {

        void print();

        String getInfo();

    }

    public enum Color implements Behaviour {

        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

        // 成员变量

        private String name;

        private int index;

        // 构造方法

        private Color(String name, int index) {

            this.name = name;

            this.index = index;

        }

        // 接口方法

        @Override

        public String getInfo() {

            return this.name;

        }

        // 接口方法

        @Override

        public void print() {

            System.out.println(this.index + ":" + this.name);

        }

    }

用法六:使用接口组织枚举。

public interface Food {

    enum Coffee implements Food {

      BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO

   }

  enum Dessert implements Food {

      FRUIT, CAKE, GELATO

  }

}

以上就是Java语言中枚举类型的基本使用方法。

java枚举的几种用法

用法一:常量

在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,

有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

Java代码

public enum Color {

RED, GREEN, BLANK, YELLOW

}

用法二:switch

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

Java代码

enum Signal {

GREEN, YELLOW, RED

}

public class TrafficLight {

Signal color = Signal.RED;

public void change() {

switch (color) {

case RED:

color = Signal.GREEN;

break;

case YELLOW:

color = Signal.RED;

break;

case GREEN:

color = Signal.YELLOW;

break;

}

}

}

用法三:向枚举中添加新方法

如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。

Java代码

public enum Color {

RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

// 成员变量

private String name;

private int index;

// 构造方法

private Color(String name, int index) {

this.name = name;

this.index = index;

}

// 普通方法

public static String getName(int index) {

for (Color c : Color.values()) {

if (c.getIndex() == index) {

return c.name;

}

}

return null;

}

// get set 方法

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getIndex() {

return index;

}

public void setIndex(int index) {

this.index = index;

}

}

用法四:覆盖枚举的方法

下面给出一个toString()方法覆盖的例子。

Java代码

public enum Color {

RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

// 成员变量

private String name;

private int index;

// 构造方法

private Color(String name, int index) {

this.name = name;

this.index = index;

}

//覆盖方法

@Override

public String toString() {

return this.index+"_"+this.name;

}

}

用法五:实现接口

所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。

Java代码

public interface Behaviour {

void print();

String getInfo();

}

public enum Color implements Behaviour{

RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);

// 成员变量

private String name;

private int index;

// 构造方法

private Color(String name, int index) {

this.name = name;

this.index = index;

}

//接口方法

@Override

public String getInfo() {

return this.name;

}

//接口方法

@Override

public void print() {

System.out.println(this.index+":"+this.name);

}

}

用法六:使用接口组织枚举

Java代码

public interface Food {

enum Coffee implements Food{

BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO

}

enum Dessert implements Food{

FRUIT, CAKE, GELATO

}

}

private static void testImplementsInterface() {

for (Food.DessertEnum dessertEnum : Food.DessertEnum.values()) {

System.out.print(dessertEnum + " ");

}

System.out.println();

//我这地方这么写,是因为我在自己测试的时候,把这个coffee单独到一个文件去实现那个food接口,而不是在那个接口的内部。

for (CoffeeEnum coffee : CoffeeEnum.values()) {

System.out.print(coffee + " ");

}

System.out.println();

//搞个实现接口,来组织枚举,简单讲,就是分类吧。如果大量使用枚举的话,这么干,在写代码的时候,就很方便调用啦。

//还有就是个“多态”的功能吧,

Food food = Food.DessertEnum.CAKE;

System.out.println(food);

food = CoffeeEnum.BLACK_COFFEE;

System.out.println(food);

}

关于java引用枚举和java中的枚举详解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-25,除非注明,否则均为首码项目网原创文章,转载请注明出处。