java:JDK1.5枚举和注解新特性总结

  1. 枚举
    语法:
    enum Color{
    RED,BLUE,GREEN;
    }
    使用enum关键字定义的枚举结构实际上是默认继承了Enum类的枚举类。
    Enum类中存在两大属性
    name:枚举对象名称
    ordinal:枚举对象数字下标
    例子:
enum Color{
    RED,GREEN,BLUE;
}
public class Test {
    public static void main(String[] args) {
        Color color = Color.RED;
        System.out.println(color.ordinal()+"="+color.name());
    }
}

public final String name:取得枚举对象名称
public final int ordinal:取得枚举对象下标

enum Color{
    RED,GREEN,BLUE;
}
public class Test {
    public static void main(String[] args) {
        Color color = Color.RED;
        System.out.println(color.ordinal()+"="+color.name());
        System.out.println(color);
    }
}

我们用多例模式写上述代码:

class Color{
    private String title;
    public static final int RED_FLAG = 1;
    public static final int GREEN_FLAG = 5;
    public static final int BLUE_FLAG = 10;
    private static final Color RED = new Color("红");
    private static final Color GREEN = new Color("绿");
    private static final Color BLUE = new Color("蓝");
    private Color(String title){
        this.title = title;
    }
    public static Color getInstance(int flag){
        switch(flag){
            case RED_FLAG:
                return RED;
            case GREEN_FLAG:
                return GREEN;
            case BLUE_FLAG:
                return  BLUE;
            default:
                return null;
        }
    }

    @Override
    public String toString() {
        return this.title;
    }
}
public class Test{
    public static void main(String[] args) {
        Color color = Color.getInstance(Color.RED_FLAG);
        System.out.println(color);
    }
}

取得所有枚举类对象
枚举类.values( )

enum Color{
    RED,GREEN,BLUE;
}
public class Test{
    public static void main(String[] args) {
        for(Color color:Color.values()){
            System.out.println(color);
        }
    }
}

1.1 枚举中定义其他结构
枚举中若定义其他构造方法,构造方法必须用private封装
枚举中若定义其他结构,枚举对象声明必须放在枚举类的首行。

enum Color{
    RED("红"),GREEN("绿"),BLUE("蓝");
    private String title;//这句不能放在首行
    private Color(String color){ 
        this.title = title;
    }
}
public class Test{
    public static void main(String[] args) {
        for(Color color:Color.values()){
            System.out.println(color);
        }
    }
}

1.2 枚举实现接口
枚举中的对象会自动变为接口对象

interface IColor{
    String color();
}
enum Color implements  IColor{
    RED("红"),GREEN("绿"),BLUE("蓝");
    private String title;
    private Color(String title){
        this.title = title;
    }

    @Override
    public String toString() {
        return this.title;
    }
    public String color(){
        return this.name();
    }
}
public  class Test{
    public static void main(String[] args) {
        for(Color color : Color.values()){
            System.out.println(color);
        }
        IColor color = Color.RED; //枚举类对象,通过向上转型转型成color
        System.out.println(color);
        System.out.println(color.color());
    }
}
  1. 注解
    注解的产生:
class Person{
    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
    private String name;
    private Integer age; //构造方法,get、set方法太多,很麻烦
    public String getName() {
        return name;
    } //用注解可以不用写上述很多的方法
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

2.1 @Override 准确覆写
当子类覆写父类方法时,此注解检查覆写的方法是否正确声明,只有满足覆写方法要求才会编译通过,否则编译出错。

class Person{
    //   @Override   加上此注解后,会提示你覆写失败,让你检查错误
    public String tostring(){ //此时编译没报错,但运
        return "hello world"; // 行结果表明没有成功覆写toString方法
    }
}
public class Test{
    public static void main(String[] args) {
        Person per = new Person();
        System.out.println(per);
    }
}

2.2 @Deprecated 过期声明
建议用户不使用原有的类&方法时,可以在类或方法上@Deprecated表示当前版本中不推荐使用。

class Person{
    private String name;
    @Deprecated //过期注释,JDK更新,一些老方法不再推荐使用
    public Person(){
        System.out.println("******");
    }
    public Person(String name){
        System.out.println(name+"******");
    }
}
public class Test{
    public static void main(String[] args) {
        Person per1 = new Person(); //过期方法,能用,但是不推荐使用
        Person per2 = new Person("张三");
    }
}

java:JDK1.5枚举和注解新特性总结
2.3 @SuppressWarings 压制警告
调用某些操作可能产生问题的时候会出现警告信息,但是警告信息并不是异常。
class Person{

}

public class Test{
    public static void main(String[] args) {
        @SuppressWarnings({"rawtypes","unused" })
        Person person = new Person(); //此时三个Person下都会出现黄色波浪线
        // 第一个没说明Person类型,第二个没被使用,第三个没说明类型
        //应改为Person<String> person = new Person<>();
        //但也可以不改,在出错的上一行加上警告压制,就不会报错了
        //@SuppressWarnings({"rawtypes","unused" })
    }
}