「java引用枚举」java中的枚举详解
本篇文章给大家谈谈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中的枚举详解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-25,除非注明,否则均为
原创文章,转载请注明出处。