Android

录一些旧的笔记

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()方法:判断指定注解是否作用在当前元素(Class\Method\Field等)上
     * 注解:Annotation接口
       * 看具体注解作用在哪里(例如在方法上,使用Method的getAnnotation())

实例:自定义一个注解类,用于定义连接MySQL数据库使用的四个参数.

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/*
 * 自定义一个注解类,用于定义连接MySQL数据库使用的四个参数.
 *  * driverClassName
 *  * url
 *  * username
 *  * password
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Jdbcinfo {
    String driverClassName() default "com.mysql.jdbc.Driver";

    String url();

    String username() default "root";

    String password();

}
package app.java.anno.demo;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
 * 封装利用JDBC连接MySQL数据库的工具类.
 * @author JYL
 */
@Jdbcinfo(password = "root", url = "jdbc:mysql://localhost:3306/day0402")
public class JDBCUtils {
    private static Jdbcinfo jdbcinfo = null;

    static {
        //利用反射读取对应注解信息
        Class<JDBCUtils> clazz1 = JDBCUtils.class;
        Class<Jdbcinfo> clazz2 = Jdbcinfo.class;

        Jdbcinfo jdbcinfo = clazz1.getAnnotation(clazz2);

        try {
            Class.forName(jdbcinfo.driverClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException{
        return DriverManager.getConnection(jdbcinfo.url(),jdbcinfo.username(),jdbcinfo.password());
    }

    public static void close(Connection conn, Statement stmt){
        try {
            if(stmt != null){stmt.close();}
            if(conn != null){conn.close();}
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void close(Connection conn, Statement stmt, ResultSet rs){
        try {
            if(rs != null){rs.close();}
            if(stmt != null){stmt.close();}
            if(conn != null){conn.close();}
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/d7142947/article/details/51564443
文章标签: 注解 概念
个人分类: JAVA
下一篇网络编程
想对作者说点什么? 我来说一句

java注解代码java注解代码

2011年05月17日 7KB 下载

java 课件 数组、枚举及注解

2010年12月15日 369KB 下载

Java 注解技术视频详解

2018年04月15日 44.17MB 下载

JAVA注解(Annotation).doc

2010年03月17日 48KB 下载

Java注解方式

2017年12月29日 465KB 下载

注解解析demo

2015年08月03日 6KB 下载

JAXB 生成XML文件

2015年05月22日 88KB 下载

java注解反射连接数据库

2013年10月17日 2.31MB 下载

java Annotation 注解

2013年11月28日 31KB 下载

没有更多推荐了,返回首页

关闭
关闭