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

Java 枚举、注解

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

Java 枚举、注解

1.枚举的特点

最重要的一个特点就是每一个枚举项都是一个对象!!!!,看一下代码,代码里详细解释

我的枚举类,好好看应该会有收获

public enum MyEnum {
    MAN("男"){
        @Override
        public String getName() {
            return this.name();
        }
    },WOMEN("女"){
        @Override
        public String getName() {
            return this.name();
        }
    };
    public String name;
    
    MyEnum() {
    }

    MyEnum(String name) {
        this.name = name;
    }

    
    public abstract String getName();

}

我的测试方法

import java.util.concurrent.Executors;

public class TestEnum {
    public static void main(String[] args) {
        
        System.out.println(MyEnum.MAN);
        //都是对象
        MyEnum myEnum = MyEnum.MAN;
        //枚举类里面可以有成员变量和无餐有参构造
        System.out.println("获取枚举的属性"+MyEnum.MAN.name);

        System.out.println("获取枚举的索引"+MyEnum.WOMEN.ordinal());

        System.out.println("返回索引的差值"+MyEnum.WOMEN.compareTo(MyEnum.MAN));

        System.out.println(MyEnum.MAN.toString());
        //类似java 反射的意思
        MyEnum man = Enum.valueOf(MyEnum.class, "MAN");

        System.out.println(man == MyEnum.MAN);
        //循环
        MyEnum[] values = MyEnum.values();
        for (MyEnum value : values) {
            System.out.println(value);
        }
    }
}
2.注解

相信大家都用过很多注解,或者看过很多注解

@Deprecated 标注的会是以过时的东西
@Override 重写方法
@SuppressWarnings("all") 压制警告等等!这边就不一一列举了
2.1 自定义注解

注解里面定义的类型可以是基本数据类型、String、Class、枚举、以及以上类型的一维数组。小小的演示一下,这边只写了一点点数据类型,没有写全,感兴趣的可以自己写写,然后特殊的属性就是value

public @interface MyAnno {
    String name() default "自定义的第一个注解";
    int age () default 26;
    int [] ages () default {1,2,3};

    String value();
}

@MyAnno(value = "11",name = "111")
//特殊属性value 不需要写前缀,如果只有一个value属性@MyAnno("11")
public class MyName {
}
2.2 对自定义注解进行操作

我们这边写一个@Mytest方法,我要运行有这个注解的方法。没有这个注解的方法我不运行

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MyRun {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
        Class myMethod = Class.forName("MyMethod");
        Method[] declaredMethods = myMethod.getDeclaredMethods();
        Constructor constructor = myMethod.getConstructor();
        Object o = constructor.newInstance();
        for (Method declaredMethod : declaredMethods) {
            //主要就是这个方法可以判断这个方法上面是否有某个注解
            if(declaredMethod.isAnnotationPresent(MyTest.class)){
                declaredMethod.invoke(o);
            }

        }

    }
}


//这边是注解
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//注意这边要加上这个元注解
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}


//这边是我的方法
public class MyMethod {
    @MyTest
    public String findMyName(){
        System.out.println("楼的花");
        return "楼的花";
    }


    @MyTest
    public int findMyAge(){
        System.out.println(18);
        return 18;
    }
}

2.4 元注解

元注解就是写在注解里面的注解,这边介绍三个元注解,我直接用代码实现

import java.lang.annotation.*;

//Target是规定这个注解能标注的地方
@Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
//这个表示注解可以传递给子类,如果父类有这个注解,即使子类没有引用这个注解,那么世界上子类头上也是有这个注解的
public @interface MyAnno {
    String name() default "自定义的第一个注解";
    int age () default 26;
    int [] ages () default {1,2,3};

    String value();
}

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

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

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