设置@author等标签,以后每次创建一个类,自动带着作者信息
枚举表示一组常量的集合,枚举是一种特殊的类,里面只包含一组有限的特定的对象。枚举是只读,不可修改的。
理解:比如一个季节类,只能是春夏秋冬,没有其他对象,所以使用枚举完成这个。
public class Test {
public static void main(String[] args){
System.out.println(Season.SPRING);
}
}
// 1.构造器私有化,防止直接new
// 2.去掉setXxx方法,防止属性被修改
// 3.在类内直接创建一组固定对象(对象名一般大写)
// 4.优化:可以加入final修饰对象
class Season{
private String name;
private String description;
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("冬天","寒冷");
private Season(String name, String description) {
this.name = name;
this.description = description;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", description='" + description + '\'' +
'}';
}
}
输出:Season{name='春天', description='温暖'}
public class Test {
public static void main(String[] args){
System.out.println(Season.SUMMER);
}
}
// 1.使用enum代替class
// 2.直接使用 对象名(参数列表) 表示,注意:要放在枚举类内开头
// 3.对象之间以逗号分隔
// 4.无参构造器可以直接使用 对象名 表示,省略()
enum Season{
SPRING("春天","温暖"), SUMMER("夏天","炎热"), AUTUMN("秋天","凉爽"), WINTER("冬天","寒冷"), WHAT;//WHAT 等价于 WHAT()
private String name;
private String description;
private Season() { }
private Season(String name, String description) {
this.name = name;
this.description = description;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", description='" + description + '\'' +
'}';
}
}
输出:Season{name='夏天', description='炎热'}
public class Test {
public static void main(String[] args){
Season autumn = Season.AUTUMN;
// 1.name():输出枚举对象的名字
System.out.println(autumn.name());
// 2.ordinal():输出枚举对象的次序(从0开始编号)
System.out.println(autumn.ordinal());
// 3.values():以数组形式返回定义的枚举对象
Season[] valuse = Season.values();
for(Season season: valuse){
System.out.println(season);
}
// 4.valueOf(字符串):查找字符串的枚举对象,要求字符串是已有的枚举常量,否则报错
System.out.println(Season.valueOf("SPRING"));
// 5.compareTo():返回两个枚举对象的编号之差
System.out.println(Season.SPRING.compareTo(Season.AUTUMN));
// 6.toString():返回当前枚举对象的名称,若重写这个方法,则按重写输出
// 实际Season.AUTUMN 等价于 Season.AUTUMN.toString(),即toString()可省略
System.out.println(autumn.toString());
}
}
输出:
AUTUMN
2
Season{name='春天', description='温暖'}
Season{name='夏天', description='炎热'}
Season{name='秋天', description='凉爽'}
Season{name='冬天', description='寒冷'}
Season{name='春天', description='温暖'}
-2
Season{name='秋天', description='凉爽'}
使用细则:
- 使用enum关键字后,不能继承
- enum实现的枚举类,仍然是一个类,可以实现接口
1)注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。
2)和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
3)在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替java EE旧版中所遗留的繁冗代码和XML配置等。
三个基本的注解:
1)@Override:限定某个方法,是重写父类方法,该注解只能用于方法
2)@Deprecated:用于表示某个程序元素(类、方法、包、参数等)已过时,不推荐使用,但是可以用(作用:版本升级的过渡)
3)@SuppressWarnings:抑制编译器警告(即不显示一些警告信息)
四种元注解(修饰注解的注解):
@Retention(保留):指定注解的作用范围,@Retention的三种值:
1)RetentionPolicy.SOURCE:编译器使用后,直接丢弃这种策略的注释
2)RetentionPolicy.CLASS:编译器将把注解记录在class文件中。当运行Java程序时,JVM不会保留注解,这是默认值。
3)RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中。当运行Java程序时,JVM会保留注解,程序可以通过反射获取该注解。
@Target:指定注解可以在哪些地方使用
@Documented:指定该注解是否会在javadoc体现
@Inherited:子类会继承父类注解
特别说明
本文章是个人整理的学习笔记,参考b站韩顺平老师的课程(【零基础 快速学Java】韩顺平 零基础30天学会Java)。老师讲的非常好,有兴趣的可以去看一下。