java 注解
来源:互联网 发布:雷电网络 价格 编辑:程序博客网 时间:2024/06/06 00:02
1、简介
注解(也叫元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后的某个时刻可以方便的使用它们。
1.2 标准注解
java内部提供了三种内置注解
@Override :保证重写方法时的正确性
@Deprecated:对不应该使用的方法添加的标记
@SuppressWarnings:关闭不当的编译器警告。
1.3 基本语法
元注解是注解的注解,有四类
@Target 标记注解使用的地方 定义在ElementType中
TYPE 类、接口或enum
FIELD, 域声明(域代表变量所处的上下文,如静态域即静态变量、全局域即全局变量等),包括enum
CONSTRUCTOR:用于描述构造器
LOCAL_VARIABLE:用于描述局部变量
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述参数@Retention:代表注解的级别 定义在RetentionPolicy中
SOURCE:只在源文件中有效 会被编译器丢弃
CLASS:在class文件中有效 jvm会忽略
RUNTIME:在运行时有效 可以使用反射读取注解信息@Documented 将注解包含在javadoc中
@Inherited:允许子类继承父类的注解
1.4 注解元素的类型限制
注解可以使用的类型有:
所有基本类型
String
Class
enum
Annotation
以上所有类型的数组
注解的元素要么有确定的默认值,要么在使用注解时提供。且非基本类型的元素不能赋为null。所以一般会赋一些特殊的值,如-1或空字符
1.5 获取注解信息
getAnnotations(): 返回该元素的所有注解,包括没有显式定义该元素上的注解。
isAnnotationPresent(annotation): 检查传入的注解是否存在于当前元素。
getAnnotation(class): 按照传入的参数获取指定类型的注解。返回null说明当前元素不带有此注解。
1.6 自定义注解
// 注解会在class字节码文件中存在,在运行时可以通过反射获取到@Retention(RetentionPolicy.RUNTIME)//定义注解的作用目标**作用范围字段、枚举的常量/方法@Target({ElementType.FIELD,ElementType.METHOD})//说明该注解将被包含在javadoc中@Documented public @interface AnTest { /** * 字段名称 * @return */ String name() default ""; /** * 是否为序列号 * @return */ int id() default -1;}
public class Test{ //带注解的字段 @AnTest(name = "an name", id = 5) String name; //带注解的方法 @AnTest(name="get") String get(){ return "test"; } public static void main(String[] args) { try { Class clazz = Class.forName("com.company.Test"); // 提取到被注解的方法Method,这里用到了反射 Method method = clazz.getDeclaredMethod("get"); // 从Method方法中通过方法getAnnotation获得我们设置的注解 AnTest anTest = method.getAnnotation(AnTest.class); System.out.println("get name==>"+anTest.name()+" id==>"+anTest.id()); //通过反射获取字段 Field nameField = clazz.getDeclaredField("name"); //根据Field获取注解类AnTest AnTest anTest1 = nameField.getAnnotation(AnTest.class); System.out.println("name name==>"+anTest1.name()+" id==>"+anTest1.id()); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } }}
参考:
http://www.importnew.com/14227.html
- Java注解-自定义注解
- Java注解----自定义注解
- Java注解自定义注解
- Java注解--四种元注解
- Java注解-三种內建注解
- 【Java】【注解】自定义注解
- java注解
- java注解
- java注解
- java 注解
- Java注解
- java 注解
- Java 注解
- Java注解
- java 注解
- JAVA注解
- Java注解
- Java注解
- [NOIP2016]Day1T3 换座位
- 设置全局参数——定制matplotlib(部分翻译)
- ccf 201703-3 Markdown ( java)
- Javascript边框闪烁提示
- Android解析WindowManager(一)WindowManager体系
- java 注解
- bug : Undefined symbols for architecture x86_64 个案分析
- Codeforces 851D Arpa and a list of numbers (枚举+分段)
- jmeter与jenkins的集成
- 接口
- ==和equals http://www.cnblogs.com/dolphin0520/p/3592500.html
- js中preventDefault 与stopPropagation 及 stopImmediatePropagation的区别
- 带权路径长度 层次遍历
- 三个div,一个左浮动,一个有浮动,另外一个不浮动引发的样式问题