打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java注解
摘要: 注解可用于替代配置文件,可通过反射技术得到类中的注解,以决定怎么去运行类注解和注释的区别:  注释是给程序员看的,而注解是提供给JVM的3个基本的Annotation:@Override:限定重写父类方法,该注解只能用于方 ...
注解可用于替代配置文件,可通过反射技术得到类中的注解,以决定怎么去运行类
注解和注释的区别:
注释是给程序员看的,而注解是提供给JVM的
3个基本的Annotation:
@Override:限定重写父类方法,该注解只能用于方法
@Deprecated: 用于标识某个程序元素(类、方法等)已过时
@SuppressWarnings:抑制编译器警告
注:@SuppressWarnings可传入如下参数:
unused 变量未使用
deprecation 使用了不赞成的类或方法时的警告
unchecked 执行了未检查的转换时的异常,例如没有使用泛型的集合
……
all 所有的警告
使用注解:
定义注解
为类使用定义好的注解
定义反射程序操作使用注解的类
定义注解:
1 // 使用@interface关键字定义注解类
2 public @interface MyAnnotation {
3 // 声明注解的属性,通过属性可描述原来写在配置文件中的信息
4 // 声明语法:返回值 属性名称();
5 String name();
6
7 int age() default 20; // 声明属性的默认值,此属性可写可不写
8
9 String value();
10
11 }
12
13 @interface MyAnnotation2 {
14 String value();// 如果注解中只有一个名称为value的属性,那么使用注解时可以省略value=http://www.cnblogs.com/aras/archive/2012/03/16/部分,如@MyAnnotation(“xxx")
15 }
使用定义好的注解:
1 //如果定义注解时还定义了value属性以外的属性,就不能省略value=http://www.cnblogs.com/aras/archive/2012/03/16/
2 @MyAnnotation(name = "aras", value = "http://www.cnblogs.com/aras/archive/2012/03/16/123")
3 @MyAnnotation2("123")
4 public class Demo2 {
5
6 }
元Annotation
定义:修饰Annotation的Annotation
@Retention:只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留的域, @Rentention 包含一个 RetentionPolicy 类型的成员变量, 通过这个变量指定域。
RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解. 这是默认值
RetentionPolicy.RUNTIME:编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注解. 程序可以通过反射获取该注释
RetentionPolicy.SOURCE: 编译器直接丢弃这种策略的注释
@Target:
指定注解用于修饰类的哪个成员. @Target 包含了一个名为 value,类型为ElementType的成员变量
定义反射程序操作使用注解的类:
获得使用注解信息的Class对象
通过Class对象结合反射API 获得注解修饰对象
判断该对象上是否使用了目标注解 isAnnotationPresent
使用对象获得目标注解 getAnnotation --- 强制类型转换
1 @JDBCInfo(driver = "com.mysql.jdbc.Driver", url = "jdbc:mysql:///test", pwd = "123", user = "root")
2 public class JDBCUtils {
3 private static String driver;
4 private static String url;
5 private static String user;
6 private static String pwd;
7 static {
8 // 通过反射解析注解内容
9 Class c = JDBCUtils.class; //获得字节码对象
10 if (c.isAnnotationPresent(JDBCInfo.class)) { //判断是否使用了注解
11 JDBCInfo jdbcInfo = (JDBCInfo) c.getAnnotation(JDBCInfo.class); //获得注解
12 driver = jdbcInfo.driver();
13 url = jdbcInfo.url();
14 user = jdbcInfo.user();
15 pwd = jdbcInfo.pwd();
16 }
17 }
18
19 public static Connection getConnection() throws ClassNotFoundException,
20 SQLException {
21 Class.forName(driver);
22 Connection conn = DriverManager.getConnection(url, user, pwd);
23 return conn;
24 }
25 }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
张龙 Annotation学习笔记
各大框架都在使用注解,浅谈注解的使用及原理以及类加载器
编程语言枚举与注解
Java注解Annotation详解
子类可以继承到父类上的注解吗
Java注释@interface的用法【转】
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服