枚举类

枚举类不出来的时候只能如下写代码

 //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_枚举类的更多相关文章

  1. java_枚举类枚举值

    package ming; enum Gender{ MALE("男"),FEMALE("女"); //public static final Gender M ...

  2. java_包含抽象方法的枚举类

    package ming; enum Operation { PLUS { public double eval(double x, double y) { return x + y; } }, MI ...

  3. java_实现接口的枚举类

    package ming; interface GenderDoc { void info(); } enum Gender implements GenderDoc { // public stat ...

  4. Linq专题之提高编码效率—— 第三篇 你需要知道的枚举类

     众所周知,如果一个类可以被枚举,那么这个类必须要实现IEnumerable接口,而恰恰我们所有的linq都是一个继承自IEnumerable接口的匿名类, 那么问题就来了,IEnumerable使了 ...

  5. 0029 Java学习笔记-面向对象-枚举类

    可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如单例类 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象:还有就是枚举类. 创建少数几个对象, ...

  6. FastJson转换自定义枚举类

    在项目中有些状态需要采用枚举类型,在数据库中保存的是name(英文),而前台需要显示的是text(中文). 所以这就需要自己去实现序列. 例如对象: import java.util.Date; im ...

  7. Java 枚举类

    如果要定义一个枚举类: public enum Size { SAMLL, MEDIUM, LARGE, EXTRA, EXTRA_LARGE}; 实际上,这个声明定义的类型是一个类,它刚好有4个实例 ...

  8. SpringMVC 自动封装枚举类的方法

    springmvc默认无法自动封装枚举类,解决方法如下: 1.枚举类 public enum GoodsPromoteEnum { /** * 0 精品 */ fine("精品", ...

  9. 枚举类valueOf方法的疑问

    枚举类中valueOf方法只有一个参数而Enum类中有两个参数,请问Enum实例类中的valueOf方法是从何处继承而来?   答案:jvm进行编译的时候添加的.

随机推荐

  1. C#进阶之路(六):表达式进行类的赋值

    好久没更新这个系列了,最近看.NET CORE源码的时候,发现他的依赖注入模块的很多地方用了表达式拼接实现的.比如如下代码 private Expression<Func<ServiceP ...

  2. 【转】深入剖析Java中的装箱和拆箱

    深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱 ...

  3. Mezzanine汉化

    1.编辑/path/to/projectname/projectname下的setting.pyALLOWED_HOSTS = ['www.xxx.com'] 为了使用域名来访问TIME_ZONE = ...

  4. laravel DB::raw() DB::RAW()的用法

    laravel中的 DB::raw() 和DB::RAW()是同一种功能;用法如下 public function test() { $real = 66;]); $res = \ai\Models\ ...

  5. 除了IE浏览器能识别之外,其他浏览器都不能识别的html写法

    最近写html页面的时候发现顶部边界margin-top用了定位之后,IE的跟其他浏览器不同,所以用到了把IE跟其他浏览器区分开来的写法 <!--[if !IE]> <div cla ...

  6. Java-API-Package:java.io

    ylbtech-Java-API-Package:java.io 1.返回顶部 1. Package java.io Provides for system input and output thro ...

  7. CSS-MUI:笔记-01

    ylbtech-CSS-MUI:笔记 1. mui-navbar   导航条返回顶部 1.1.样式一 1.2. <div class="mui-navbar-inner mui-bar ...

  8. js生成邀请码(2)

    //生成邀请码方法一 /*function createInviteCode() { var s = [],a=6,b=10; var chars = "123456789QWERTYUIP ...

  9. MyBatis----延迟加载demo

    一:创建数据库脚本drop table project_info; drop table status; create table status( id number(10) primary key, ...

  10. Java堆初始大小的建议值

    摘自:<Java Performance>第三章 Initial Heap Space Size Configuration This section describes how to u ...