• java基础41 枚举(类)


    1、概述

        枚举:一些方法在运行时,它需要数据不能是任意的,而必须是一定范围内的值,可以使用枚举解决

    2、枚举的格式

    enum 类名{
         枚举值
    }

    例子

     1 package com.dhb.enumeration;
     2 
     3 /**
     4  * @author DSHORE / 2018-6-21
     5  *
     6  */
     7 enum Sex{//枚举类
     8     //相当于:public static final Sex man=new Sex("男");
     9     man("") {
    10         @Override
    11         public void run() {
    12             System.out.println("男人正在跑步");
    13         }
    14     //相当于:public static final Sex woman=new Sex("女");
    15     },woman("") {
    16         @Override
    17         public void run() {
    18             System.out.println("女人正在游泳");
    19         }
    20     };
    21     String value;
    22     private Sex(String value){
    23         this.value=value;
    24     }
    25     //成员函数
    26     public void getValue(){
    27         System.out.println("Value:"+value);
    28     }
    29     public abstract void run();
    30 }
    31 
    32 public class Demo2 {
    33     public static void main(String[] args) {
    34         Sex sex=Sex.man;//获取枚举类对象
    35         sex.value="";
    36         sex.getValue(); //返回值:男
    37         sex.run(); //返回值:男人正在跑步
    38     }
    39 }

    3、枚举要注意的细节(上面例子的总结)

       1.枚举类也是一个特殊的类.
       2.枚举值默认的修饰符是public static final
       3.枚举值就是枚举值所属的类的类型,枚举值指向的是本类的对象
       4.枚举类构造方法默认修饰符private
       5.枚举类可以定义自己的成员变量与成员函数
       6.枚举类可以定义自己的构造函数,单是构造函数修饰符必须是private
       7.枚举类可以存在抽象的方法,但是枚举值必须去实现抽象方法
       8.枚举值必须要位于枚举类的第一个语句

    4、实例

    需求:定义一个用户的性别不能随意更改/实例化

    方式1:(不用枚举)

     1 package com.dhb.enumeration;
     2 
     3 /**
     4  * @author DSHORE / 2018-6-21
     5  *
     6  */
     7 class Gender{ //自定义一个性别类
     8     String value;
     9     public static final Gender man=new Gender("");
    10     public static final Gender woman=new Gender("");
    11 
    12     private Gender(String value){
    13             this.value=value;
    14     }
    15 }
    16 
    17 class Person{//人员类
    18     private String name;
    19     private Gender sex;
    20     public String getName() {
    21         return name;
    22     }
    23     public void setName(String name) {
    24         this.name = name;
    25     }
    26     public Gender getSex() {
    27         return sex;
    28     }
    29     public void setSex(Gender sex) {
    30         this.sex=sex;
    31     }
    32 }
    33 
    34 public class Demo1 {
    35     public static void main(String[] args) {
    36         Person p=new Person();
    37         p.setName("张三");
    38         p.setSex(Gender.woman);
    39         System.out.println("姓名:"+p.getName()+""+p.getSex().value);//返回值:姓名:张三    ,女
    40     }
    41 }

    方式2:(用了枚举)

     1 package com.dhb.enumeration;
     2 
     3 /**
     4  * @author DSHORE / 2018-6-21
     5  *
     6  */
     7 enum Gender{ //枚举类
     8     man(""),woman("");
     9     String value;
    10     private Gender(String value){
    11         this.value=value;
    12     }
    13 }
    14 
    15 class Person{//人员类
    16     private String name;
    17     private Gender sex;
    18     public String getName() {
    19         return name;
    20     }
    21     public void setName(String name) {
    22         this.name = name;
    23     }
    24     public Gender getSex() {
    25         return sex;
    26     }
    27     public void setSex(Gender sex) {
    28         this.sex=sex;
    29     }
    30 }
    31 
    32 public class Demo1 {
    33     public static void main(String[] args) {
    34         Person p=new Person();
    35         p.setName("张三");
    36         p.setSex(Gender.woman);
    37         System.out.println("姓名:"+p.getName()+""+p.getSex().value);//返回值:姓名:张三    ,女
    38     }
    39 }

     

     

     附:

     1 package com.dhb.enumeration;
     2 
     3 /**
     4  * @author DSHORE / 2018-6-21
     5  *
     6  */
     7 /*
     8  * switch适用的数据类型:byteshortintcharString枚举类型
     9  * 
    10  * 注意:
    11  * case后面跟的是枚举值,只需要单写枚举值即可,不需要在声明该枚举值是属于哪个枚举类的.
    12  * */
    13 enum Season{
    14     spring("春季"),summer("夏季"),autumn("秋季"),winter("冬季季");
    15     
    16     String value;
    17     private Season(String value) {
    18         this.value = value;
    19     }
    20 }
    21 
    22 enum Persons{
    23     student("张三"),worker("劳动者");
    24     
    25     String values;
    26     private Persons(String values) {
    27         this.values = values;
    28     }
    29 }
    30 
    31 public class Demo3 {
    32     public static void main(String[] args) {
    33         Season season = Season.summer;
    34         Persons person = Persons.student;
    35         Persons persons = Persons.worker;
    36         switch (season) {
    37         case spring:
    38             System.out.println(season.value+",春暖花开..."+person.values+"是个"+persons.values);
    39             break;
    40         case summer:
    41             System.out.println(season.value+",荷塘月色..."+person.values+"是个"+persons.values);
    42             break;
    43         case autumn:
    44             System.out.println(season.value+",果实累累..."+person.values+"是个"+persons.values);
    45             break;
    46         case winter:
    47             System.out.println(season.value+",银装素裹....."+person.values+"是个"+persons.values);
    48             break;
    49         }
    50     }
    51 }

    运行结果图

     

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:https://www.cnblogs.com/dshore123/p/9210345.html

    欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    第 9 章 完成购物车
    新建 ASP.NET MVC 项目快速代码
    一个真正的应用程序(第7~8章)(所需代码在下一篇随笔里)
    HTML
    squid 高匿设置
    Linux操作系统上ADSL拨号上网的方法详解
    MYSQL-max_binlog_cache_size参数
    mysql查杀会话
    centos配置Tomcat以指定的身份(非root)运行
    mysql load data导入脚本
  • 原文地址:https://www.cnblogs.com/dshore123/p/9210345.html
Copyright © 2020-2023  润新知