• java注解(1)


      java中注解是我一直不懂的地方,这次就来复习一下。

      java中有5个基本Annotation(注解)4个元Annotation。五个基本Annotation是为了修饰程序元素,四个元Annotation是为了修饰Annotation的。下面就具体谈一谈。

      五个基本Annotation分别为1.@Override(限定重写父类的方法,必须重写父类的方法),2.@Deprecated(标记已过时),3@SuppressWarnings(抑制编译器警告),4@SafeVarargs(抑制JAVA7的堆污染警告),5@FunctionalInterface(函数式接口)。以上就是五个基本Annotation,在这里不再一一叙述各自的区别,我其实了解也不多,具体的Annotation要结合反射来讲,以后复习完反射在来谈谈吧。

      四个元Annotation分别为1.@Retention(修饰Annotation的存在时间),2.@Target(指定Annotation所修饰的程序),3@Documented(修饰的Annotation会出现在API文档中),4.@Inherited(修饰的Annotation具有继承性)。和上面的一样,这里不再累述。具体的自己可以查阅资料。

      以前,我以为注解的作用不是很大,但是后来在网上看了之后,发现在企业中注解的作用还是比较大的,方便开发者写XML文档,当然还有其他的用处,这里不再列举。下面就具体的写一个例子,方便理解,例子的主要作用就是将测试类中的方法,带有注解的方法会被测试。代码如下:

      1 package AnnotationTrain;
      2 
      3 import java.lang.annotation.ElementType;
      4 import java.lang.annotation.Retention;
      5 import java.lang.annotation.RetentionPolicy;
      6 import java.lang.annotation.Target;
      7 import java.lang.reflect.Method;
      8 
      9 import AnnotationTrain.demo2.Testable;
     10 
     11 public class demo2 {
     12     // 使用JDK的元数据Annotation:@Retention
     13     @Retention(RetentionPolicy.RUNTIME)//修饰注解的存在时间
     14     @Target(ElementType.METHOD)//修饰注解只能修饰方法
     15     public @interface Testable //被修饰的方法
     16     {
     17         //此注解修饰方法,表示只有被标记的方法才可以测试
     18     }
     19     
     20     public static void main(String[] args) throws Exception
     21     {
     22         //这里找类的时候要用类的完全限定名(包名.类名),要不然可能会报错
     23         ProcessorTest.Process("AnnotationTrain.MyTest");
     24     }
     25     
     26 
     27 }
     28 /*
     29  * 
     30  * @ClassName:     MyTest
     31  * @Description:测试用例
     32  * @author:    yanyu
     33  * @date:        2018-5-8 下午1:48:43
     34  *
     35  */
     36 class MyTest
     37 {
     38     @Testable
     39     public static void m1()
     40     {
     41         //有标记
     42     }
     43     
     44     public static void m2()
     45     {
     46         //没有标记
     47     }
     48     @Testable
     49     public static void m3()
     50     {
     51         //拥有标记,还可以抛出异常
     52         throw new IllegalArgumentException("参数出错了");
     53     }
     54     
     55     public static void m4()
     56     {
     57         //没有标记,抛出异常
     58         throw new IllegalArgumentException("参数出错了");
     59     }
     60     
     61     @Testable
     62     public static void m5()
     63     {
     64         //拥有标记,还可以抛出异常
     65         throw new RuntimeException("程序业务出现异常!");
     66     }
     67     
     68     public static void m6()
     69     {
     70         //没有标记,抛出异常
     71         throw new RuntimeException("程序业务出现异常!");
     72     }
     73 }
     74 /*
     75  * 
     76  * @ClassName:     ProcessorTest
     77  * @Description:测试工具类
     78  * @author:    yanyu
     79  * @date:        2018-5-8 下午1:50:02
     80  *
     81  */
     82 class ProcessorTest
     83 {
     84     //测试方法
     85     public static void Process(String clazz) throws ClassNotFoundException
     86     {
     87         //计数器
     88         int passed=0;
     89         int failed=0;
     90         //System.out.print("hah");
     91         //遍历clazz对应的类里的所有方法
     92         for(Method m : Class.forName(clazz).getMethods())
     93         {
     94             //如果该方法使用了@TestTable修饰
     95             if(m.isAnnotationPresent(Testable.class))//这里的判断还是不清楚具体的使用方法
     96             {
     97                 try
     98                 {
     99                     //调用m方法
    100                     m.invoke(null);
    101                     //方法成功运行,计数器加一
    102                     passed++;
    103                 }catch (Exception ex) {
    104                     // TODO: handle exception
    105                     //打印异常
    106                     System.out.println("方法"+m+"运行时异常,异常为:"+ex.getCause());
    107                     //失败计数器加一
    108                     failed++;
    109                 }
    110             }
    111         }
    112         //统计测试的结果
    113         System.out.println("共运行了"+(passed+failed)+"个方法,其中:
    "+
    114                 "成功了"+passed+"个方法
    "+
    115                 "失败了"+failed+"个方法");
    116     }
    117 }

      以上就是代码的具体实现,现在对于一些具体的实现和应用还是不太理解,以后再来补充吧。结束。

  • 相关阅读:
    Python股票分析系列——系列介绍和获取股票数据.p1
    快速相关
    特别长序列的快速卷积
    长序列的快速卷积
    快速卷积
    素因子快速傅里叶变换
    用一个N点复序列的FFT同时计算两个N点实序列离散傅里叶变换
    实序列快速傅里叶变换(二)
    实序列快速傅里叶变换(一)
    java 对于手机号码、邮箱、银行卡号脱敏一条龙服务
  • 原文地址:https://www.cnblogs.com/yanyu01/p/9008179.html
Copyright © 2020-2023  润新知