Java高新技术2--JAVA中枚举的各种应用以及单例模式-阿里云开发者社区

开发者社区> usher.yue> 正文

Java高新技术2--JAVA中枚举的各种应用以及单例模式

简介:   在C/C++中枚举是一种构造数据类型 ,在java中枚举的实质是一个类  但是默认是没有构造方法的 但是我们可以为其添加构造方法 但是必须是私有的 .方法列表要在元素列表之下  。 其实在 Java类中定义枚举就是定义内部类   . 内部类和外部类 根据权限的不同 访问修饰符也不一样。
+关注继续查看
 

在C/C++中枚举是一种构造数据类型 ,在java中枚举的实质是一个类  但是默认是没有构造方法的 但是我们可以为其添加构造方法 但是必须是私有的 .方法列表要在元素列表之下  。
其实在 Java类中定义枚举就是定义内部类   .
内部类和外部类 根据权限的不同 访问修饰符也不一样。

在c/c++中使用枚举
enum WeekDay={Mon,Tue,Wed,Thi,Fri,Sat,Sun} ; 

 

在Java中
  public enum WeekDay   //枚举其实就一个类  也有方法 
  {
   MON ,TUS,WED ,THI,FRI,SAT,SUN   ;//可以加;也可以不加
  } 


1、
    我们可以在Main方法中对Java中的枚举进行如下操作
          WeekDay day=WeekDay.MON ;
   System.out.println(day);  //自动重载了toString()方法
   System.out.println(day.name());//输出枚举对象的名字
   System.out.println(day.ordinal());//输出在枚举中的顺序基于0 
   System.out.println(WeekDay.valueOf("SAT").toString()); //通过传递一个参数字符串来构造一个对象静态方法  我们在网页提交数据的时候 提交的是字符串我们可以在本地
   System.out.println(WeekDay.values().length);//静态方法获得一个枚举的长度                                                         通过字符处啊构造对象

2、   我们然后修改 枚举的定义如下
  public enum WeekDay   //枚举其实就一个类  也有方法 
  {
   MON(1),TUS,WED(3),THI,FRI,SAT,SUN   ;//可以加;也可以不加
   private WeekDay(){System.out.println("不带参数的构造方法!");}
   private WeekDay(int i){System.out.println("带参数的构造方法 !");}
  } 

只要程序一运行构造函数就会调用 这是因为Java中的枚举元素 都会自动生成静态对象 所以在程序加载的时候构造函数便会被执行  。
如果我们想分别调用枚举的构造方法 ,那么我们只需要在枚举元素后面增加上相应的参数即可 。
一定要注意 枚举的构造函数 一定要是私有    。。枚举和类的声明是一样的  。。


3、
利用枚举实现 TrafficLamp转向灯 : 
 //枚举元素就是一个个 枚举类的实例   但是在这里我们对于枚举的元素 其实是外部类的子类  我们通过匿名内部类 来创建枚举对象 并且实现其抽象方法
public enum TrafficLamp
  {  
   GREEN()  
   {
    public TrafficLamp nextLamp() 
    {
   return YELLOW ; 
    }
   },YELLOW(){
   
    public  TrafficLamp nextLamp() 
    {
     return TrafficLamp.RED ;
    }
   
   }
   ,RED(){
   
    public  TrafficLamp nextLamp()
    {
     return GREEN ;
    }
   
   }  ;
   public abstract TrafficLamp nextLamp()  ;//定义一个抽象方法 那么这个类只能被继承了  
         
  }


在Main中调用
          TrafficLamp tr=TrafficLamp.YELLOW ;
   System.out.println(tr);
   System.out.println(tr.nextLamp());
   System.out.println(tr.nextLamp().nextLamp());  //到下一个转向灯

 

4、大家可能还听过 Singleton  也就是单例模式 这个单例模式要求 在程序的运行时候   一个程序的某个类 只允许产生一个 实例 那么 这个类就是一个单例类
在Java中 可以通过枚举 来实现单例模式  。也可以通过Java类来实现 ,其根本都是通过类来实现的,因为 枚举本来就是一个 特殊类  。
说白了单例模式 就是一个对象唯一的概念 。。。。


实现方法1 :     自己通过类来实现

package me.Test;
public class Singleton

   private  Singleton(){}  //私有构造方法 那么不能直接产生实例对象
   private static Singleton obj=null;  //静态私有成员
   public Singleton getSingleton()  
   {
    if(obj==null)
     obj= new Singleton() ;
    return obj ;
   }
}

实现方法2 :  通过枚举进行单例模式 
看下面枚举是不是很方便呢 简单的声明就实现了对象的唯一

enum SingletonEnum
{
  SingleObject ;  //枚举类型构造函数必须为 private 并且元素是静态的 定义完 枚举就可以使用
}

 

 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring Boot Admin,贼好使!(8)
Spring Boot Admin,贼好使!(8)
22 0
Spring Boot Admin,贼好使!(7)
Spring Boot Admin,贼好使!(7)
24 0
更快的Maven构建工具mvnd和Gradle哪个性能更好?(5)
更快的Maven构建工具mvnd和Gradle哪个性能更好?(5)
25 0
Spring Boot Admin,贼好使!(5)
Spring Boot Admin,贼好使!(5)
34 0
更快的Maven构建工具mvnd和Gradle哪个性能更好?(4)
更快的Maven构建工具mvnd和Gradle哪个性能更好?(4)
20 0
保姆级教程,终于搞懂脏读、幻读和不可重复读了!(7)
保姆级教程,终于搞懂脏读、幻读和不可重复读了!(7)
23 0
更快的Maven构建工具mvnd和Gradle哪个性能更好?(3)
更快的Maven构建工具mvnd和Gradle哪个性能更好?(3)
31 0
python测试框架-pytest
python测试框架-pytest 一、pytest 介绍、运行、参数化和数据驱动、Fixture pytest安装与介绍 官网 : pip install -U pytest 查看版本号:pytest --version 为何选择pytest 兼容unittest 定制化插件开发 pycharm 配置github VSC--Git--Remotes... pycharm pytest 配置 settings--搜索pytest--Python integrated Tools--testing--选择pytest:根据黄色叹号fix安装pytest安装到环境
4 0
Spring Boot Admin,贼好使!(3)
Spring Boot Admin,贼好使!(3)
31 0
Spring Boot Admin,贼好使!(4)
Spring Boot Admin,贼好使!(4)
29 0
+关注
usher.yue
算法相关技术专家
431
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载