Java_枚举类
枚举类
枚举类不出来的时候只能如下写代码
//Student.java
package cn.itcast.enumeration; public class Student {
private String name;
private String grade;//A B C D E
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
if(!grade.matches("[ABCDE]")){
throw new RuntimeException("成绩输入错误");
}
this.grade = grade;
}
}
第17行代码使用了正则表达式。
//Test.java
package cn.itcast.enumeration; public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.setGrade("H");
}
}
这个代码有一点不好,就是给赋值了,但是程序运行是才报错。如何让写代码的时候就报错?看如下代码。
//Student.java
package cn.itcast.enumeration2; public class Student {
private String name;
private Grade grade;//A B C D E
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
} class Grade{
private Grade(){} public static Grade A = new Grade();
public static Grade B = new Grade();
public static Grade C = new Grade();
public static Grade D = new Grade();
public static Grade E = new Grade();
}
定义一个自己使用的类,再赋值的时候只能赋指定的值,其他值都报错。
//Test.java
package cn.itcast.enumeration2; public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.setGrade(Grade.A);
}
}
这种方法太复杂,下面使用枚举,只要三行就能取代21-29行的代码
//Student.java
package cn.itcast.enumeration3; public class Student {
private String name;
private Grade grade;//A B C D E
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
/*
class Grade{
private Grade(){} public static Grade A = new Grade();
public static Grade B = new Grade();
public static Grade C = new Grade();
public static Grade D = new Grade();
public static Grade E = new Grade();
}
*/
enum Grade{//也是定义了一个类
A,B,C,D,E;//对应的是Grade类的对象
}
使用枚举类取代21-29行的代码。
package cn.itcast.enumeration3;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.setGrade(Grade.A);
}
}
这种方法比较好,但是如何在枚举类里面封装更多的信息?看下面的代码
//Student.java
package cn.itcast.enumeration4; public class Student {
private String name;
private Grade grade;//A B C D E
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
/*
class Grade{
private Grade(){} public static Grade A = new Grade();
public static Grade B = new Grade();
public static Grade C = new Grade();
public static Grade D = new Grade();
public static Grade E = new Grade();
}
*/
//如何让枚举封装更多的信息(如何让枚举对象拥有自己的属性)
enum Grade{//也是定义了一个类
A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0");//对应的是Grade类的对象 private String value;
private Grade(String value){
this.value = value;
}
public String getValue(){
return value;
}
}
封装成绩的同时,可以封装分数段,增加属性。
//Test.java
package cn.itcast.enumeration4; public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.setGrade(Grade.A);
System.out.println(Grade.A.getValue());
}
}
那么如何在枚举类里面封装各自的方法呢?看下面的代码。
//Student.java
package cn.itcast.enumeration6; public class Student {
private String name;
private Grade grade;//A B C D E
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
/*
class Grade{
private Grade(){} public static Grade A = new Grade();
public static Grade B = new Grade();
public static Grade C = new Grade();
public static Grade D = new Grade();
public static Grade E = new Grade();
}
*/
//如何让枚举对象拥有自己的属性和各自的方法
enum Grade{//也是定义了一个类
A("100-90"){
public String toLocalString(){
return "优";
}
},B("89-80"){
public String toLocalString(){
return "良";
}
},C("79-70"){
public String toLocalString(){
return "中";
}
},D("69-60"){
public String toLocalString(){
return "一般";
}
},E("59-0"){
public String toLocalString(){
return "差";
}
};//对应的是Grade类的对象 private String value;
private Grade(String value){
this.value = value;
}
public String getValue(){
return value;
}
public abstract String toLocalString();
}
返回成绩的中文表示。
package cn.itcast.enumeration6;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
s.setGrade(Grade.A);
System.out.println(Grade.A.getValue());
System.out.println(Grade.A.toLocalString());
}
}
注意:枚举类的对象的方法必须是私有的,不能公有。
枚举类有如下特性:
1.枚举类也是一种特殊的Java类。
2.枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
3.与Java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但是枚举类的构造函数必须为室友的(这点不难理解)。
4.枚举类也可以实现接口、或基层抽象类。
5.JDK5中扩展了switch语句,它除了可以接收int、byte、char、short外,还可以接收一个枚举类型。
6.若枚举类只有一个枚举值,则可以当做单态设计模式。
下面这样写也是单态设计模式。
enum Demo{
demo;
}
枚举类的常用方法
public void test(){
//枚举类的常用方法name,valueOf,values
String name = "B";
Grade g = Grade.valueOf(name);//把字符串转成枚举对象
System.out.println(g.name());//获取枚举对象名称
Grade gs[] = Grade.values();
for(Grade g1:gs){
System.out.println(g1.name());
}
}
Java_枚举类的更多相关文章
- java_枚举类枚举值
package ming; enum Gender{ MALE("男"),FEMALE("女"); //public static final Gender M ...
- java_包含抽象方法的枚举类
package ming; enum Operation { PLUS { public double eval(double x, double y) { return x + y; } }, MI ...
- java_实现接口的枚举类
package ming; interface GenderDoc { void info(); } enum Gender implements GenderDoc { // public stat ...
- Linq专题之提高编码效率—— 第三篇 你需要知道的枚举类
众所周知,如果一个类可以被枚举,那么这个类必须要实现IEnumerable接口,而恰恰我们所有的linq都是一个继承自IEnumerable接口的匿名类, 那么问题就来了,IEnumerable使了 ...
- 0029 Java学习笔记-面向对象-枚举类
可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如单例类 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象:还有就是枚举类. 创建少数几个对象, ...
- FastJson转换自定义枚举类
在项目中有些状态需要采用枚举类型,在数据库中保存的是name(英文),而前台需要显示的是text(中文). 所以这就需要自己去实现序列. 例如对象: import java.util.Date; im ...
- Java 枚举类
如果要定义一个枚举类: public enum Size { SAMLL, MEDIUM, LARGE, EXTRA, EXTRA_LARGE}; 实际上,这个声明定义的类型是一个类,它刚好有4个实例 ...
- SpringMVC 自动封装枚举类的方法
springmvc默认无法自动封装枚举类,解决方法如下: 1.枚举类 public enum GoodsPromoteEnum { /** * 0 精品 */ fine("精品", ...
- 枚举类valueOf方法的疑问
枚举类中valueOf方法只有一个参数而Enum类中有两个参数,请问Enum实例类中的valueOf方法是从何处继承而来? 答案:jvm进行编译的时候添加的.
随机推荐
- Reinforcement Learning Q-learning 算法学习-1
- Java 利用Gson将json字符串转换为List<Map<String, String>>
json字符串类似于: [ { "userPhone": "123", "userNo": "123-2", " ...
- grunt 压缩js css html 合并等配置与操作详解
module.exports = function(grunt){ //1.引入 grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTa ...
- bzoj 4403 序列统计——转化成组合数的思路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4403 先说说自己的想法吧. 设f[ i ][ j ]表示当前在倒数第 i 个位置,当前和后面 ...
- oracle+110个常用函数
1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from du ...
- Eureka详解
该章节紧接第三章,主要是对一些理论上的指导,帮助更好的理解服务治理. 基础架构 eureka服务治理的基础架构包含三个要素: 1)服务注册中心:eureka提供服务端,提供服务的注册与发现功能. 注: ...
- 转:三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构
在微信公众号看到一篇关于mycat的文章,觉得分析的很不错,给大家分享一下 三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构 原文链接:https://mp.weixin.qq.com/s ...
- IDA Pro权威指南学习笔记(一)
一直不懂逆向,最近刚好不忙,于是学习逆向,用来做笔记,顺便和大家分享交流. 参考书籍<IAD PRO权威指南> 工具: PETools: ETools 是另一款很好的PE文件编辑工具,以前 ...
- [更新中]【fit-flow使用总结】djang开发中git flow使用总结
djang开发中git flow使用总结 初次接触可以先看看此链接上关于git flow的东西http://danielkummer.github.io/git-flow-cheatsheet/ind ...
- Diag:Diagonal matrices and diagonals of a matrix
Diag:Diagonal matrices and diagonals of a matrix Syntax X = diag(v,k) X = diag(v) v = diag(X,k) v = ...