枚举类的定义与使用及自定义枚举类、注解....

本文详细介绍了Java中的枚举类,包括枚举类的构建、枚举对象的应用和自定义枚举类的实现。同时,文章还探讨了基本的注解,如@Override、@Deprecated和@SuppressWarnings,并讲解了如何自定义注解以及元注解的概念和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                               枚举与注解

一、枚举类的构建与枚举对象的应用:

1、枚举类的特性是具有有限个对象(如月份、季节…),单例模式可以看作是枚举的特殊(即只有一个对象的类)。

 

枚举类型的不可以加set方法;枚举类是私有的,枚举类的对象必须在类内造,在类外不可以造对象;

2、自定义枚举类:

package com.atguigu.enumera;



public class TestSeason {

    public static void main(String[] args) {

        //输出

        Season spring=Season.SPRING;

        System.out.println(spring);

        spring.show();

        System.out.println(spring.getSeasonName());

        System.out.println();

   

    }

}

//枚举类

class Season{

    //1、提供类的属性,声明为private final;以后不能再被修改。

    private final String seasonName;

    private final String seasonDesc;

    //2、声明为final的属性,在构造器中初始化

    private Season(String seasonName,String seasonDesc) {

        this.seasonName=seasonName;

        this.seasonDesc=seasonDesc;

    }

    public void show() {

        // TODO Auto-generated method stub

        System.out.println("这是一个季节。");

    }

    //3、通过公共的方法来调用属性

    public String getSeasonName() {

        return seasonName;

    }

    public String getSeasonDesc() {

        return seasonDesc;

    }

   

    //4、创建枚举类的对象,一旦造出之后拒绝修改。

    public static final Season SPRING=new Season("spring","春暖花开");

    public static final Season SUMMER=new Season("summer","夏日炎炎");

    public static final Season AUTUMN=new Season("autumn","秋高气爽");

    public static final Season WINTER=new Season("winter","白雪皑皑");

   

    @Override

    public String toString() {

        return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";

    }

   

}

3、使用enum定义枚举类:

(1)、枚举类:

    使用enum定义枚举类,必须把声明的对象放在最上边;

enum Season implements info{   //实现接口一定要重写抽象方法。

//原型 public static final Season SPRING=new Season("spring","春暖花开");

   

//  SPRING("spring","春暖花开"),    //逗号

    //重写show()方法;使用enum定义枚举类,必须把声明的对象放在最上边;

    /*      枚举类定义的4个对象     */

    SPRING("spring","春暖花开"){

        public void show() {

            System.out.println("春天在哪里");

        }

    },

    SUMMER("summer","夏日炎炎"){

        public void show() {

            System.out.println("生如夏花");

        }

    },

    AUTUMN("autumn","秋高气爽"){

        public void show() {

            System.out.println("秋天适合分手");

        }

    },

    WINTER("winter","白雪皑皑"){

        public void show() {

            System.out.println("冬天里的一把火");

        }

    };

    private final String seasonName;

    private final String seasonDesc;

   

    private Season(String seasonName,String seasonDesc) {

        this.seasonName=seasonName;

        this.seasonDesc=seasonDesc;

    }

    public String getSeasonName() {

        return seasonName;

    }

    public String getSeasonDesc() {

        return seasonDesc;

    }

    @Override

    public String toString() {

        return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";

    }

}

 

TestSeason总代码:

         1、如何自定义枚举类AA。枚举类:类的对象是有限个的,确定的。

                1-1、私有化类的构造器,保证不能在类的外部创建其对象

                1-2、在类的内部创建枚举类的实例。声明为:public static final

                1-3、若类有属性那么属性声明为:private final。此属性在构造器中赋值。

package com.atguigu.enumera;

/*

 * 一、枚举类:

 *  1、如何自定义枚举类

 *  2、如何使用enum关键字定义枚举类

 *  >常用的方法:values()、valuesOf(String name);

 *  >如何让枚举类实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同.<--(相当于让每一个对象都重写抽象方法)

 * */

public class TestSeason {

    public static void main(String[] args) {

        //输出

        Season spring=Season.SPRING;

        System.out.println(spring);

        spring.show();

        System.out.println(spring.getSeasonName());

        System.out.println();

        Season[] seasons=Season.values();

        //1、values():可以将枚举类下边的对象以数组的形式返回。

        for(int i=0;i<seasons.length;i++) {

            System.out.println(seasons[i]);

        }

        //2、valueOf(String name):写入的是一个字符串,此方法可以将叫这个字符串名字的对象返回。

        String str="WINTER";

        Season sea=Season.valueOf(str);

        System.out.println(sea);

       

        Thread.State[] states=Thread.State.values();

        for(int i=0;i<states.length;i++) {

            System.out.println(states[i]);

        }

        sea.show();

    }

}



interface info{

    void show();

}



//枚举类

enum Season implements info{   //实现接口一定要重写抽象方法。

//原型 public static final Season SPRING=new Season("spring","春暖花开");

    /*      枚举类定义的4个对象     */

//  SPRING("spring","春暖花开"),    //逗号

    //重写show()方法

    SPRING("spring","春暖花开"){

        public void show() {

            System.out.println("春天在哪里");

        }

    },

    SUMMER("summer","夏日炎炎"){

        public void show() {

            System.out.println("生如夏花");

        }

    },

    AUTUMN("autumn","秋高气爽"){

        public void show() {

            System.out.println("秋天适合分手");

        }

    },

    WINTER("winter","白雪皑皑"){

        public void show() {

            System.out.println("冬天里的一把火");

        }

    };

   

    private final String seasonName;

    private final String seasonDesc;

   

    private Season(String seasonName,String seasonDesc) {

        this.seasonName=seasonName;

        this.seasonDesc=seasonDesc;

    }

   



    public String getSeasonName() {

        return seasonName;

    }

    public String getSeasonDesc() {

        return seasonDesc;

    }



    @Override

    public String toString() {

        return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";

    }

}

 

二、基本的注解(Annotation):

 

 

 

注解:

 * 1、JDK提供的常用的注释

 *    @Override:限定重写父类方法,该注释只能用于方法

 *   @Deprecated:用于表示某个程序元素(类,方法等)已过时

 *   @SuppressWarnings:抑制编译器警告

 * 2、如何自定义一个注解

 * 3、元注解

 

1、加了@Deprecated后会打一个横线;尽量避免使用有@Deprecated的。   会有感叹号的样子,

去掉叹号的解决方法:鼠标放在黄色波浪线上,在显示的条列中点击”Add @SuppressWarnings………”

  效果:

  

问题描述:下面如果不把 System.out.println(i); 注释掉i没错,若把System.out.println(i); 注释掉,会有i下方黄色感叹号,为了解决用注解 

代码:  int i=10;

//          System.out.println(i);

 

 

三、自定义注解_元注解(Annotation):

1、自定义一个注解:(系统中的书写格式)仿照SuppressWarnings

 

(1)、自定义的注解与使用自定义注解:

项目名 ----- 右击 ----- new ----- Annotation

package com.atguigu.enumera;

/*

 * 自定义的注解

 * */

public @interface MyAnnotation {

    String value() default "hello";

}

(2)、使用:

@MyAnnotation(value="atguigu")

class Student extends Person{

    …………………………………………

}

 

2、元注解:

String name=”atguigu”//理解:String name可以理解为修饰“atguigu”的元数据。

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值