IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java枚举类 -> 正文阅读

[Java知识库]java枚举类

什么是枚举类?
在部分情况中,我们的类的对象是固定的,比如说class season,他的对象应该是只有四个的,这时候我们希望外部不能调用构造器创建新的对象,内部自己定义好要调用的对象。
这时候我们怎么做呢?

public class Season {
    public final static int spring =1;
    public final static int summer =2;
}

或许会想到这样去实现,但是要知道,这样是很不安全的,因为你不知道你以后会用它来干嘛。
比如说:

 System.out.println(spring + summer);

这不就离谱了?
而且在打印的时候,输出的spring是1,你怎么知道1是什么。
所以这样是不好的,那怎么改进呢?

public class Season {
    public final static Season Spring = null;
    public final static Season Summer = null;

    public static void main(String[] args) {
//        System.out.println(Spring + Summer);
    }
}

这样输出语句就不会出现这种非法使用操作了。
但是,这样显然太繁琐了,为了更简单的使用枚举类,jdk1.5提供了enum关键字。

public enum season {
    Spring,Summer,Auntumn,Winter;
}

在这段代码中,我在枚举类season中创建了四个季节对象。
他们默认被public static final所修饰。
public保证他们能被合理调用。
static保证他们是被类所有。
final保证他们的指向不会改变,当然你可以改变指向的某属性的值。
当然,作为对象,他当然会有属性和方法。
现在我们简单测试一下:

public enum season {
    Spring,Summer,Auntumn,Winter;
    private String name;
    public String getname(){
        return name;
    }
}
class test{
    public static void main(String[] args) {
        System.out.println(season.Spring.getname());
    }
}

枚举对象定义是在枚举类的开头,多个对象通过逗号隔开,最后一个打上分号。
你会发现,调用枚举类的对象的方法是通过类.对象名。
你可以尝试直接输出枚举对象,或者输出枚举对象.name()。
他们返回的都是枚举对象的变量名。
不过不建议使用name方法,因为toString输出的明显用户体验更高。
而对于print方法,输出的时候是直接调用的对象的toString方法。
枚举类并不是继承于Object,他的toString默认情况下便是返回变量名。
例如这样:

public enum season {
    Spring,Summer,Auntumn,Winter;
    private String name;
    public String getname(){
        return name;
    }
    public String toString(){
        return "haha";
    }
}
class test{
    public static void main(String[] args) {
        System.out.println(season.Spring);
    }
}

我们知道,在类的属性没有初始化的时候,都会有默认值,那么我怎么在枚举类创建的时候就给他赋值呢?
1.通过初始化代码块。

    {
        name = this.name();
    }

注意不要用成类的初始化代码块了,否则所有的枚举对象的name属性都是相同的了。
2.构造器

public enum season {
    Spring("春天"),Summer("夏天"),Auntumn("球天"),Winter("冬天");
    private String name;
    private season(String name){
        this.name = name;
    }
    public String getname(){
        return name;
    }
    public String toString(){
        return "haha";
    }
}
class test{
    public static void main(String[] args) {
        System.out.println(season.Spring);
    }
}

注意一下创建对象的形式,后面有了形参列表。
注意构造器只能用private修饰,不显示的写出也会默认加上private。
另外,在不包含抽象方法的时候,枚举类默认使用final修饰。
这表明枚举类是不可继承的。
那在有抽象方法的时候呢?

public enum season {
    Spring("春天"){
        public void a(){

        }
    };
    private String name;
    public abstract void a();
    private season(String name){
        this.name = name;
    }
    public String getname(){
        return name;
    }
    public String toString(){
        return "haha";
    }
}
class test{
    public static void main(String[] args) {
        System.out.println(season.Spring);
    }
}
interface show{
    void display();
}

你会发现,你必须在创建枚举对象的时候,通过匿名内部类的方式来创建枚举对象。
但是我们知道,匿名内部类创建的是该类的匿名子类,而枚举类都是final修饰的,怎么会有子类呢?
这事因为,枚举类在含有抽象方法的时候,final自动转变为abstract。
但是!
并不能因此而创建所谓的抽象枚举类。
他只能被匿名子类继承。
说到抽象,就不得不说接口了。
我们一样可以通过implement来实现接口,然后重写接口种的抽象方法,我们可以在枚举类中重写,这样所有的枚举对象的该方法都一样。
我们也可以让所有的枚举对象都实现该接口,这样每个对象的该抽象方法不相同。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:46:11  更:2021-12-28 22:46:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:30:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码