简单介绍java反射机制中Annotation(注解)与Method的程序示例
来源:互联网 发布:中小企业网络需求分析 编辑:程序博客网 时间:2024/06/06 02:44
首先,这篇文章是针对对java有一定基础的伙伴,尽请见谅。今天,小芳给大家写了一个简单的程序,关于注解(Annotation)与反射机制。
注解的详细介绍大家可以参考:https://www.cnblogs.com/xdp-gacl/p/3622275.html。这篇文章里面有非常详细的介绍。
好了,接下来给大家展示我写的简单的程序:
先看一下我写的注解:
package com.mec.about_reflection.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;//Retention与Target都是元注解(注解的注解),前者表明这个注解的作用范围,它有三种取值:RetentionPolicy.SOURCE、RetentionPolicy.CLASS、RetentionPolicy.RUNTIME分别对应:Java源文件(.java文件)---->.class文件---->内存中的字节码,后者表明这个注解的作用范围(即作用于包、类、字段、方法)@Retention(RetentionPolicy.RUNTIME) //运行时检查@Target(value= {ElementType.METHOD}) //作用于方法上public @interface Reflection { //定义两个成员,未赋初值,这要求在用到这个注解时要给这两个值赋初值 int max(); int min();}
这是一个简单的类:
package com.mec.about_reflection;import com.mec.about_reflection.annotation.Reflection;public class PersonClass { public String name; private Integer age; private String sex; public PersonClass() { } public PersonClass(String name, Integer age, String sex) { super(); this.setName(name); this.setAge(age); this.setSex(sex); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } //这里是对上面定义的注解的使用,使用时给它的两个成员赋初值,若不赋初值则显示有错误。 @Reflection(min = 12,max = 109) public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "PersonClass [name=" + name + ", age=" + age + ", sex=" + sex + "]"; }}
接下来,我们用反射机制测试一下这个注解:
package com.mec.about_reflection.annotation.test;import java.lang.annotation.Annotation;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import com.mec.about_reflection.annotation.Reflection;public class TestAnnotation { public static void main(String[] args) { String className = "com.mec.about_reflection.PersonClass"; Integer val = 40; try { //首先,通过反射机制得到这个类,通过反射机制得到一个类有三种方法:1.通过类名得到;2.通过完整的类名得到;3.通过对象名 Object object = new PersonClass()。这里用到的是全类名。 Class classOne = Class.forName(className); //创建一个这个类的实例 Object object = classOne.newInstance(); System.out.println("获取的类"); //获取这个类的特定的方法 Method method = classOne.getDeclaredMethod("setAge", Integer.class); //得到这个方法之后,再获取这个方法的注解 Annotation annotation = method.getAnnotation(Reflection.class); System.out.println(annotation); //判断这个注解是否为空或者,这个方法的注解是不是我们所写的这个注解 if(annotation != null && annotation instanceof Reflection) { //如果上述条件成立,则对这个注解进行类型强转 Reflection reflection = (Reflection) annotation; //判断这个范围是不是在我这个注解的范围之内 if(val > reflection.max() || val < reflection.min()) { //如果不在注解的范围之内则给出提示 throw new RuntimeException("数值超出范围!"); } } //执行这个方法 method.invoke(object, val); 输出这个对象,这里默认输出的是它的toString()方法 System.out.println("object:" + object); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } }}
输出结果如下:
获取的类@com.mec.about_reflection.annotation.Reflection(min=12, max=109)object:PersonClass [name=null, age=40, sex=null]
好了,程序说完了。这个程序非常浅显,虽然我已经学了java快半年了,但是还是很差。有写的不对的地方请大家多多提出意见。不胜感激!!
路漫漫其修远兮,吾将上下而求索
阅读全文
0 0
- 简单介绍java反射机制中Annotation(注解)与Method的程序示例
- 【Java】注解 annotation的介绍与使用
- java反射机制的简单示例(android中)
- java注解入门的简单介绍与示例(框架基础)
- java反射机制初步认识<三>注解(Annotation)的使用
- java的method反射机制(一)
- java的method反射机制(二)
- Java反射机制简单示例
- Java注解(Annotation)介绍
- 深入理解Java:注解(Annotation)--注解处理器(反射机制)
- Java进阶(极客)——反射机制(三)Method 对象的机制与实现
- 第三周第二天( 【Class类与Java反射 】 【Method类的常用方法 】 【注解】)
- 关于java中注解Annotation的分析介绍
- Java 注解的简单学习与应用 Annotation
- java代码中常见的3中注解(Annotation)-----程序中带有@的语句
- Java反射中Annotation的
- Java 注解(Annotation)介绍
- JAVA注解Annotation介绍
- Android OkHttp网络请求拦截器
- hadoop 2.3.0-cdh5.0.0笔记
- Makefile经典教程
- android 动画+跳转
- 6-1 多态性与虚函数
- 简单介绍java反射机制中Annotation(注解)与Method的程序示例
- C/C++与Python连通调用
- 数字签名算法RSA
- orm--sharding-jdbc
- springboot集成cas3.5.2
- ANR初识
- 输出前num个素数
- delphi中的pos(args0,args1)与javascript中的indexOf的转化
- 给定一个字符串和一个整数k,对字符串开头算起的每2k个字符的前k个字符进行反转。 如果还有少于k个字符,则将其全部撤消。 如果小于2k但大于或等于k个字符,则反转前k个字符,