标签:type 编译器 retention 开发者 new img 返回 variable 属性
当需要定义一组常量时,强烈建议使用枚举类。要求类的对象是有限个且是确定的。例如:星期、性别、季节、支付方式...
如果枚举类中只有一个对象,则可以作为单例模式的实现方式。
package com.summer.java; /** * @Author 安宁侯 * @create 2021-03-08 6:27 */ public class MyEnum { public static void main(String[] args) { Season season1 = Season.SPRING; System.out.println(season1); } } //自定义枚举类 class Season{ //1.声明season对象的属性 private final String name; private final String desc; //2.私有化构造器 private Season(String name,String desc){ //3.为属性赋值 this.name=name; this.desc=desc; } //4.定义枚举类的对象: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("冬天","寒冷"); public String getName() { return name; } public String getDesc() { return desc; } @Override public String toString() { return "Season{" + "name=‘" + name + ‘\‘‘ + ", desc=‘" + desc + ‘\‘‘ + ‘}‘; } }
package com.summer.java; /** * @Author 安宁侯 * @create 2021-03-08 6:46 */ public class MyEnum1 { public static void main(String[] args) { MySeason spring = MySeason.SPRING; System.out.println(spring); } } /* 使用enum定义枚举类时,默认继承于java.lang.enum */ enum MySeason{ //1.提供当前枚举类的对象,多个对象值之间用逗号隔开,最后一个用分号结尾 SPRING("春天","温暖"), SUMMER("..",".."), AUTUMN("..",".."), WINTER("..",".."); private final String name; private final String desc; //2.私有化构造器 private MySeason(String name,String desc){ //3.为属性赋值 this.name=name; this.desc=desc; } @Override public String toString() { return "MySeason{" + "name=‘" + name + ‘\‘‘ + ", desc=‘" + desc + ‘\‘‘ + ‘}‘; } }
values():返回枚举类型的对象数组。可以很方便的获取到所有的枚举值
valueOf(String str):把一个字符串转成对应的枚举类对象。(根据指定名找到枚举类对象,返回该对象的对象名。如果找不到,则会报异常)
toString():返回当前枚举类对象的名称
public class MyEnum1 {
public static void main(String[] args) {
MySeason spring = MySeason.SPRING;
//toString
System.out.println(spring);
//values
for (int i = 0; i < MySeason.values().length; i++) {
System.out.println(MySeason.values()[i]);
}
//valueOf
System.out.println(MySeason.valueOf("WINTER"));
}
}
//valueOf
System.out.println(MySeason.valueOf("WINTER"));
MySeason.AUTUMN.show();
}
}
/*
使用enum定义枚举类时,默认继承于java.lang.enum
*/
interface Info{
void show();
}
enum MySeason implements Info{
//1.提供当前枚举类的对象,多个对象值之间用逗号隔开,最后一个用分号结尾
SPRING("春天","温暖"){
@Override
public void show() {
System.out.println("这是春天");
}
},
SUMMER("..",".."){
@Override
public void show() {
System.out.println("这是夏天");
}
},
AUTUMN("..",".."){
@Override
public void show() {
System.out.println("这是秋天");
}
},
WINTER("..",".."){
@Override
public void show() {
System.out.println("这是冬天");
}
};
private final String name;
private final String desc;
//2.私有化构造器
private MySeason(String name,String desc){
//3.为属性赋值
this.name=name;
this.desc=desc;
}
}
示例一:生成文档时的相关注解
@author:开发者的名称,多个开发者之间用逗号隔开
@version:当前模块的版本
@see:参考转向,也就是相关主题
@since:从哪个版本开始增加的
@param:对方法中某个参数的说明,如果没有参数就不能写
@return:对返回值的说明,如果没有返回值就不能写
@exception:对异常的说明,如果异常没有经过throws显示抛出就不能写
示例二:在编译时进行格式检查(JDK中内置的三个基本注解)
@Override:限定重写父类方法,该注解只能用于方法
@Deprecated:表明所修饰的元素(类、方法)已经过时
@SuppressWarnings:抑制编译器警告
示例三:跟踪代码的依赖性,实现替代配置文件的功能。例如:@WebServlet、@Transactional、@Test...
//@MyAnnotation(value = "hello")//使用注解 @MyAnnotation//此时使用的是默认值hello public @interface MyAnnotation {//1.声明注解类 String value() default "hello"; }
自定义注解必须配上自定义注解流程(使用反射)才有意义。通常都会指定Retention和Target两个注解
元注解:用来修饰其他注解的注解。JDK5.0提供了四种mate-annotation。
RetentionPolicy的值:
RetentionPolicy.SOURCE:在源文件中有效(即源文件保留),编译器直接丢弃这种这种策略的注释。
RetentionPolicy.CALSS:在class文件中有效(即class保留),当运行Java程序时,JVM不会保留注释。该值是RetentionPolicy的默认值
RetentionPolicy.RUNTIME:在运行时有效(即运行时保留),当运行Java程序时,JVM会保留注释。程序可以通过反射获取该注释。
TYPE:可以用来修饰类
FIELD:可以用来修饰属性
METHOD:可以用来修饰方法
PARAMETER:可以用来修饰形参
CONSTRUCTOR:可以用来修饰构造器
LOCAL_VARIABLE:可以用来修饰局部变量
定义为Documented的注解必须设置Retention的值为RUNTIME。
在自定义的Myannotation上使用注解@Repeatable,成员值为MyAnnotation.class。
MyAnnotation的Target和Retention与MyAnnotation相同。
ElementType.TYPE_PARAMETER:表示该注解能写在类型变量的声明语句中。
ElementType.TYPE_USE:表示该注解能写在使用类型的任何语句中。
标签:type 编译器 retention 开发者 new img 返回 variable 属性
原文地址:https://www.cnblogs.com/summerHou/p/14497682.html