道德一物,太高太虚了,终究是不能律人的,只能律己。
又故而立身需正,身正则名正,名正则言顺,言顺则事成。
1.枚举
不使用枚举创建四季
public class Enumeration01 {
public static void main(String[] args) {
// 实例化对象,创建四季
Season spring = new Season("春天", "温暖");
Season winter = new Season("冬天", "寒冷");
Season summer = new Season("夏天", "炎热");
Season autumn = new Season("秋天", "凉爽");
}
}
// 定义季节类
class Season {
private String name;
private String desc;
public Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
使用枚举创建四季(固定的值,并且是只读的不需要修改)
public class Enumeration03 {
public static void main(String[] args) {
System.out.println(Season2.AUTUMN);
System.out.println(Season2.SUMMER);
}
}
// 创建枚举类
enum Season2 {
SPRING("春天", "温暖"),
SUMMER("夏天", "炎热"),
AUTUMN("秋天", "凉爽"),
WINTER("冬天", "寒冷");
private String name;
private String desc;
private Season2() {
}
private Season2(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
/**
* 通过传入的desc值获取对应的name值
*/
public static String getNameByDesc(String desc)
{
for (Season2 type : Season2.values())
{
if (type.getDesc().equals(desc))
{
return type.getName();
}
}
// 如果没有找到匹配的枚举值,可以返回null或抛出异常
return null;
}
}
注意
- 不提供 setXxx() 方法,因为枚举对象值通常为只读。
- 对枚举对象/属性使用 final + static 共同修饰,实现底层优化。
- 枚举对象名通常使用全部大写,常量的命名规范。
2.注解
介绍
- 用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。
- 在JavaSE中,注解的使用目的比较简单,如标记过时的功能,忽略警告等。在JavaEE中用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。
2.1 基本的Annotation
三个基本的 Annotation
- @Override: 重写父类方法, 该注解只能用于方法
- @Deprecated: 用于表示某个程序元素(类, 方法等)已过时,可以做到新旧版本的兼容和过渡
- @SuppressWarnings: 抑制编译器警告
@Override使用示例
class Father{
public void fly(){
System.out.println("Father fly...");
}
public void say(){}
}
class Son extends Father {
@Override
public void fly() {
System.out.println("Son fly....");
}
@Override
public void say() {}
}
@Deprecated使用示例
@Deprecated
class A {
@Deprecated
public int n1 = 10;
@Deprecated
public void hi(){
}
}
@SuppressWarnings使用示例(直接抑制所有的警告)
@SuppressWarnings("all")
public class Test{
}
2.2 元注解
元注解用来修饰其它注解。
元注解的种类
- @Retention:指定注解的作用范围,三种 SOURCE、CLASS、RUNTIME
- @Target:指定注解可以在哪些地方使用
- @Documented:指定该注解是否会在 javadoc 体现
- @Inherited:子类会继承父类注解
@Retention
用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留多长时间。
@Retention 的三种值
- RetentionPolicy.SOURCE: 编译器使用后,直接丢弃这种策略的注释。
- RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中,当运行 Java 程序时,JVM 不会保留注解。
- RetentionPolicy.RUNTIME:编译器将把注解记录在 class 文件中,当运行 Java 程序时, JVM会保留注解,程序可以通过反射获取该注解。
代码示例
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @Interface Override {
}
@Target
用于修饰 Annotation 定义,用于指定被修饰的 Annotation 能用于修饰哪些元素。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
// value的值
public enum ElementType {
/** Class, interface (including annotation type), or enum declaration */
TYPE,
/** Field declaration (includes enum constants) */
FIELD,
/** Method declaration */
METHOD,
/** Formal parameter declaration */
PARAMETER,
/** Constructor declaration */
CONSTRUCTOR,
/** Local variable declaration */
LOCAL_VARIABLE,
/** Annotation type declaration */
ANNOTATION_TYPE,
/** Package declaration */
PACKAGE,
/**
* Type parameter declaration
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* Use of a type
*
* @since 1.8
*/
TYPE_USE
}
@Documented
用于指定被该注解修饰的 Annotation 类将被 javadoc工具提取成文档。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}
@Inherited
被它修饰的 Annotation 将具有继承性。如果某个类使用了,则它的子类将自动具有该注解。