【Java知识点详解 5,程序员必学之一

private int id;

private String meaning;



Week(int id,String meaning) {

    this.id = id;

    this.meaning = meaning;

}

}




3、测试类 

------



public static void main(String[] args) {

    //1、ordinal(),枚举顺序值

    System.out.println("枚举顺序值,"+Weekday.MONDAY.ordinal());//1



    /*

     * 2、valueOf()

     * public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

     * enumType -- 这是枚举类型,返回一个常量的类的对象。

     * name -- 这是常量,要返回的名称。

     * return:此方法返回具有指定名称的枚举类型的枚举常量。

     * 如果你传了一个不存在的字符串,那么会抛出异常。

     * */

    Week week = Enum.valueOf(Week.class,Week.MONDAY.name().toString());

    Week week1 = Week.valueOf(Week.class,Week.MONDAY.name());

    System.out.println("Enum.valueOf,"+week);//MONDAY

    System.out.println("Week.valueOf,"+week1);//MONDAY



    //3、values()

    System.out.println("Week.values(),"+Weekday.values());//返回一个Weekday数组,[Ljavase.enumeration.Weekday;@2a84aee7



    //4、通过compareTo方法比较,实际上其内部是通过ordinal()值比较的

    System.out.println("Weekday.MONDAY.compareTo(Weekday.TUESDAY),"+Weekday.MONDAY.compareTo(Weekday.TUESDAY));//false



    //5、获取该枚举对象的Class对象引用,当然也可以通过getClass方法

    Class<?> declaringClass = Weekday.MONDAY.getDeclaringClass();

    System.out.println("获取该枚举对象的Class对象引用,"+declaringClass);//javase.enumeration.Weekday



    //6、通过getEnumConstants()获取该枚举类型的所有元素,如果Class对象不是枚举类型,则返回null。

    Object[] enumConstants = declaringClass.getEnumConstants();

    //枚举类个数,Weekday.values().length)

    for (int i = 0; i < Weekday.values().length; i++) {

        System.out.println("getEnumConstants,"+enumConstants[i]);//SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY

    }



    //7、判断是否是枚举类型

    System.out.println("declaringClass.isEnum(),"+declaringClass.isEnum());//true



    //8、获取枚举变量的属性

    System.out.println("编号,"+Week.MONDAY.getId()+",含义,"+Week.MONDAY.getMeaning());

}



4、向上转型

------



//9、向上转型Enum

Enum e = Weekday.FRIDAY;




 ![](https://img-blog.csdnimg.cn/20200616162102613.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh,size_16,color_FFFFFF,t_70)



这个东西意义何在,有待研究。



5、部分方法源码介绍

----------



### (1)valueof



public static <T extends Enum> T valueOf(Class enumType,String name) {

T result = enumType.enumConstantDirectory().get(name);

if (result != null)

    return result;

if (name == null)

    throw new NullPointerException("Name is null");

throw new IllegalArgumentException(

    "No enum constant " + enumType.getCanonicalName() + "." + name);

}




### (2)compareTo 



public final int compareTo(E o) {

Enum<?> other = (Enum<?>)o;

Enum<E> self = this;

if (self.getClass() != other.getClass() && self.getDeclaringClass() != other.getDeclaringClass())

    throw new ClassCastException();

return self.ordinal - other.ordinal;

}




五、枚举类中定义抽象方法

============



1、定义抽象方法

--------



package javase.enumeration;

public enum Season{

SPRING("1"){

    @Override

    public Season getNextSeason() {

        return SUMMER;

    }

},

SUMMER("4"){

    @Override

    public Season getNextSeason() {

        return AUTUMN;

    }

},

AUTUMN("7"){

    @Override

    public Season getNextSeason() {

        return WINTER;

    }

},

WINTER("10"){

    @Override

    public Season getNextSeason() {

        return SPRING;

    }

};



private String monthStart;

private Season(String monthStart){

    this.monthStart = monthStart;

}



public abstract Season getNextSeason();

}




2、测试类

-----



class Test{

public static void main(String[] args) {

    System.out.println("SPRING下一个季节是:"+Season.SPRING.getNextSeason());

}

}




3、控制台输出

-------



![](https://img-blog.csdnimg.cn/20200616161522223.png)



六、实现接口 

=======



1、接口

----



package javase.enumeration;

public interface Study {

void StudyJava();

void StudyDataStrucure();

void StudyDesignMode();

void StudySpring();

}




2、实现接口 

-------



enum Week implements Study{

SUNDAY(0,"星期日"),

MONDAY(1,"星期一"),

TUESDAY(2,"星期二"),

WEDNESDAY(3,"星期三"),

THURSDAY(4,"星期四"),

FRIDAY(5,"星期五"),

SATURDAY(6,"星期六");



private int id;

private String meaning;



Week(int id,String meaning) {

    this.id = id;

    this.meaning = meaning;

}



public int getId() {

    return id;

}



public void setId(int id) {

    this.id = id;

}



public String getMeaning() {

    return meaning;

}



public void setMeaning(String meaning) {

    this.meaning = meaning;

}



@Override

public String toString() {

    return "Week{" +

            "id=" + id +

            ", meaning='" + meaning + '\'' +

            '}';

}



@Override

public void StudyJava() {

    System.out.println(this+"学习java");

}



@Override

public void StudyDataStrucure() {

    System.out.println(this.meaning+"学习数据结构");

}



@Override

public void StudyDesignMode() {

    System.out.println(this.meaning+"学习设计模式");

}



@Override

public void StudySpring() {

    System.out.println(this.meaning+"学习Spring框架");

}

}




3、测试类

-----



//10、实现接口并调用接口中方法

MONDAY.StudyDataStrucure();




4、控制台输出

-------



![](https://img-blog.csdnimg.cn/20200616161814644.png)



七、枚举实现单例

========



枚举单例(Enum Singleton)在Effective Java一书中提到,因为其功能完善,使用简洁,无偿的提供了序列化机制,在面对复杂的序列化或者反射攻击时依然可以绝对防止多次实例化等优点,被作者所推崇。



public enum DataSourceEnum {

DATASOURCE;

private DBConnection connection = null;

private DataSourceEnum(){

    connection = new DBConnection();

}

public DBConnection getConnection(){

    return connection;

}

}




八、EnumMap

=========



 1、代码实例分析EnumMap和HashMap

------------------------



以1月到6月学习不同的Java项目为例。



/*

  • 以1月到6月学习不同的Java项目为例

  • */

public class EnumMapDemo {

public static void main(String[] args) {

    List<StudyJava> list = new ArrayList<>();

    list.add(new StudyJava("January",ProjectEnum.SSH));

    list.add(new StudyJava("February",ProjectEnum.SSM));

    list.add(new StudyJava("March",ProjectEnum.SSM));

    list.add(new StudyJava("April",ProjectEnum.SPRINGBOOT));

    list.add(new StudyJava("May",ProjectEnum.SPRINGBOOT));

    list.add(new StudyJava("June",ProjectEnum.SPRINGCLOUD));

    //1、使用hashmap

    Map<ProjectEnum,Integer> hashMap = new HashMap<>();

    for (StudyJava studyJava:list){

        ProjectEnum project = studyJava.getProjectEnum();

        Integer count = hashMap.get(project);

        if(count != null){

            hashMap.put(project,count + 1);

        }else{

            hashMap.put(project,1);

        }

    }

    System.out.println(hashMap.toString());



    //2、使用EnumMap

    Map<ProjectEnum,Integer> enumMap = new EnumMap(ProjectEnum.class);

    for (StudyJava studyJava:list){

        ProjectEnum project = studyJava.getProjectEnum();

        Integer count = enumMap.get(project);

        if(count!=null){

            enumMap.put(project,count+1);

        }else {

            enumMap.put(project,1);

        }

    }

    System.out.println(enumMap.toString());

Java高频面试专题合集解析:

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,在这也是免费分享给那些有需要的朋友,其中囊括了Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!

这些资料都以整理成了PDF文档,如果有需要可以狂戳这里免费下载即可!

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

更多Java架构进阶资料展示

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

if(count!=null){

            enumMap.put(project,count+1);

        }else {

            enumMap.put(project,1);

        }

    }

    System.out.println(enumMap.toString());

Java高频面试专题合集解析:

[外链图片转存中…(img-wSqucSzu-1628597513013)]

当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,在这也是免费分享给那些有需要的朋友,其中囊括了Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!

这些资料都以整理成了PDF文档,如果有需要可以狂戳这里免费下载即可!

[外链图片转存中…(img-68RhhGGJ-1628597513017)]

更多Java架构进阶资料展示

[外链图片转存中…(img-T3h14D2a-1628597513019)]

[外链图片转存中…(img-tPk8OD0i-1628597513022)]

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值