栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习之路6——枚举和注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习之路6——枚举和注解

教学视频来源链接

一、枚举
  • 枚举对应英文(enumeration,简写 enum)
  • 枚举是一组常量的集合
  • 可以这样理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象。
1、枚举的两种实现方式
  • 自定义类实现枚举
  • 使用enum关键字实现枚举
1)自定义类实现枚举-应用案例

1、不需要提供setXxx方法,因为枚举对象值通常为只读。
2、对枚举对象、属性使用final+static共同修饰,实现底层的优化。
3、枚举对象名通常使用全部大写,常量的命名规范。
4、枚举对象根据需要,也可以有多个属性

自定义枚举类

package com.jjl.comment;

//演示自定义枚举
class Season{
    private String name;
    private String desc;

    //定义了四个对象
    public static final Season SPRING = new Season("春天","温暖");
    public static final Season WINTER = new Season("冬天","寒冷");
    public static final Season AUTUMN = new Season("秋天","凉爽");
    public static final Season SUMMER = new Season("夏天","炎热");

    //1.构造器私有化,放在被new出来,
    //2.去掉set方法,只能读取,不能修改
    //3. 在Season内部,直接创建固定的对象
    //4.优化,可以再加入final修饰符
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {

        return name;
    }


    //    public void setName(String name) {
//        this.name = name;
//    }

    public String getDesc() {
        return desc;
    }

//    public void setDesc(String desc) {
//        this.desc = desc;
//    }
    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + ''' +
                ", desc='" + desc + ''' +
                '}';
    }
}

主调用类

package com.jjl.comment;

public class Enumeration01 {
    public static void main(String[] args) {
        System.out.println(Season.SPRING);
        System.out.println(Season.AUTUMN);
        System.out.println(Season.SUMMER);
        System.out.println(Season.WINTER);
    }
}
输出结果:
Season{name='春天', desc='温暖'}
Season{name='秋天', desc='凉爽'}
Season{name='夏天', desc='炎热'}
Season{name='冬天', desc='寒冷'}
2)enum关键字实现枚举-应用案例
package com.jjl.comment;


//演示使用enum关键字来实现枚举类
//用enum来替代class
enum Season{
    //public static final Season SPRING = new Season2("春天","温暖");==SPRING("春天","温暖"),
    //如果有多个常量,使用逗号间隔
    //定义的常量对象,需要写在最前面
    //如果使用的无参构造器创建的的常量对象,则可以省略()
    SPRING("春天","温暖"),
    WINTER("冬天","寒冷"),
    AUTUMN("秋天","凉爽"),
    SUMMER("夏天","炎热");
    private String name;
    private String desc;
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {

        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + ''' +
                ", desc='" + desc + ''' +
                '}';
    }
}
二、注解
  • 注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。
  • 和注释一样,注解不影响程序逻辑,但是可以被编译或者运行,相当于嵌入在代码中的补充信息
  • 在JavaSE中,注解的是哦那个目的比较简单,列如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,列如用来配置应用程序的任何切面,代替JavaEE旧版本中所遗留的繁琐代码和XML配置等。

基本的Annotation介绍
使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素
三个基本的 Annotation:

  • 1)@Override:限定某个方法,是重写父类方法,该注解只能用于方法
  • 2)@Deprecated:用于表示某个程序元素(类,方法等)已过时
  • 3)@SuppressWarnings:抑制编译器警告
1、Override 注解的案例
  • @Override:限定某个方法,是重写父类方法,该注解只能用于方法
  • 补充说明:@interface的说明
  • @interface 不是interface,是注解类是jdk1.5之后加入的
package com.jjl.Annotation;
import java.lang.*;


public class Override {
    public static void main(String[] args) {

    }

}
class Father{
    public void fly(){
        System.out.println("Father fly...");
    }
}
class Son extends Father{
    //1.@Override 注意放在fly方法上,表示子类的fly方法时重写了父类的fly
    //2.这里如果没有写@Override 还是重写了父类fly
    //3.如果写了@Override注解,编译器就会去校验该方法是否存在重写了父类的方法,
    //  如果重写了,则编译通过,否者编译失败。

    @java.lang.Override
    public void fly() {
        System.out.println("son fly...");
    }
    
}
2、@Deprecated
  • 1、用于表示某个程序元素(类,方法)已经过时
  • 2、可任意修饰方法,类,字段,包,参数等
  • 3、@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD,
    PACKAGE,PARAMETER, TYPE))
  • 4.@Deprecated的作用可以做到新旧版本的兼容和过渡
3、SuppressWarnings:抑制编译器警告
package com.jjl.Annotation;

import java.util.ArrayList;
import java.util.List;

public class SuppressWarnings {

    //不显示警告信息(代码上出现的浅黄色底纹),可以指定不显示的类型,all表示全部不显示
    //作用范围,和放置的位置相关。

    @java.lang.SuppressWarnings("all")
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("");
        list.add("");
        list.add("");
        int i;
        System.out.println(list.get(1));
    }
}

警告类型说明:

  • 1)unchecked是忽略没有检查的警告
  • 2)rawtypes是忽略没有指定泛型的警告(传参时没有指定泛型的警告错误)。
  • 3)unused是忽略没有使用某个变量的警告错误
  • 4)@SuppressWarnings可以修饰的程序元素为,查看@Target
  • 5)生成@SupperssWarnings时,不用背,直接点击左侧的黄色提示,就
    可以选择(注意可以指定生成的位置)
三、元注解
  • 元注解的基本介绍

  • JDK的元 Annotation用于修饰其他 Annotation

  • 元注解的种类(使用不多,了解,不用深入研究)

  • 1)Retention//指定注解的作用范围,三种SOURCE,CLASS,RUNTIME
    说明

    只能用于修饰一个Annotation定义,用于指定该Annotation可以保留多长时间,Rentention 包含一个RetentionPolicy类型的成员变量,使用@Rentention时必须为该value成员变量指定值:

    Retention的三种值

    1)RetentionPolicy.soURCE:编译器使用后,直接丢弃这种策略的注释
    2)RetentionPolicy.CLASS:编译器将把注释记录在class文件中.当运行 Java程序时,JVM不会保留注解。这是默认值
    3)RetentionPolicy.RUNTIME:编译器将把注释记录在class文件中.当运行Java程序时,JVM会保留注释.程序可以通过辰射获取该注释

  • 2)arget//指定注解可以在哪些地方使用

  • 3)Documented//指定该注解是否会在javadoc体现

    @Documented:用于指定被该元 Annotation修饰的Annotation类将被javadoc工具提取成文档,即在生成文档时,可以看到该注解。
    说明:定义为Documented的注解必须设置Retention值为RUNTIME。

  • 4)Inherited //子类会继承父类注解

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/922126.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号