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 并且元素是静态的 定义完 枚举就可以使用
}

 

 

 

目录
相关文章
|
1天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
11 0
|
1天前
|
Java
Java中的并发编程:理解和应用线程池
【4月更文挑战第23天】在现代的Java应用程序中,性能和资源的有效利用已经成为了一个重要的考量因素。并发编程是提高应用程序性能的关键手段之一,而线程池则是实现高效并发的重要工具。本文将深入探讨Java中的线程池,包括其基本原理、优势、以及如何在实际开发中有效地使用线程池。我们将通过实例和代码片段,帮助读者理解线程池的概念,并学习如何在Java应用中合理地使用线程池。
|
6天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
6天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。
|
6天前
|
安全 Java API
函数式编程在Java中的应用
【4月更文挑战第18天】本文介绍了函数式编程的核心概念,包括不可变性、纯函数、高阶函数和函数组合,并展示了Java 8如何通过Lambda表达式、Stream API、Optional类和函数式接口支持函数式编程。通过实际应用案例,阐述了函数式编程在集合处理、并发编程和错误处理中的应用。结论指出,函数式编程能提升Java代码的质量和可维护性,随着Java语言的演进,函数式特性将更加丰富。
|
7天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
10天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
15 1
|
12天前
|
Java
探秘jstack:解决Java应用线程问题的利器
探秘jstack:解决Java应用线程问题的利器
17 1
探秘jstack:解决Java应用线程问题的利器
|
14天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
9 0
|
16天前
|
XML JSON JavaScript
Java中XML和JSON的比较与应用指南
本文对比了Java中XML和JSON的使用,XML以自我描述性和可扩展性著称,适合结构复杂、需验证的场景,但语法冗长。JSON结构简洁,适用于轻量级数据交换,但不支持命名空间。在Java中,处理XML可使用DOM、SAX解析器或XPath,而JSON可借助GSON、Jackson库。根据需求选择合适格式,注意安全、性能和可读性。
26 0