注解
2016-04-11 18:30
288 查看
概述
注解与注释,
注解,告诉编译器如何运行程序!
注释, 给程序员阅读,对编译、运行没有影响;
注解作用,
1. 告诉编译器如何运行程序;
2. 简化(取代)配置文件 【案例后再看】
常用的注解,
自定义注解
通过自定义注解,可以给类、字段、方法上添加描述信息!
a. 注解基本写法
b.带默认值的注解
b.默认名称的注解
注解属性名称为value,这就是默认名称
使用
@Author(“Jet”)
@Author(value = “Jet”)
注解属性类型为数组:
元注解
元注解,表示注解的注解!
指定注解的可用范围:
@Target({
TYPE, 类
FIELD, 字段
METHOD, 方法
PARAMETER, 参数
CONSTRUCTOR, 构造器
LOCAL_VARIABLE 局部变量
})
注解与注释,
注解,告诉编译器如何运行程序!
注释, 给程序员阅读,对编译、运行没有影响;
注解作用,
1. 告诉编译器如何运行程序;
2. 简化(取代)配置文件 【案例后再看】
常用的注解,
// 重写父类的方法 @Override public String toString() { return super.toString(); } // 抑制编译器警告 @SuppressWarnings({"unused","unchecked"}) private void save() { List list = null; } // 标记方法以及过时 @Deprecated private void save1() { }
自定义注解
通过自定义注解,可以给类、字段、方法上添加描述信息!
a. 注解基本写法
/** * 自定义注解 (描述一个作者) * @author Jie.Yuan * */ public @interface Author { /** * 注解属性 * 1. 修饰为默认或public * 2. 不能有主体 */ String name(); int age(); } 使用 @Author(name = "Jet", age = 30) public void save() { }
b.带默认值的注解
public @interface Author { /** * 注解属性 * 1. 修饰为默认或public * 2. 不能有主体 */ String name(); int age() default 30; // 带默认值的注解; 使用的时候就可以不写此属性值 }
b.默认名称的注解
注解属性名称为value,这就是默认名称
public @interface Author { // 如果注解名称为value,使用时候可以省略名称,直接给值 // (且注解只有一个属性时候才可以省略名称) String value(); }
使用
@Author(“Jet”)
@Author(value = “Jet”)
注解属性类型为数组:
public @interface Author { String[] value() default {"test1","test2"}; } 使用: @Author({“”,“”}) public void save() { }
元注解
元注解,表示注解的注解!
指定注解的可用范围:
@Target({
TYPE, 类
FIELD, 字段
METHOD, 方法
PARAMETER, 参数
CONSTRUCTOR, 构造器
LOCAL_VARIABLE 局部变量
})
// 元注解 - 2. 指定注解的声明周期 @Retention(RetentionPolicy.SOURCE) 注解只在源码级别有效 @Retention(RetentionPolicy.CLASS) 注解在字节码即别有效 默认值 @Retention(RetentionPolicy.RUNTIME) 注解在运行时期有效 注解反射 @Id @Author(remark = "保存信息!!!", age = 19) public void save() throws Exception { // 获取注解信息: name/age/remark // 1. 先获取代表方法的Method类型; Class clazz = App_2.class; Method m = clazz.getMethod("save"); // 2. 再获取方法上的注解 Author author = m.getAnnotation(Author.class); // 获取输出注解信息 System.out.println(author.authorName()); System.out.println(author.age()); System.out.println(author.remark()); }
相关文章推荐
- 关于Delphi XE2的FMX的一点点研究之消息篇
- VS2013MFC对话框工程学习笔记二 - 了结布局和一些基本的窗口组件
- 什么函数不能申明为虚函数的问题
- UIImagePikerController 浅析
- CMP SUB 区别
- Linux下time函数
- 简单问题藏着大陷阱
- Android屏幕适配
- 内嵌数组更新
- ife-task0001暂存
- lightoj 1016 - Brush (II) 贪心
- 视图与暂时表
- iOS彩票项目--第四天,新特性界面搭建,UICollectionViewController的初次使用
- 旧版glibc兼容旅程
- win7如何设置以管理员身份运行
- 浙大PAT乙级 1001. 害死人不偿命的(3n+1)猜想
- 项目思考一
- python学习8
- 反射
- iOS开发-url的特殊字符转换