黑马程序员_java高新技术之注解

来源:互联网 发布:特朗普访华意义知乎 编辑:程序博客网 时间:2024/05/29 18:40

------- android培训java培训、期待与您交流! ----------

注解:(Annotation)

1.注解相当于一种标记,加了注解就等于加上了某种标记;没加,就等于没有这种标记。以后,javac编译器,开发工具和其他程序可以利用反射技术来了解你的类及各种元素上有何种标记,看你有什么标记,就去干相应的事,标记可以加在类,方法,字段,方法的参数或局部变量上。

2.注解类型:Annotation|---deprecated  过时

                                      |---Override   重载

                                      |---SuppressWarnings  警告

3.注解应用结构图

 3.1 注解类

  @Interface A{}

 3.2应用了“注解类”的类

@A 

class{

}

 3.3 对应用了注解类的类进行反射操作

  class  C{

      if(B.class.isAnnotationPresent(A.class)){

       A a=B.class.getAnnotation(A.class);

     }

  }

4.为注解A服务的注解,即在A上加的注解称为元注解

  eg:@Retention(RetentionPolicy.RUNTIME)

 5.为注解添加属性

   package com.fgq.annotationTest;

   import java.lang.annotation.Retention;
   import java.lang.annotation.RetentionPolicy;
   //元注解
   @Retention(RetentionPolicy.RUNTIME)
   public @interface annotationTest {
   //添加基本属性
   String name() default "sjdof";
   int age() default 33;
   //添加数组属性
   int[] score() default {66,77,98};
   //添加枚举类型的属性
   TrafficLamp Lamp() default TrafficLamp.Green;
   }

6.测试添加的属性

 

package com.fgq.annotationTest;
//添加注解,添加注解属性的练习
@annotationTest(name="haha")
public class annotationClassTest {

 public static void main(String[] args) {
  //判断注解是否存在
  if(annotationClassTest.class.isAnnotationPresent(annotationTest.class)) {
   //通过反射的方式获取注解对象
   annotationTest annotation=(annotationTest)annotationClassTest.class.getAnnotation(annotationTest.class);
   //通过注解对象输出对象中的属性
   System.out.println(annotation.name());
   System.out.println(annotation.age());
   //输出数组类型数组的长度
   System.out.println(annotation.score().length);
   //输出枚举类型的属性
   System.out.println(annotation.Lamp().nextLamp());
  }
  else
  {
   System.out.println("sjdieojf");
  }
 }

}

7.应用的枚举类

 

package com.fgq.annotationTest;

public enum TrafficLamp {
 Red(30){

  @Override
  public TrafficLamp nextLamp() {
   // TODO Auto-generated method stub
   return Green;
  }
  
 },Green(45){

  @Override
  public TrafficLamp nextLamp() {
   // TODO Auto-generated method stub
   return Yellow;
  }
  
 },Yellow(5){

  @Override
  public TrafficLamp nextLamp() {
   // TODO Auto-generated method stub
   return Red;
  }
  
 };
 //构造函数
 private TrafficLamp(int time){
  this.setTime(time);
 }
 //定义get,set变量time的方法
 public int getTime() {
  return time;
 }
 public void setTime(int time) {
  this.time = time;
 }
 //定义变量,存储灯亮时间
 private int time;
 //定义抽象方法,获取下个那个灯亮
 public abstract TrafficLamp nextLamp();
}

 

8.枚举和注解都是特殊的类,不能用new创建他们的实例对象,创建枚举的实例对象就是在其中添加元素。
0 0