java_注解

java_注解

 

什么是注解?

首先需要明确一个概念,注解也是类,在内存中有着对应的class文件

注解是JDK1.5的特性

注解相当于一种标记,是类的组成部分,可以给类携带一些额外的信息.

标记(注解)可以加载包,字段,类,方法,方法参数以及局部变量上.

注解是给编译器或者jvm看的,编译器或jvm可以根据注解来完成对应的功能.

 

注解的作用?

注解的作用主要就是给程序带入参数

 

以下几个常用操作中都使用了注解

  1. 生成帮助文档

@author 用来标识作者名称

@version 用来标识对象的版本号,适用范围:文件,类,方法

 

  1. 编译检查

@override 用来告诉编译器该方法是重写父类中的方法,如果不存在或者有错误,则编译失败

 

 

  1. 框架的配置(框架等于代码+配置)

 

还有一些较为常用的注解:

         @supressWarning 警告不显示,可以传入参数,参数为all时整个类都不显示警告

    @FunctionalInterface 函数式接口(只有一个自己特有抽象方法的接口)
          @Test junit测试

         @Deprecated 过时,不建议使用

 

 

 

什么是Junit?

    1).什么是"JUnit":它是一个第三方的软件包,它的作用:让我们可以很方便的进行“单元测试”。

    2).以后我们的程序会非常庞大,模块非常多,方法也非常多,此时测试某个方法就很不方便-需要启动程序,

       然后一步一步操作才能到达我们想测的方法。

    3).JUnit的功能:可以代替main()方法,在任意的类中可以测试运行某个方法。达到方便测试的目的。

    4).JUnit是基于“注解”的。

Junit的使用@Test

Junit是java语言的单元测试框架,简单理解可以取代java程序中的main方法,Junit属于第三方工具

在需要测试的方法声明上一行加上@Test,导入相应jar包(很多开发环境已经集成了Junit),就可以直接测试方法

 

JUnit单元测试_其它注解

   1).@Before:在@Test之前执行。每个@Test方法执行前都要执行一次@Before。@Before也可以有多个,执行顺序:
        1).按方法名的长度:降序;

        2).再按方法名:降序;

    2).@After:在@Test之后执行。每个@Test方法执行后,都要执行一次@After。@After也可以有多个,执行顺序:

        1).按方法名长度:升序;

        2).再按方法名:升序

    3).@BeforeClass : 用在静态方法上,在所有的@Before之前执行,而且只执行一次。

    4).@AfterClass : 用在静态方法上,在所有的@After之后执行,而且只执行一次。

 

注解_自定义注解的基本格式

     public @interface MyAnno{

        }

    但这个注解定义后,有两个问题:

        1).这个注解可以用在类的任何位置--使用"元注解"来解决;

        2).我们的注解没有起到任何作用--使用"自定义的注解解析器"来解决;

注解_元注解

         是自定义注解使用的

   1).什么是元注解:它也是一个注解,但这个注解必须用在注解的定义上。

        它可以约束我们定义的注解:

            1).使用的位置:@Target

                1).类       :ElementType.TYPE

                2).成员属性  :ElementType.FIELD

                3).成员方法  :ElementType.METHOD

                4).构造方法  :ElementType.CONSTRUCTOR

                5).局部变量上    :ElementType.LOCAL_VARIABLE

                6).形参:   :ElementType.PARAMETER

            2).生命周期:@Retention

'               1).源码:不会被编译到class中。 RetentionPolicy.SOURCE

                        例如:@Overrite

                2).class中:会存在于源码、class文件中,但运行时不会被加载到内存:RetentionPolicy.CLASS

                3).运行时(内存):会存在于源码、class文件、运行时内存:RetentionPolicy.RUNTIME

                        例如:JUnit的@Test....

    2).示例代码

  

//约束注解只能在类上使用
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno {
}

 

注解_解析注解

    1).模拟JUnit的注解解析器。

        前提

        1).自定义注解@MyTest必须是用在方法上生命周期运行时;@MyTest

        2).使用自定义注解;Student

        3).自定义注解解析器,使用反射解析使用自定义注解的类,根据使用注解的情况,来决定怎样执行。MyAnnoTest

    2).见:demo10

注解_定义包含属性的注解

    1).格式:

        public @interface 注解名{

            数据类型 属性名() [default 默认值];

        }

        数据类型:各种基本类型、String、枚举类型。注意:没有包装类型。

        属性名:自定义标识符;

               注意:如果注解中只有一个属性,而且叫:value

                     使用注解时,可以省略这个属性名

 

@CheckName(value = 1)
public void show(){
    System.out.println("show...");
}
@CheckName(value = 3)
public void aaa(){
    System.out.println("aaa...");
}
@CheckName(2)//直接写值
public void x(){
    System.out.println("x...");
}
@CheckName(4)
public void bbb(){
    System.out.println("bbb...");
}

默认值:如果定义了default 默认值,在使用注解时,不是必须要为这个属性定义值,

                使用默认值。但如果没有定义default 默认值,在使用注解时,必须显示的为这个属性设置值。

 

 

 

posted @ 2019-05-23 11:12  爱华顿g  阅读(291)  评论(0编辑  收藏  举报