Java分享笔记:自定义枚举类 & 使用enum关键字定义枚举类
在JDK1.5之前没有enum关键字,如果想使用枚举类,程序员需要根据Java语言的规则自行设计。从JDK1.5开始,Java语言添加了enum关键字,可以通过该关键字方便地定义枚举类。这种枚举类有自己的程序编写规则,并且具有一些特殊方法。
下面是笔者分别针对自定义枚举类和enum枚举类的程序设计。
[1] 自定义枚举类
/*-------------------------
JDK1.5之前通过自行设计程序,来自定义枚举类
下面以季节为例自定义枚举类
--------------------------*/
package pack01; public class Season {
public static void main(String[] args) { FourSeasons spring = FourSeasons.SPRING;
FourSeasons winter = FourSeasons.WINTER; System.out.println( spring.getName() );
System.out.println( spring.toString() );
System.out.println();
System.out.println( winter.getName() );
System.out.println( winter.toString() );
}
} // 定义表示季节的枚举类,共有4个内部对象
class FourSeasons { // 定义类的属性:私有的,终态的,在构造器中进行初始化
private final String name; // 将构造器私有化,使构造器不能在类的外部被使用
private FourSeasons(String name) {
this.name = name;
} // get方法返回属性值
public String getName() {
return name;
} // 覆盖toString方法,设置默认打印值
public String toString() {
return "This is " + name;
} // 在类的内部创建对象
public static final FourSeasons SPRING = new FourSeasons("spring");
public static final FourSeasons SUMMER = new FourSeasons("summer");
public static final FourSeasons AUTUMN = new FourSeasons("autumn");
public static final FourSeasons WINTER = new FourSeasons("winter");
}
[2] 使用enum关键字定义枚举类
/*-------------------------
JDK1.5开始可以通过enum关键字来定义枚举类
使用enum关键字定义枚举类与自定义枚举类的程序编写不同之处:
....//将关键字class用关键字enum替换
....//必须在类体的一开始创建内部的对象,并遵循一定的书写规则
....//枚举类有两个常用的方法:
........//values():将枚举类中的所有对象以数组的方式返回
........//valueOf(String arg0):将类中的某一个对象的名字以字符串的形式作为参数传入,返回该对象
....//枚举类可以实现接口,覆盖接口中的抽象方法既可以写在枚举类的类体中,也可以写在对象后的花括号中
........//若写在了对象后的花括号中,则该方法不再是所有对象公共的。不同对象调用同一方法时,可以得到不同的效果。 下面以季节为例使用enum关键字定义枚举类
--------------------------*/
package pack02; public class Season {
public static void main(String[] args) { //测试枚举类中的values()方法
FourSeasons[] seasons = FourSeasons.values();
for( int i=0; i<seasons.length; ++i ) {
System.out.println( seasons[i].getName() );
}
System.out.println(); //测试枚举类中的valueOf()方法,创建春天的对象
FourSeasons spring = FourSeasons.valueOf("SPRING");
System.out.println( "valueOf(\"SPRING\"): " + spring.getName() + '\n' ); //创建夏,秋,冬的对象
FourSeasons summer = FourSeasons.SUMMER;
FourSeasons autumn = FourSeasons.AUTUMN;
FourSeasons winter = FourSeasons.WINTER;
spring.printWords();
summer.printWords();
autumn.printWords();
winter.printWords();
//上面调用接口中的方法打印出来的结果,春天与其他三个季节是不同的,因为SPRING对象重新覆盖了接口中的方法
}
} //定义一个接口,让枚举类来实现该接口
interface Inter{
void printWords();
} // 定义表示季节的枚举类,共有4个内部对象
enum FourSeasons implements Inter { //使用enum关键字,并实现上述接口 //必须在类体中的一开始创建对象,对象之间用逗号分开,并且要遵循一定的书写规则
SPRING("spring"){
public void printWords() {//在创建对象时可以单独重写接口中的方法,这时类体中的重写方法对于该对象将不再起作用
System.out.println("This is spring");
}
},
SUMMER("summer"),
AUTUMN("autumn"),
WINTER("winter"); // 定义类的属性:私有的,终态的,在构造器中进行初始化
private final String name; // 将构造器私有化,使构造器不能在类的外部被使用
private FourSeasons(String name) {
this.name = name;
} // get方法返回属性值
public String getName() {
return name;
} // 重写接口中的抽象方法
public void printWords() {
System.out.println("There are four different seasons.");
}
}
注:希望与各位读者相互交流,共同学习进步。
Java分享笔记:自定义枚举类 & 使用enum关键字定义枚举类的更多相关文章
- Kotlin——中级篇(五):枚举类(Enum)、接口类(Interface)详解
在上一章节中,详细的类(class)做了一个实例讲解,提到了类(class)的实例化.构造函数.声明.实现方式.和Java中类的区别等.但是对于Kotlin中的类的使用还远远不止那些.并且在上文中提到 ...
- Java开发笔记(五十四)内部类和嵌套类
通常情况下,一个Java代码文件只定义一个类,即使两个类是父类与子类的关系,也要把它们拆成两个代码文件分别定义.可是有些事物相互之间密切联系,又不同于父子类的继承关系,比如一棵树会开很多花朵,这些花儿 ...
- C#中Monitor类、Lock关键字和Mutex类
线程:线程是进程的独立执行单元,每一个进程都有一个主线程,除了主线程可以包含其他的线程.多线程的意义:多线程有助于改善程序的总体响应性,提高CPU的效率.多线程的应用程序域是相当不稳定的,因为多个线程 ...
- Java分享笔记:泛型类的定义与使用
当类中要操作的引用数据类型不确定时,可以定义泛型类完成扩展.下面是程序演示. package packB; class Student { //定义学生类 public String st = &qu ...
- 【JAVA】笔记(2)---面向过程与面向对象;类,对象;实例变量,引用;构造方法;
面向过程与面向对象: 1.面向过程思想的典型栗子是C语言,C语言实现一个程序的流程是:在主函数中一步一步地罗列代码(定义子函数来罗列也是一样的道理),以此来实现我们想要的效果: 2.面向对象思想的典型 ...
- Java分享笔记:创建多线程 & 线程同步机制
[1] 创建多线程的两种方式 1.1 通过继承Thread类创建多线程 1.定义Thread类的子类,重写run()方法,在run()方法体中编写子线程要执行的功能. 2.创建子线程的实例对象,相当于 ...
- Java开发笔记(六十二)如何定义函数式接口
前面介绍了Lambda表达式的用法,从实践中发现它确实极大地方便了开发者,然而不管是匿名内部类还是Lambda表达式,所举的例子都离不开各类数组的排序方法,倘使Lambda表达式仅能用于sort方法, ...
- Java开发笔记(四十九)关键字super的用法
前面介绍了如何从Bird类继承而来Swallow类,按道理子类应当继承父类的所有要素,但是对于构造方法来说,Swallow类仅仅继承了Bird类的默认构造方法,并未自动继承带参数的构造方法.如果子类想 ...
- Java开发笔记(五十五)关键字static的用法
前面介绍嵌套类的时候讲到了关键字static,用static修饰类,该类就变成了嵌套类.从嵌套类的用法可知,其它地方访问嵌套类之时,无需动态创建外层类的实例,直接创建嵌套类的实例就行.其实static ...
随机推荐
- lua load
load (chunk [, chunkname [, mode [, env]]]) 加载一个代码块. 如果 chunk 是一个字符串,代码块指这个字符串. 如果 chunk 是一个函数, load ...
- Swiper双向轮播
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- js匿名函数使用&传参
function () { alert("error"); } //报错:匿名函数不能直接调用 使用 0x01 (function () { alert("Success ...
- Java NIO(一) Java NIO 概述
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Sel ...
- mybooklist 日志5.12
这是一个很悲伤的日子. 今天,我不发朋友圈了.可手头的工作还是要做的,虽然说这是工作,也不能完全算. 在上班的时间做的事情,可以称得上工作,可这不是老板交给我做的事情.国有企业领导很两难,老板你是要辞 ...
- jdk时区相差8小时
设置JVM的默认时区为东八区(北京时间)在下面四个目录(jre6\lib\zi\Etc.jre6\lib\zi.jdk1.6.0_18\jre\lib\zi\Etc.jdk1.6.0_18\jre\l ...
- spring与mybatis的整合
整合的思路 SqlSessionFactory对象放到spring容器中作为单例存在. 传统dao的开发方式中,从spring容器中获得sqlsession对象. Mapper代理形式中,从sprin ...
- OpenSSL.Net 在生产环境中无法正常加载的原因分析与解决 z
http://blog.csdn.net/wangjia184/article/details/6990098 http://www.openssl.org/ 在本地测试好好的代码部署到生产环境后,遇 ...
- 怎么在overflow-y:sroll的情况下 隐藏滚动条
当我们的内容超出了我们的div,往往会出现滚动条,影响美观. 尤其是当我们在做一些导航菜单的时候.滚动条一出现就破坏了UI效果. 我们不希望出现滚动条,也不希望超出去的内容被放逐,就要保留鼠标滚动的 ...
- 【转】彻底理解安卓里的ldpi、mdpi、hdpi、xhdpi、xxhdpi文件夹含义
这个问题我相信困惑了好多人包括很多老鸟,而且有的人以为自己理解其实是错误的,包括之前的我在内,在做安卓适配的时候,一般让美工做720*1280的切图,就直接放到xhdpi下,如果是做了1080*192 ...