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

Day

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

Day

一.枚举类(Enumeration)

枚举类:类的对象只有有限个,是确定的。如星期、性别、季节、月份、线程状态等。
当需要定义一组常量时,强烈建议使用枚举类。
如果一个类只有一个对象,则可以使用单例模式来实现枚举类。
1.如何定义使用枚举类?
方式1:JDK 5.0 之前,自定义枚举类

//自定义枚举类
public class EnumTest {
    public static void main(String[] args) {
        Season summer = Season.SUMMER;  //调用枚举类
        System.out.println(summer);
        System.out.println(summer.getSeasonName());
        System.out.println(summer.getSeasonDesc());
    }
}
class Season{
    //1.声明Season对象的属性:private final修饰
    private final String SeasonName;
    private final String SeasonDesc;
    //2.私有化类的构造器,并给相应的属性赋值
    private Season(String seasonName, String seasonDesc) {
        SeasonName = seasonName;
        SeasonDesc = seasonDesc;
    }
    //3.提供当前枚举类的多个对象,使用public static final修饰
    public static final Season SPRING = new Season("春天","春暖花开");
    public static final Season SUMMER = new Season("夏天","鸟语花香");
    public static final Season AUTUMN = new Season("秋天","秋高气爽");
    public static final Season WINTER = new Season("冬天","冰天雪地");
    //4.其他诉求:获取对象的属性,重写toString()方法等
    public String getSeasonName() {
        return SeasonName;
    }
    public String getSeasonDesc() {
        return SeasonDesc;
    }
    @Override
    public String toString() {
        return "Season{" +
                "SeasonName='" + SeasonName + ''' +
                ", SeasonDesc='" + SeasonDesc + ''' +
                '}';
    }
}

方式2:JDK 5.0 之后,使用enum关键字定义枚举类

//使用enum关键字创建枚举类(默认继承自class java.lang.Enum)
public class EnumTest01 {
    public static void main(String[] args) {
        ThreadStatus statu = ThreadStatus.TIMED_WAITING;
        System.out.println(statu);
        System.out.println(ThreadStatus.class.getSuperclass()); //该类的直接父类
    }
}
enum ThreadStatus{
    //1.提供枚举类的多个对象,多个对象使用","隔开,末尾使用";"结束
    NEW("新建","创建一个线程"),
    RUNNABLE("就绪","线程就绪"),
    BLOCKED("阻塞","线程阻塞"),
    WAITING("等待","线程等待"),
    TIMED_WAITING("超时等待","线程超时等待"),
    TERMINATED("死亡","线程死亡");
    //2.声明枚举类对象的属性:private final修饰
    private final String name;
    private final String statu;
    //3.私有化类的构造器,并给相应的属性赋值
    private ThreadStatus(String name,String statu) {
        this.name = name;
        this.statu = statu;
    }
    //4.其他诉求:获取对象的属性,重写toString()方法等
    public String getName() {
        return name;
    }
    public String getStatu() {
        return statu;
    }
    @Override
    public String toString() {
        return super.toString();
    }
}

2.Enum类的常用方法:
① values()方法:返回枚举类型的对象数组,用于遍历该枚举类所有的枚举值。线程的六种状态

Thread.State[] values1 = Thread.State.values();//获取线程的状态,返回一个数组

② valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名称”。若不是,会有运行时异常:IllegalArgumentException。

ThreadStatus status = ThreadStatus.valueOf("TERMINATED");

③ toString():返回当前枚举类对象常量的名称

ThreadStatus status1 = ThreadStatus.TIMED_WAITING;//返回TIMED_WAITING名称
System.out.println(status1.toString());	//TIMED_WAITING

3.enum枚举类实现接口
情况一:实现接口,在enum类中实现抽象方法

public void show(){
        System.out.println("当前枚举类是线程的生命周期...");
    }

情况二:让enum类的对象分别实现抽象方法

NEW("新建","创建一个线程"){
        @Override
        public void show() {
            System.out.println("正在创建线程...");
        }
    },
    ...
二.注解(annotations)

从JDK 5.0 开始,增加了对元数据的支持(metadata),也就是注解。注解其实就是代码里的特殊标记,它用于替代配置文件,Java中可以通过反射技术去得到类里面的注解,以决定怎么去运行类。
在一定程度上:框架=注解+设计模式+反射
1.JDK内置的三个注解
@Override:用于重写父类的方法 或者是写接口实现类时用到该注解。
@Deprecated:用于表示该方法是一个过期的方法。
@suppressWarnings:表示该方法、变量在编译时自动忽略警告。
2.自定义注解
注解声明为:@interface,内部定义成员,通常使用value表示,可以指定成员的默认值,使用default定义,如果自定义注解没有成员,表明是一个标识作用。

public @interface MyAnnotation {	//自定义注解,暂时无法使用,因为未指定用法
    String values() default "java";
}

3.JDK中的元注解
对现有的注解进行解释说明的注解称为元注解。共有如下4种。JAVA核心知识点–元注解详解
@Retention:指定所修饰的Annotation的生命周期。

public enum RetentionPolicy {
    SOURCE,    		// 源文件保留
    CLASS,       	// 编译期保留,默认值
    RUNTIME   		// 运行期保留,可通过反射去获取注解信息
}

@Target:指定Annotation能修饰那些程序元素

public enum ElementType { 
    TYPE, 			// 类、接口、枚举类
    FIELD, 			// 成员变量(包括:枚举常量)
    METHOD, 		// 成员方法
    PARAMETER, 		// 方法参数
    CONSTRUCTOR, 	// 构造方法
    LOCAL_VARIABLE, // 局部变量
    ANNOTATION_TYPE, // 注解类
    PACKAGE, 		// 可用于修饰:包
    TYPE_PARAMETER, // 类型参数,JDK 1.8 新增
    TYPE_USE 		// 使用类型的任何地方,JDK 1.8 新增
}

@documented:表示所修饰的注解在Java doc解析时保留下来
@Inherited:被它标注的Annotation将具有继承性
4.可重复注解
在JDK 1.8中,增加了可重复注解:
① 在需要重复注解的注解MyAnnotation上添加@Repeatable注解,值为注解名.class。
② MyAnnotation的Target和Retention等元注解和MyAnnotations相同。
5.类型注解
在JDK 1.8中,增加了类型注解:
ElementType.TYPE_PARAMETER表示该注解能写在类型变量的声明语句中(如:泛型声明)
ELementType. TYPE_USE表示该注解能写在使用类型的任何语句中。

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

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

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