`

Enum

    博客分类:
  • J2SE
阅读更多
    http://blog.sina.com.cn/s/blog_6c19162301014yuj.html
一、Eclipse集成开发环境:
Eclipse :2011年11月,IBM投资4000万美元贡献给开源社区。Eclipse 是支持多语言的开发平台。它的价值是为可扩展的集成开发环境提供了一个开放源码平台,这个平台允许任何人构建与环境和其他工具无缝集成的工具(插件)。Eclipse除了一个小型的运行时核心之外,其余的都是插件。
IDE:Integrated Development Environment,集成开发环境。
常见java英文缩写:
JDK:Java Development Kit,编写Java程序的程序员使用的软件。
JRE:Java Runtime Environment,运行java程序的用户使用的软件。
SE:Standard Edition,用于桌面或简单的服务器应用的java平台。
EE:Enterprise Edition,用于复杂的服务器应用的Java平台。
ME:Micro Edition,用于微型手机Cell phone和其他小型设备的Java平台。
J2:Java 2,一个过时的术语,用于描述1998年——2006年之间的Java版本。
SDK:Software Development Kit,一个过时的术语,用于描述1998年——2006年之间的JDK。
u:Update,Sun的术语,用于发布修改的bug。
NetBeans:Sun的集成开发环境。
MyEclipse:其实就是Eclipse的一个插件(plugin),主要用于Java web开发。
JDT:开发java所需要的插件。
CDT:开发C和C++所需要的插件。
Perspective:透视图(也叫视角);将某些有联系的小窗口组成的集合叫做透视图。想要显示这些小窗口只要切换到这个透视图下就可以了,不必一个一个窗口的调用。

Content  Assist:内容助理;ALT+/;

在Eclipse里面如何调试查看一个变量的值?
1,debug as:在Debug透视图进行调试。
2,选中要调试的变量,右击选择Watch。

import:导入一个类或者某个包中的所有类。
import static:导入一个类的某个静态方法或者所有静态方法。

Eclipse插件安装方法:
1.拷贝安装。
2.Links安装:eclipse目录下创建links目录>>在links下创建link文件(文本就行),指定插件路径。path=D:/Plugins-Download/GEF-All-3.1;一个link文件里面可以添加多个path。
3.Update安装。只要知道插件的更新地址就行。Help>>software update>>find and install>>选择“search for new features to install”>>next >>“New Renote Site”,添加新的站点后,按eclipse更新向导就可以完成插件安装了。
查看插件:Help >>About Eclipse SDK>>Plug-in Details

Eclipse常用来开发java项目。一下是关于java的一些概念:
Java程序语言:是目前最先进的面向对象编程语言,它的语法和C语言相当类似。
Java虚拟机:或称java解释器(interpreter),是java安装系统最重要的一部分,java程序被设计成具有可移植性,但也只能在安装了java解释器的平台上运行。
Java平台:所有使用java语言编写的程序都必须依赖构成java平台的预定义类集合才能顺利运行。即:预定义类的集合(就像我们常用的Java SE中的那些包和类的集合)。

二、JDK 5.0(代号:Tiger)中的一些新特性:
5.0中引入了可变参数:
invoke(Object obj,Object... args)
1.4中使用的还是数组:
invoke(Object obj ,Object[] args)

为了兼容1.4版本,如果在向invoke中传入的对象是一个数组类型的时候,我们要么再加一层数组嵌套,要么利用强制转换告诉jvm这里是一个对象。因为如果没有特殊处理的话,jvm将按照1.4的方法处理,即把数组拆开!

MethodCharAt.invoke(str,new Object[]{new int[]{2}});
MethodCharAt.invoke(str,(Object)new int[]{2});

可变参数特点:
1,只能出现在参数列表的最后;
2,... 位于变量类型和变量名之间,前后有无空格都可以。
3,调用可变参数的方法时,编译器为该可变参数隐含创建了一个数组,在方法中以数组的形式访问可变参数。
由于可变参数这个特性是在jdk5.0出现的,所以为了兼容老版本,在使用可变参数时,如果我们希望传入的是一个数组,那么jvm会把这个数组拆开,为了避免这样的情况我们可以,在这个数组外面再加一层数组或者申明这个数组是Objecct的。
Example:
在反射中我们用到的这段代码:
MethodCharAt.invoke(str,new Object[]{new int[]{2}});
MethodCharAt.invoke(str,(Object)new int[]{2});

增强for语句(for\in or foreach):
5.0出现的新特性。格式:for(type variableName : variabaleSet){...}

注意事项:
1,迭代的变量必须在()中定义;
2,集合变量可以是数组集合或实现了Iterable接口的集合类。

注释快捷键:ctrl+shift+/ ;
取消注释快捷键:ctrl+shift+\ ;

如何获得新的知识?去oracle官网下载最新JDK的语言规范(langspec)
英语词汇:specification 规范,明确说明,说明书。

自动装箱:基础数据类型(primitive data type)——>相应的对象。
Integer iObj = 12;

自动拆箱:对象——>相应的基础数据类型。
sop( iObj + 12 );

java中在创建一个小于127的Integer对象时,先到缓冲池中去找有没有一个一样的对象,如果没有就创建一个,如果有直接指向那个对象,这是因为小于127的比较常用,所以可以节省内存资源,这里使用了享元设计模式。

强调:Integer小于127的如果内存中存在相同的,就不再建立新的对象。

享元模式(flyweight):如果有很多很小的对象,我们会经常用到,用的时候该对象的内部状态都没有变化,那么就可以把他变成一个对象。那些不同的属性把它变成方法的参数(外部状态),那些相同的属性叫内部状态。

Alt+shift+x:运行;
Alt+shift+x  j:运行java Application;

三、枚举类型:
枚举类型:定义一种类型变量,它指向的值都是固定的。这些值称作枚举的元素,这些元素可以是这个枚举类或者其子类的一个实例对象。该类型的取值只可以是这些元素和null。

在没有枚举类型以前我们是怎样实现枚举的功能的呢?

下面是我们模拟枚举类型的一个事例:
package cn.itcast.day1;

public abstract class WeekDay1 {
private WeekDay1() {
}

public final static WeekDay1 SUN = new WeekDay1() {

@Override
public WeekDay1 nextDay() {
// TODO Auto-generated method stub
return MON;
}

};
public static final WeekDay1 MON = new WeekDay1() {

@Override
public WeekDay1 nextDay() {
// TODO Auto-generated method stub
return MON;
}

};

public abstract WeekDay1 nextDay();


public String toString() {
return this == SUN ? "SUN" : "MON";
}
}

JDK 5.0后,我们可以怎样做:
public enum WeekDay {
SUN, MON, TUE, WED, THU, FRI, SAT
}

就像类和接口一样,enum关键字定义了一个新的引用类型。这些值就像static final字段一样(这就是为什么它们的名称一般用都大写来表示),WeekDay可以被指定为这七个值中的任意一个和null,但是不能是其他值。

思考:在刚接触到枚举的时候我很不解,既然我们可以自己构造一个和枚举功能相当的类,那么JDK在枚举的升级是不是就是简化操作和代码的升级呢?其实不然,简化操作是一方面,其实更重要的是提供了类型安全性。在5.0之前,我们会可能会使用int 型的1来表示SUN,剩下的以此类推,但是当我们应用weekday时,给一个weekday变量赋值的时候我们如果赋予的是一个大于7的值,那么编译是不会报错的。
5.0以前:
public static final int SUN = 1;
如果我们在另外一个地方引用SUN时:
正确的:int day = WeekDay.SUN;
错误但不会报错:int day = 45;
如果打印某个枚举类型,打印出来的就是枚举的字符串本身,与name()方法获得的一样。

下面是交通灯的一个枚举事例:

public enum TrafficLamp {
Red(25) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return Green;
}
},
Yellow(5) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return Red;
}
},
Green(30) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return Yellow;
}
};
public abstract TrafficLamp nextLamp();

private int time;
//定义枚举类的构造方法时,必须是私有的。
private TrafficLamp(int time) {
this.time = time;
}

注意思考:枚举只有一个成员时,就可以作为单例的实现方式。

下面是引自《Java in a Nutsbell》中必须知道的enum特性,以了解及更有力的使用它们:
1. 枚举没有公共的构造函数,枚举类型唯一的实例就是这些枚举声明。
2. 枚举类型不是Cloneable,所以无法为现有的实例创建副本。
3. 枚举类型实现了java.io.Serializable,所以它们可以被序列化,但java的序列化机制会特别处理它们,以确保不会有新的实例被创建。
4. 枚举类型的实例是永远都不会变的:每一个枚举类型值都会保留它自己的特性。
5. 枚举类型的实例是存储于类型本身的public static final字段里,因为这些字段为final,所以它们不可能被不恰当的值改写。
6. 依照惯例,枚举类型的值都是使用大写字母来编写,就和其他static final字段一样。
7. 因为有一个严格限制的具有不同枚举值的集合,所以使用“==”运算符比较枚举值来代替调用equals() Method 一定是安全的。
8. 然而,枚举集合的确有个可行的equals() method。该method在内部使用==而且他被定义为final,所以他无法被覆盖。这个可行的equals() method允许枚举值被用作类似Set、List与Map Collection的成员。
9. 枚举类型有个可行的hashCode() method,与它们的equals() method一致。和equals()一样,hashCode()也被定义为final的。它允许枚举值配合类似java.util.HashMap这样的类一起使用。
10. 枚举类型实现了Java.lang.comparable,而且compareTo() method会依它们出现在enum声明里的顺序来排序枚举值。
11. 枚举类型包括了可行的toString() method,他会返回枚举值的名称。例如,WeekDay.SUN.toString()在默认情况下会返回“SUN”字符串,此method并没有被定义为final,enum类型可以依选择提供custom implementation。
12. 枚举类型提供了一个静态valueOf(),它与默认的toString()相反。把一个字符串变成一个枚举对象:static valueOf() Method。
13. ordinal():获得这个枚举类的index(从0开始的)。
14. 静态的values() method,返回一个包含完整元素的数组。
15. 枚举类型是java.lang.Enum的子类,他是在java5.0出现的(Enum 本身并不是枚举类型)。你不能以手动方式扩展Enum类以产生枚举类型,如果试图这样做,那么会产生变异错误。定义枚举类型的唯一方式就是使用enum关键字。
16. 要扩展枚举类型是不可能的。枚举类型实际上是final,但final关键字在它们的声明里是不必要且不被允许的!因为enum实际上是final,所以它不会是abstract。
17. 和类一样,枚举类型可以实现接口。

在5.0以后,switch语句除了支持byte、short、int和char外,还支持enum(枚举)。
如果switch表达式被判定为null,会抛出空指针异常(NullPointException)。使用null作为case的值是不合法的!可以try!而且在switch中使用枚举,一般要将default:子句包含进来,不然编译器会产生-Xlint警告信息,好让你知道你没有编写程序代码来处理枚举类型所有的可能值,即使你的每一个枚举都写了一个case时,也要将defaul:子句加进来,这可以处理在你的switch语句编译完成之后,有新的值被加入枚举类型的情况。
所以,在switch中使用枚举时,都要记得加default:子句。
分享到:
评论

相关推荐

    enum类型重定义解决方法

    在编程中,`enum`(枚举)类型是用来定义一组命名的整数常量,它在C++中被广泛使用。然而,在某些情况下,我们可能会遇到`enum`类型的重定义问题,这通常发生在包含不同库或者头文件时,因为这些库可能已经定义了...

    C++中枚举类型(enum)

    ### C++中的枚举类型(Enum) 在C++编程语言中,枚举(`enum`)是一种用户定义的类型,它由一组具有整数值的命名常量组成。这些值可以被程序用来代替数字,使代码更具可读性,并且能够表示特定范围内的固定集合。 ...

    Java枚举类型Enum的用法

    Java枚举类型(Enum)是Java SE 5.0引入的一种新的数据类型,它为开发者提供了更为强大且安全的方式来表示一组常量。枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将...

    opc enum 32-64安装包

    OPC Enum 32-64 安装包是一款专为处理32位和64位操作系统设计的OPC组件,确保在不同系统环境下能稳定、高效地工作。 OPC Core Component是OPC技术的核心组成部分,它提供了基本的OPC服务,如数据访问(OPC DA,OPC ...

    WPF 中一组 RadioButton 向 Enum 的绑定

    其中一个常见的需求是将RadioButton组与枚举类型(Enum)进行绑定,以便用户通过选择不同的RadioButton来设置某个属性的值。枚举是一种强大的数据类型,它允许我们定义一组具有特定名称的常量,这些常量通常代表某种...

    enum 结构分析源码

    枚举(enum)在编程语言中是一种非常基础且重要的数据类型,它允许程序员定义一组预定义的常量,这些常量通常表示特定的值或状态。在这个“enum 结构分析源码”资源中,我们主要关注的是C语言中的枚举使用和实现。...

    enum类型被intent所携带时各种情况的示例代码

    然而,对于enum(枚举)类型,由于它不是Android系统默认支持的数据传递类型,所以在使用Intent传递enum时需要特别处理。本教程将详细讲解enum类型如何与Intent结合,以及在不同情况下如何实现数据传输。 首先,让...

    java enum 枚举 学习资料

    "Java Enum 枚举学习资料" Java Enum 枚举学习资料是 Java 编程语言中的一种特殊类型,它主要用来实现一组固定的常量。 Enum 枚举类型是 Java 5 中引入的一种新特性,旨在解决传统的 int 枚举常量的缺陷。 1. 枚举...

    Options:有时在某些情况下,您想在OptionSet中使用Enum或希望Enum由Raw的Int类型支持,但同时也具有String标签

    选项Swift软件包,用于更强大的Enum类型。 目录介绍特征安装用法设置一个MappedValueRepresentable枚举使用MappedValueCollectionRepresented 使用MappedEnum类型的可编码枚举在ESet中使用OptionSet中的EnumSet 将...

    Java enum的用法详解

    Java enum 的用法详解 Java enum(枚举)是一种特殊的数据类型,用于定义一组固定的常量。从 JDK 1.5 开始,Java 引入了 enum 机制,解决了传统的常量定义方式的不足。 用法一:常量 在 JDK 1.5 之前,我们定义...

    枚举语句enum用法详解

    枚举(enum)在编程语言中是一种非常有用的类型,它允许我们定义一组命名常量,这些常量通常代表一组相关的值。在C#中,枚举(enum)被广泛用于增强代码的可读性和可维护性。下面我们将深入探讨C#中的枚举用法。 一...

    Laravel开发-enum

    在Laravel框架中,"enum"(枚举)是一种实用的工具,用于限制特定属性或方法的值只能是预定义的一组。PHP在版本8.0中引入了对枚举的支持,这使得在 Laravel 开发中更加方便地处理固定选项的数据类型。本教程将深入...

    Enum汇总大全详细讲解

    枚举(Enum)在Java中是一种特殊的类,用于定义固定的常量集合,它提供了一种安全、类型化的常量表示方式。以下是对Enum的详细讲解: 1. **基本枚举定义**: ```java enum Color {BLUE, RED, GREEN;} ``` 这是...

    Laravel开发-laravel-enum

    在Laravel框架中,枚举(Enum)是一种实用的工具,可以帮助我们更好地组织代码,提高可读性和可维护性。Laravel Enum库是为Laravel应用程序设计的一个扩展,它允许开发者使用枚举类型来替代传统的常量或字符串,从而...

    Python库 | enum-0.4.7.tar.gz

    在这个场景中,我们关注的是一个名为"enum"的Python库,其版本为0.4.7,封装在"enum-0.4.7.tar.gz"的压缩包文件中。这个压缩包通常包含了库的所有源代码、文档和其他相关资源。 `enum`是Python中的一个内置库,自...

    Java Enum使用Demo源码

    在Java编程语言中,枚举(Enum)是一种特殊的类,用于定义固定的常量集合。它在许多场景下比常量接口或静态final变量更安全、更方便。本篇将通过"Java Enum使用Demo源码"深入探讨Java枚举的用法。 首先,枚举在Java...

    java enum 枚举的spring boot2.x完美实现demo源码

    在Java编程语言中,枚举(`enum`)是一种强大的工具,它允许我们定义一组预定义的常量。在Spring Boot 2.x框架中,枚举的使用可以帮助我们更好地管理和组织代码,提供类型安全和可读性。本篇将深入探讨如何在Spring ...

    PyPI 官网下载 | aenum-1.2.1.tar.gz

    **PyPI 官网下载 | aenum-1.2.1.tar.gz** 在Python编程语言中,`PyPI`(Python Package Index)是官方的软件仓库,它为开发者提供了存储和分享他们创建的Python模块、库和其他软件工具的平台。用户可以方便地通过`...

    DNS,ENUM原理介绍

    简单介绍了DNS和ENUM的原理及在IMS网络中的使用

Global site tag (gtag.js) - Google Analytics