java基础【枚举、注解】

61 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

枚举:一个一个把类中所有元素列举出来,比如性别类,只有两个元素,可以使用枚举。

package com.hike.javase.enumtest;

import org.omg.Messaging.SyncScopeHelper;

import javax.print.attribute.standard.Severity;

/**
 * 对象是可数的特殊类
 */
enum TrafficSingnal{
    GO(10),STOP(30),CAREFULL(20); //默认调用无参构造器,想调用有参,必须带上实参。

    private int seconds; // 枚举中也可以有属性
    
    private TrafficSingnal(){};
    
    private TrafficSingnal(int seconds){
        this.seconds = seconds;
    }

    public int getSeconds() {
        return seconds;
    }

    public void setSeconds(int seconds) {
        this.seconds = seconds;
    }

    @Override
    public String toString() {
        return "TrafficSingnal{" +
                "seconds=" + seconds +
                '}';
    }
}

public class EnumTest {
    public static void main(String[] args) {
        TrafficSingnal go = TrafficSingnal.GO;    //直接从类中获取枚举对象
        System.out.println(go);

        TrafficSingnal stop = TrafficSingnal.valueOf("STOP"); //大小写敏感
        System.out.println(stop);       //根据常量对象名获取对象

        TrafficSingnal[] values = TrafficSingnal.values();    //获取所有的常量对象
        System.out.println(values[2]);
        int n = Integer.parseInt(args[0]);
        TrafficSingnal ts = values[n];

        switch (ts){
            case GO:
                System.out.println("绿灯");
            case CAREFULL:
                System.out.println("黄灯");
            case STOP:
                System.out.println("红灯");
        }

    }
}

注解:是一种特殊的注释,不参与程序的执行,编译器和JVM都能识别到。

package com.hike.javase.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

/**
 *  @Override的作用是告诉编译器,它修饰的方法要完成方法覆盖,请帮助做条件检查
 *  @Deprecated作用是告诉使用者,它修饰的目标过期了。可以修饰类,属性,方法,构造器,形参,局部变量
 *  @SuppressWarnings() 作用是抑制编译器警告,参数可以是一个数组也可以是一个值
 *
 *  注解:
 *      没有属性的,称为标记型注解
 *      有属性的,可以进一步传递数据,
 */
// 自定义注解,可以修饰一切.
// @Target对注解的注解,表明注解作用的范围(类(TYPE),属性(FIELD),方法(METHOD),构造器(CONSTRUCTOR)局部变量(LOCAL_VARIABLE)等)
// @Retention作用是约束注解的停留期,常量有:
//      RetentionPolicy.SOURCE表示停留期只在源码中;
//      RetentionPolicy.CLASS表示停留在class文件中,但在运行时无法获取;
//      RetentionPolicy.RUNTIME表示停留期是在运行时,这样可以通过反射处理
@Target(ElementType.METHOD)
@interface MyAnnotation{
    int id();//是一个方法,但在这里,叫做属性。属性的写法和方法类似。
    String name() default "我是缺省值";//可以有缺省值
}

//@MyAnnotation(id = 1)
@Deprecated
class Person{
    @Deprecated
    private String name;
    private int age;
    private String gender;

    @SuppressWarnings("unuse")
    public Person() {
        int n;
    }

    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

public class AnnotationTest {
}