JavaSE-基础篇-反射注解

张开发
2026/4/16 19:21:20 15 分钟阅读

分享文章

JavaSE-基础篇-反射注解
反射框架技术的灵魂是在运行状态中对于任意一个类都能够知道这个类的所有属性和方法对于任意一个对象都能调用它的任意属性和方法这种动态获取信息以及动态调用对象方法的功能叫做反射机制三种获取 .class 类的方式//Class.forName(全类名); Class c1 Class.forName(com.itheima.demo.case02.Student); //类名.class Class c2 Student.class; //对象.getClass(); Class c3 new Student().getClass();//通过反射给Student里的属性赋值 public class Test { public static void main(String[] args) throws Exception { Student student new Student(); System.out.println(student student); setProperty(student, name, 张三); setProperty(student, age, 18); setProperty(student, gender, 男); System.out.println(student student); } private static void setProperty(Object obj, String name, Object value) throws Exception { //获取字节码对象 Class clazz obj.getClass(); //获取字段对象 Field field clazz.getDeclaredField(name); //获取方法 String methodName set; methodName name.substring(0, 1).toUpperCase() name.substring(1); Method method clazz.getMethod(methodName, field.getType()); //调用方法 method.invoke(obj, value); } } class Student { private String name; private int age; private String gender; public Student() { } public Student(String name, int age, String gender) { this.name name; this.age age; this.gender gender; } public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender gender; } }//加载 .properties 文件的内容并且执行里面的类的方法 public class Test { public static void main(String[] args) throws Exception{ //加载配置文件 Properties properties new Properties(); InputStream stream Test.class.getClassLoader().getResourceAsStream(classInfo.properties); properties.load(stream); Class? clazz Class.forName(properties.getProperty(className)); Object o clazz.newInstance(); Method method clazz.getMethod(properties.getProperty(methodName)); method.invoke(o); } } class Student { public void study(){ System.out.println(学生正在学习。。。); } }classNamecom.itheima.demo.case06.Student methodNamestudy注解Annotation表示注解是JDK1.5的新特性。 注解的主要作用对程序进行标注理解注释是给人看的注解是给虚拟机看的通过注解可以给类增加额外的信息//注解定义格式 public interface 注解名称 { public 属性类型 属性名() default 默认值; }Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) interface Test { } //需求自定义一个注解Test用于指定类的方法上如果类中的某个的方法上使用了该注解就执行该方法 public class Test01 { public static void main(String[] args) throws Exception { Class demoClass Demo.class; Object obj demoClass.newInstance(); Method[] methods demoClass.getMethods(); for (int i 0; i methods.length; i) { Method method methods[i]; if (method.isAnnotationPresent(Test.class)) { method.invoke(obj); } } } } class Demo { Test public void add() { System.out.println(add()方法执行了); } Test public void delete() { System.out.println(delete()方法执行了); } public void update() { System.out.println(update()方法执行了); } public void query() { System.out.println(query()方法执行了); } }

更多文章