zoukankan      html  css  js  c++  java
  • Java注解

    1、 概述:
        a. 概念:提供对元数据的支持,可以在编译、加载和运行时被读取,并执行相应的处理.
         b. 作用范围:用于修饰包、类、构造器、方法、成员变量、参数和局部变量的声明.
         c. 使用形式:name = value形式
         d. 特点:不会影响代码的执行.
    2、 基本注解(Java提供的注解):
          这三个注解都在java.lang包下.
    * 分类:
          * @Override:限定重写父类方法.
    * 当前类必须具有一个或多个父类.
    * 利用 @Override修饰的方法一定重写父类的方法.
    * 使用场景:只能使用在方法上.
          * @Deprecated:标示已过时.
    * 原因:
      * Java的版本更新时,向下兼容.(工程代码最初时使用Java 1.4, 更新为1.5依旧可以)
      * 软件开发时,在新版本的软件代码中,不再不要曾经的一些方法时,使用该注解.
    * 含义:当一个方法被标识为已过时,表示一定存在一个新方法替代.(依旧使用被标识过时的方法,也可以)
    * 使用场景:用于方法、类等,一般在方法上使用.
          * @SuppressWarnings:抑制编译器警告.
    * 使用方式: @SuppressWarnings(value = { "b" })
       * 自定义注解类:
        * 通过观察Java底层提供的注解内容,注解的定义类似于接口的定义.
          public @interface Override {
     String[] values() default 默认值;
          }
          * 注解类使用的是 @interface,接口使用的是 interface.
          * 注解类定义的必要属性,类似于接口中定义的方法.
         * 自定义注解类:
          * 是public修饰的.
          * 使用 @interface 关键字
        * 作用范围:用于类、方法、成员变量及局部变量等.
       * 限制注解类的注解:
        * @Target
          * 作用:指定当前自定义注解类可以应用在哪里(注解使用的范围).
          * 备选值:
    * ElementType.TYPE:指定该策略的Annotation可以修饰类、接口或枚举定义.
    * ElementType.PARAMETER:指定该策略的Annotation只能修饰参数.
    * ElementType.PACKAGE:指定该策略的Annotation只能修饰包定义.
    * ElementType.METHOD:指定该策略的Annotation只能修饰方法定义.
    * ElementType.LOCAL_VARIABLE:指定该策略的Annotation只能修饰局部变量.
    * ElementType.FIELD:指定该策略的Annotation只能修饰成员变量.
    * ElementType.CONSTRUCTOR:指定该策略的Annotation只能修饰构造器.
    * ElementType.ANNOTATION_TYPE:指定该策略的Annotation只能修饰Annotation.
        * @Retention
          * 作用:指定当前自定义注解类的生命周期.
          * 备选值:
    * RetentionPolicy.CLASS:当前注解内容只保留在Class文件中,JVM虚拟机不能获取注解内容.
    * RetentionPolicy.RUNTIME:当前注解内容可以保留到运行,JVM虚拟机可以获取注解内容.
    * RetentionPolicy.SOURCE:当前注解内容只保留在源码中,编译后失效.
     
    * 生命周期由短到长:SOURCE -> CLASS -> RUNTIME
        * @Documented
    3、 反射读取注解:
        * 注意:
          * 利用反射读取的注解的生命周期,一定是RUNTIME.
          * 反射与注解的父接口:
    * 反射:AnnotatedElement接口,提供反射获取注解信息的方法.
      * getAnnotation(Class<T> annotationClass)方法:获取指定注解信息.
      * getAnnotations()方法:获取所有注解信息.
      * isAnnotationPresent()方法:判断指定注解是否作用在当前元素(ClassMethodField等)上
    * 注解:Annotation接口
          * 看具体注解作用在哪里(例如在方法上,使用Method的getAnnotation())
     
    实例:自定义一个注解类,用于定义连接MySQL数据库使用的四个参数.
    1. package app.java.anno.demo;
    2. import java.lang.annotation.ElementType;
    3. import java.lang.annotation.Retention;
    4. import java.lang.annotation.RetentionPolicy;
    5. import java.lang.annotation.Target;
    6. /*
    7. * 自定义一个注解类,用于定义连接MySQL数据库使用的四个参数.
    8. * * driverClassName
    9. * * url
    10. * * username
    11. * * password
    12. */
    13. @Target(ElementType.TYPE)
    14. @Retention(RetentionPolicy.SOURCE)
    15. public@interfaceJdbcinfo{
    16. String driverClassName()default"com.mysql.jdbc.Driver";
    17. String url();
    18. String username()default"root";
    19. String password();
    20. }
    1. package app.java.anno.demo;
    2. import java.io.InputStream;
    3. import java.sql.Connection;
    4. import java.sql.DriverManager;
    5. import java.sql.ResultSet;
    6. import java.sql.SQLException;
    7. import java.sql.Statement;
    8. import java.util.Properties;
    9. /**
    10. * 封装利用JDBC连接MySQL数据库的工具类.
    11. * @author JYL
    12. */
    13. @Jdbcinfo(password ="root", url ="jdbc:mysql://localhost:3306/day0402")
    14. publicclassJDBCUtils{
    15. privatestaticJdbcinfo jdbcinfo =null;
    16. static{
    17. //利用反射读取对应注解信息
    18. Class<JDBCUtils> clazz1 =JDBCUtils.class;
    19. Class<Jdbcinfo> clazz2 =Jdbcinfo.class;
    20. Jdbcinfo jdbcinfo = clazz1.getAnnotation(clazz2);
    21. try{
    22. Class.forName(jdbcinfo.driverClassName());
    23. }catch(Exception e){
    24. e.printStackTrace();
    25. }
    26. }
    27. publicstaticConnection getConnection()throwsSQLException{
    28. returnDriverManager.getConnection(jdbcinfo.url(),jdbcinfo.username(),jdbcinfo.password());
    29. }
    30. publicstaticvoid close(Connection conn,Statement stmt){
    31. try{
    32. if(stmt !=null){stmt.close();}
    33. if(conn !=null){conn.close();}
    34. }catch(SQLException e){
    35. e.printStackTrace();
    36. }
    37. }
    38. publicstaticvoid close(Connection conn,Statement stmt,ResultSet rs){
    39. try{
    40. if(rs !=null){rs.close();}
    41. if(stmt !=null){stmt.close();}
    42. if(conn !=null){conn.close();}
    43. }catch(SQLException e){
    44. e.printStackTrace();
    45. }
    46. }
    47. }
     
     





  • 相关阅读:
    Python 的 Pandas 对矩阵的行进行求和
    python 统计字符串中指定字符出现次数的方法
    Python 2 代码转 Python 3的一些转化
    Python 的文件保存路径
    Pycharm 个人认为舒服漂亮又好用的主题风格
    【RS】Collaborative Memory Network for Recommendation Systems
    MATLAB 条形图添加多个图例
    MATLAB 画柱状图(/直方图)修改横坐标名称并使其横着显示
    Nexus3.X 将Maven项目上传至nexus私服
    nexus maven 使用案例
  • 原文地址:https://www.cnblogs.com/istarry/p/8c7046decdb083e8537709445fb3d8d2.html
Copyright © 2011-2022 走看看