最重要的一个特点就是每一个枚举项都是一个对象!!!!,看一下代码,代码里详细解释
我的枚举类,好好看应该会有收获
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) {
/**1.枚举类是Enum的字类
* 2.使用和静态方法差不多直接点出来
* 3.MAN和WOMEN都是对象
* */
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();
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)