注解

概述

     J2SE 5.0开始的技术Annotation。可以标注在类、字段、方法上。

注解与注释区别

    注释:给程序员阅读,对编译、运行没有影响
    注解:告诉编译器如何运行程序

作用

    1.告诉编译器如何运行程序
    2.简化(取代)配置文件

附加:@SuppressWarnings注解的关键字

关键字 用途
all to suppress all warnings
boxing  to suppress warnings relative to boxing/unboxing operations
cast to suppress warnings relative to cast operations
dep-ann to suppress warnings relative to deprecated annotation
deprecation to suppress warnings relative to deprecation
fallthrough to suppress warnings relative to missing breaks in switch statements
finally  to suppress warnings relative to finally block that don’t return
hiding to suppress warnings relative to locals that hide variable
incomplete-switch to suppress warnings relative to missing entries in a switch statement (enum case)
nls to suppress warnings relative to non-nls string literals
null to suppress warnings relative to null analysis
rawtypes to suppress warnings relative to un-specific types when using generics on class params
restriction to suppress warnings relative to usage of discouraged or forbidden references
serial to suppress warnings relative to missing serialVersionUID field for a serializable class
static-access to suppress warnings relative to incorrect static access
synthetic-access  to suppress warnings relative to unoptimized access from inner classes
unchecked to suppress warnings relative to unchecked operations
unqualified-field-access to suppress warnings relative to field access unqualified
unused to suppress warnings relative to unused code

常见注解

 
     
  1. package com.cn.annotation;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /**
  5. * Author:Liu Zhiyong(QQ:1012421396)
  6. * Version:Version_1
  7. * Date:2017年7月25日10:42:04
  8. * Desc:注解
  9. J2SE 5.0开始的技术Annotation。可以标注在类、字段、方法、参数、构造方法,以及局部变量上
  10. 作用:
  11. 1.告诉编译器如何运行程序
  12. 2.简化(取代)配置文件
  13. 附加:@SuppressWarnings注解的关键字
  14. 关键字 用途
  15. all to suppress all warnings
  16. boxing to suppress warnings relative to boxing/unboxing operations
  17. cast to suppress warnings relative to cast operations
  18. dep-ann to suppress warnings relative to deprecated annotation
  19. deprecation to suppress warnings relative to deprecation
  20. fallthrough to suppress warnings relative to missing breaks in switch statements
  21. finally to suppress warnings relative to finally block that don’t return
  22. hiding to suppress warnings relative to locals that hide variable
  23. incomplete-switch to suppress warnings relative to missing entries in a switch statement (enum case)
  24. nls to suppress warnings relative to non-nls string literals
  25. null to suppress warnings relative to null analysis
  26. rawtypes to suppress warnings relative to un-specific types when using generics on class params
  27. restriction to suppress warnings relative to usage of discouraged or forbidden references
  28. serial to suppress warnings relative to missing serialVersionUID field for a serializable class
  29. static-access to suppress warnings relative to incorrect static access
  30. synthetic-access to suppress warnings relative to unoptimized access from inner classes
  31. unchecked to suppress warnings relative to unchecked operations
  32. unqualified-field-access to suppress warnings relative to field access unqualified
  33. unused to suppress warnings relative to unused code
  34. */
  35. public class Demo1 {
  36. /**
  37. * 重写父类的方法
  38. */
  39. @Override
  40. public String toString() {
  41. // TODO Auto-generated method stub
  42. return super.toString();
  43. }
  44. /**
  45. * 抑制编译器警告
  46. */
  47. @SuppressWarnings("unused")
  48. void save(){
  49. List list = null;
  50. }
  51. /**
  52. * 2.抑制多类警告:2种方式
  53. */
  54. // @SuppressWarnings(value ={"unused","rawtypes"})//rawtypes 抑制没有指定泛型类型的警告
  55. @SuppressWarnings({"unused","rawtypes"})//rawtypes 抑制没有指定泛型类型的警告
  56. void save1(){
  57. List list = null;
  58. }
  59. /**
  60. * 3.抑制所有警告
  61. */
  62. @SuppressWarnings({"all"})//all 抑制所有警告
  63. void save2(){
  64. new ArrayList();
  65. ArrayList list = null;
  66. }
  67. /**
  68. * 标记过时的方法
  69. */
  70. @Deprecated
  71. void save3(){
  72. }
  73. }

自定义注解

    定义方法:

          新的  Annotation  类型使用 @interface   关键字   

    作用:

               通过自定义注解,可以给类、字段、方法上添加描述信息!

    自定义注解写法:

 
    
  1. package com.cn.annotation;
  2. import java.util.Date;
  3. /**
  4. * 自定义注解
  5. * 功能:描述作者
  6. * @author liuzhiyong
  7. *
  8. */
  9. public @interface Author {
  10. /**
  11. * 注解属性
  12. * 1.修饰符只能为public(默认为public abstract)
  13. * 2.不能有主体
  14. */
  15. public abstract String name();
  16. /**
  17. * 带默认值的注解属性;使用的时候就可以不用写此属性
  18. * @return
  19. */
  20. public abstract int age() default 24;
  21. /**
  22. * 注解属性类型为数组
  23. * @return
  24. */
  25. String[] like();
  26. /**
  27. *  默认名称的注解属性(Value)
  28. ①如果注解属性名称只是value一个的时候,可以省略名称,直接给值;②但是有其它没有给默认值的属性的时候得写
  29. * @return
  30. */
  31. String value();
  32. }

    自定义注解的使用:

 
     
  1. package com.cn.annotation;
  2. import java.lang.annotation.Annotation;
  3. import java.lang.reflect.Method;
  4. import org.junit.Test;
  5. /**
  6. * 自定义注解的语法
  7. * @author liuzhiyong
  8. *
  9. */
  10. public class Demo2 {
  11. @Test
  12. @Author(value ="默认属性名称的值", name = "木丁西", like = { "篮球", "乒乓" })
  13. public void save() throws NoSuchMethodException, SecurityException{
  14. }
  15. }

元注解

     元注解指注解注解的注解 JDK 中定义了如下元 Annotation
          @Target:指定注解用于修饰类的哪个成员  @Target 包含了一个名为 value的枚举数组 属性 ,类型为 ElementType (JDK5开始) 的成员变量。
            value枚举数组类型的属性的值可取:
                    {
ElementType.TYPE, 修饰类、接口(包括注释类型)或枚举声明
                ElementType.METHOD,    修饰方法
                ElementType.FIELD,     修饰字段 (包括枚举常量)
                ElementType.PARAMETER,    修饰参数
                ElementType.CONSTRUCTOR,     修饰构造方法
                ElementType.LOCAL_VARIABLE    修饰局部 }
          @Retention :  只能用于修饰一个  Annotation  定义 ,  用于指定该  Annotation  可以保留的域 , @ Rentention   包含一个  RetentionPolicy   类型的成员变量 ,  通过这个变量指定域。
                    RetentionPolicy.SOURCE : 编译器直接丢弃这种策略的注解,只在源码级别有效
                    RetentionPolicy.CLASS 编译器将把注解记录在   class   文件中.   当运行   Java   程序时, JVM   不会保留注解.   这是默认值
                    RetentionPolicy.RUNTIME:编译器将把注释记录在   class   文件中.   当运行   Java   程序时, JVM   会保留注解.   程序才可以通过反射获取该注解
         @Documented:  用于指定被该元  Annotation  修饰的  Annotation  类将被  javadoc 工具提取成文档。
          @Inherited:  被它修饰的  Annotation  将具有继承性 . 如果某个类使用了被  @Inherited  修饰的  Annotation,  则其子类将自动具有该注解

注解的反射

 
    
  1. package com.cn.annotation;
  2. import java.lang.annotation.Annotation;
  3. import java.lang.reflect.Method;
  4. import org.junit.Test;
  5. /**
  6. * 自定义注解的语法
  7. * @author liuzhiyong
  8. *
  9. */
  10. public class Demo2 {
  11. @Author(value ="默认属性名称的值", name = "木丁西", like = { "篮球", "乒乓" })
  12. private int id;
  13. @Author(value ="默认属性名称的值", name = "木丁西", like = { "篮球", "乒乓" })
  14. public Demo2() {
  15. // TODO Auto-generated constructor stub
  16. }
  17. @Author(value ="默认属性名称的值", name = "木丁西", like = { "篮球", "乒乓" })
  18. public void save() throws NoSuchMethodException, SecurityException{
  19. }
  20. @Test
  21. public void testSave() throws Exception {
  22. /**
  23. * 获取注解信息:value, name, like, age
  24. */
  25. //1.先获取代表方法的Method类型
  26. Method method = this.getClass().getDeclaredMethod("save");
  27. //2.再获取方法上的注解
  28. Author author = method.getAnnotation(Author.class);
  29. //获取输出注解的信息
  30. System.out.println(author.value() + "#" + author.name() + "#" + author.like().toString() + "#" + author.age());
  31. }
  32. }

你可能感兴趣的:(javaSE,jdbc)