首页 » SEO优化 » 列举私有属性php技巧_Java进阶_列举 enum

列举私有属性php技巧_Java进阶_列举 enum

访客 2024-12-15 0

扫一扫用手机浏览

文章目录 [+]

但是一个类究竟创建多少个工具,并且工具代表的值我们是无法限定的

以是,如果开拓中须要一组值,须要的数据是明确的,就可以利用列举

列举私有属性php技巧_Java进阶_列举 enum

2 列举观点

列举类是一种分外形式的Java类,列举类的工具个数是有限且明确的。
比如:

列举私有属性php技巧_Java进阶_列举 enum
(图片来自网络侵删)

星期:Monday(星期一)…Sunday(星期天)

性别:Man(男)、Woman(女)

时令:Spring(春天)…Winter(冬天)

支付办法:Cash(现金)、WeChatpay(微信支付)、AliPay(支付宝支付)、BankCard(银行卡支付)、CreditCard(信用卡支付)

订单状态:Nonpayment(未付款)、Paid(已付款)、Fulfilled(已配货)、Delivered(已发货)、Return(退货)、Checked(已收货)

以是,如果当我们须要定义一组常量表示不同的状态时,就建议利用列举类

JDK5以前是须要自定义列举类的,JDK5往后可以利用关键字enum来定义列举类

我们先来用传统class的办法来实现自定义列举类:

3 自定义列举类

列举类中声明的每一个列举值代表列举类的一个实例工具

与Java中的普通类一样,在声明列举类时,也可以声明属性、方法和布局函数

但是列举类的布局函数必须为私有的,我们一起来练习一下:

package cn.cxy.exec;

/本类用于自定义列举类/

public class SeasonTest {

public static void main(String[] args) {

System.out.println(Season.SPRING.getSEASON_NAME());//春季

System.out.println(Season.SUMMER.getSEASON_DESC());//夏日炎炎

System.out.println(Season.AUTUMN);

//Season{SEASON_NAME='秋季', SEASON_DESC='天高气爽'}

}

}

//1.自定义列举类

class Season{

//2.定义本类的私有属性,为了防止值被修正,须要设置为final

private final String SEASON_NAME;//时令名

private final String SEASON_DESC;//时令描述

//3.私有化本类的布局方法--防止外界随意创建本类工具

private Season(String seasonName,String seasonDesc){

this.SEASON_NAME = seasonName;//在布局中给本类的属性赋值

this.SEASON_DESC = seasonDesc;

}

//4.供应当前列举类的多个工具

public final static Season SPRING = new Season("春季","春暖花开");

public final static Season SUMMER = new Season("夏季","夏日炎炎");

public final static Season AUTUMN = new Season("秋季","天高气爽");

public final static Season WINTER = new Season("冬季","冬雪凛凛");

//5.天生对应的get的方法,获取本类的两个属性值

public String getSEASON_NAME() {

return SEASON_NAME;

}

public String getSEASON_DESC() {

return SEASON_DESC;

}

//6.天生toString方法方便查看

@Override

public String toString() {

return "Season{" +

"SEASON_NAME='" + SEASON_NAME + '\'' +

", SEASON_DESC='" + SEASON_DESC + '\'' + '}';

}

}

4 利用关键字enum定义列举类

package cn.cxy.exec;

/本类用于利用enum关键字定义列举类/

public class ColorTest {

public static void main(String[] args) {

//6.进行测试

System.out.println(403 Forbidden);//RED

System.out.println(Color.ORANGE.getCOLOR_NAME());//橙色

System.out.println(Color.ORANGE.getCOLOR_NUMBER());//2

}

}

//1.利用enum关键字定义列举类

enum Color {

//2.写出本类对应的多个列举工具

/1.public static final可以省略不写

2.列举工具不能像自定义列举类工具时new,要按照下面的语法:

列举名1(值1,值2),列举名2(值1,值2),列举名3(值1,值2);

3.不须要天生toString,由于利用enum关键字定义的列举类继续了java.lang.Enum

在Enum中重写了继续自Object的toString(),直接打印的便是列举名/

RED("赤色",1),

ORANGE("橙色",2),

YELLOW("黄色",3),

GREEN("绿色",4),

CYAN("青色",5),

BLUE("蓝色",6),

PURPLE("紫色",7);

//3.定义列举类的多个私有属性

private final String COLOR_NAME;

private final int COLOR_NUMBER;

//4.定义本类的布局方法

private Color(String colorName, int colorNumber) {

this.COLOR_NAME = colorName;

this.COLOR_NUMBER = colorNumber;

}

//5.天生属性对应的两个get()

public String getCOLOR_NAME() {

return COLOR_NAME;

}

public int getCOLOR_NUMBER() {

return COLOR_NUMBER;

}

}

总结:

1.public static final可以省略不写

2.列举工具不能像自定义列举类工具时new,要按照下面的语法:

列举名1(值1,值2),列举名2(值1,值2),列举名3(值1,值2);

3.不须要天生toString,由于利用enum关键字定义的列举类继续了java.lang.Enum

在Enum中重写了继续自Object的toString(),直接打印的便是列举名

5 实现接口的列举类

列举类也可以实现接口、或继续抽象类,有两种实现方案:

方案一:列举类与接口建立实现关系,在列举类中实现接口中定义的抽象方法

效果:每个列举工具调用实现后的方法都是同一个效果

方案二:列举类与接口建立实现关系,在列举类每个列举工具后分别实现抽象方法

效果:不同的列举工具调用实现后的方法便是不同的效果

package cn.cxy.exec;

/本类用于实现列举实现接口/

public class TestGame {

public static void main(String[] args) {

//8.进行测试

Game.ROCK.show();//猜丁壳出的是石头

Game.SCISSORS.show();//猜丁壳出的是剪刀

Game.PAPER.show();//猜丁壳出的是布

System.out.println(Game.ROCK.getName());//石头

System.out.println(Game.ROCK.getNum());//0

}

}

//6.定义接口与接口中的抽象方法

interface Info{

void show();

}

//1.通过enum关键字定义列举类

enum Game implements Info{

//2.列出本类的列举工具

ROCK("石头",0){

//7.2在每个列举工具后实现接口的抽象方法

public void show() {

System.out.println("猜丁壳出的是石头");

}

},

SCISSORS("剪刀",2){

public void show() {

System.out.println("猜丁壳出的是剪刀");

}

},

PAPER("布",5){

public void show() {

System.out.println("猜丁壳出的是布");

}

};

//3.定义本类的属性

private final String name;

private final int num;

//4.创建本类的布局函数

private Game(String name,int num){

this.name = name;

this.num = num;

}

//5.天生属性对应的get()

public String getName() {

return name;

}

public int getNum() {

return num;

}

//7.1列举实现接口抽象方法,方案一

// @Override

// public void show() {

// System.out.println("猜丁壳游戏~");

// }

}

6 Enum类的紧张方法

String name() 返回此列举常量的名称,在其列举声明中对其进行声明

int ordinal() 返回列举常量的序数(它在列举声明中的位置,个中初始常量序数为零)

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

返回带指定名称的指定列举类型的列举常量

values()此方法虽然在JDK文档中查不到,但是每个列举类都具有该方法,它用于遍历列举的所有列举值

package cn.cxy.exec;

import org.junit.Test;

import java.util.Arrays;

public class TestScore {

//测试列举的常用方法

@Test

public void test3() {

//01-返回当前列举值的名称

System.out.println(Score.B.name());//B

System.out.println(Score.B.toString());//B

//02-打印当前列举值在列举类中声明的顺序

System.out.println(Score.B.ordinal());//1,第2个列举值

/利用场景:

实际开拓中表单提交过来的值是字符串类型,须要验证此字符串是否是我们定义的列举值

如果可以转换,解释提交的字符串没有问题,是我们预先定义好的列举值

如果不可以转换,解释提交过来的字符串有误,会报造孽参数非常,没有这个列举值/

//03-将字符串转成对应的列举类型,把稳这个类型必须是已有的列举值

//String str = "Cc";//IllegalArgumentException: No enum constant cn.tedu.oop.Score.Cc

String str = "C";

Score score = Score.valueOf(Score.class, str);

System.out.println(score);

//将字符串转成列举类型的办法2,此种推举,大略

System.out.println(Score.valueOf(str));

Score[] values = Score.values();

System.out.println(Arrays.toString(values));

}

}

//1.利用enum关键字定义列举类

enum Score {

//2.列出本类的多个列举工具

A("100-80") {

//7.给每个列举工具实现刚刚步骤6定义的抽象方法

public String localeScore() {

return "优";

}

}, B("79-60") {

public String localeScore() {

return "中";

}

}, C("59-0") {

public String localeScore() {

return "差";

}

};

//3.定义一个私有的属性,封装每个工具对应的分数

private final String score;

//4.定义一个私有的布局函数

private Score(String score) {

this.score = score;

}

//5.定义一个输出成绩的抽象方法

public abstract String localeScore();

//6.定义一个公共的获取成绩的方

public String getScore() {

return this.score;

}

}

把稳1:如果列举类中只有一个工具,则可以看做单例模式的一种实现办法

enum A {//相称于定义了一个类 class A;

A;//相称于创建了这个类唯一的一个工具new A(); 类似于单例设计模式

}

把稳2:JDK5中扩展了switch语句,除了可以吸收byte short char int ,还可以吸收列举类型

7 作业需求:

编写一个关于星期几的列举WeekDay

哀求:列举值:MON,TUE,WED,THR,FRI,SAT,SUN

该列举要有一个方法,调用该方法返回中文格式的星期几

package cn.tedu.oop;

import org.junit.Test;

public class Demo2 {

@Test

public void test(){

//6.1拿到指定的列举名

System.out.println(WeekDay.MON);//MON

//6.2拿到指定的列举名对应的值

System.out.println(WeekDay.MON.getValue());//星期一

}

}

//1.定义列举类

enum WeekDay {

//2.定义列举类中的列举与其对应的值

MON("星期一"), TUE("星期二"), WES("星期三"), THR("星期四"), FRI("星期五"), SAT("星期六"), SUN("星期日");

//3.定义列举类中的私有属性

private String day;

//4.定义列举类的布局函数

private WeekDay(String day) {

this.day = day;

}

//5.定义列举类的方法,并获取列举对应的值

public String getValue(){

return this.day;

}

}

标签:

相关文章

大数据时代税收变革与创新,挑战与机遇

随着信息技术的飞速发展,大数据时代已经来临。大数据在各个领域的应用日益广泛,税收领域也不例外。大数据税收作为一种新型的税收管理方式...

SEO优化 2024-12-16 阅读0 评论0

php上传文件地址技巧_php的文件上传

这里首先声明一下这一章的内容比较多,比较难,你要抱着和自己去世磕的态度。细微之处不放过,多敲多练是王道。 学习就像爬山,得一步一步...

SEO优化 2024-12-16 阅读0 评论0