zoukankan      html  css  js  c++  java
  • 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 默认值,在使用注解时,必须显示的为这个属性设置值。

     

     

  • 相关阅读:
    【GoLang】GoLang map 非线程安全 & 并发度写优化
    【IDEA】IDEA 如何设置编辑器字体大小
    【GoLang】GoLang fmt 占位符详解
    转头条:阿里p7架构师:三年经验应该具备什么样的技能?
    RPC与RMI的区别
    为什么使用消息队列,为什么使用RabbitMQ、springAMQP
    cookie的安全性问题
    solr与mysql数据同步的方案
    springcloud与dubbo对比:
    mybatis与分布式事务的面试
  • 原文地址:https://www.cnblogs.com/aihuadung/p/10910762.html
Copyright © 2011-2022 走看看