首页 > 编程语言 >Java中的反射

Java中的反射

时间:2024-07-01 19:29:49浏览次数:18  
标签:反射 Java aClass 对象 Class Method class

1.什么是反射?

反射是框架设计的灵魂。

反射(Reflection)是 Java 的一种特性,它可以让程序在运行时获取自身的信息,并且动态地操作类或对象的属性、方法和构造器等。通过反射功能,可以让我们在不知道具体类名的情况下,依然能够实例化对象,调用方法以及设置属性。简单来说就是在类运行的过程中,把类中的成员抽取为其他类的过程就是反射。

2.为什么使用反射?

反射是为了解决在运行期,在对某个实例一无所知的情况下,去调用其方法或属性。

例如在spring框架中,传入类的路径,spring会自动帮你创建类的对象。

3.获取Class反射类的三种方式

第一种:通过类名.class属性

Class aClass = Student.class;

第二种:通过类路径获取

Class aClass1 = Class.forName("com.ls.test.Student");

第三种:通过对象名获取反射类型

Student student =new Student();
Class aClass2 = student.getClass();

4.Class类中常用的方法

1.根据反射类得到实例对象。   newInstance():

Class<Student> aClass = Student.class;
Student student = aClass.newInstance();

2.得到反射类上的注解对象。 getAnnotation() :

MyAnnotation annotation = aClass.getAnnotation(MyAnnotation.class);
System.out.println(annotation.value());

5.获取Method方法类对象

1.getDeclaredMethods():得到本类中所有的方法。

Method[] declaredMethods = aClass.getDeclaredMethods();

2.getDeclaredMethod():获取本类中指定的方法对象。

Method study = aClass.getDeclaredMethod("study", null);

3.getMethods():获取本类以及父类中public修饰的方法。

Method[] methods = aClass.getMethods();

4.getMethod(): 获取本类以及父类中指定的public方法对象。

Method study1 = aClass.getMethod("study");

6.Method类对象中常用的方法

1.invoke(Object对象,参数值):执行该方法,返回该方法返回的结果。

Class<?> aClass = Class.forName("com.ls.test.People");
Object o = aClass.newInstance();
Method method = aClass.getMethod("print", Integer.class);
Object result = method.invoke(o, 20);

2.setAccessible()设置允许访问私有成员方法或变量

Method aDo = aClass.getDeclaredMethod("Do", String.class);
Object love = aDo.invoke(o, "爱");

私有方法不能被反射调用,要用强力反射。
Method method1 = aClass.getDeclaredMethod("Do", String.class);
method1.setAccessible(true);
Object result1 = method1.invoke(o, "爱");

7.获取Field属性对象的方式

8.Field类中的常用的方法

1.set(Object对象,值):为属性赋值

2.getName():获取属性名

3.getAnnotation():获取属性上的注解对象

标签:反射,Java,aClass,对象,Class,Method,class
From: https://blog.csdn.net/m0_65224643/article/details/140099501

相关文章

  • 反射的概念和使用
    反射的概念 反射是框架设计的灵魂,就是在类运行期间把类中成员抽取为其他类的过程为什么使用反射反射就是为了解决在运行期间对某个实例一无所知的情况下调用其方法和属性获取class反射类的三种方式一、通过类名.class属性Class<泛型>命名=类名.class;二、通......
  • java中的函数式接口:(Consumer、BiConsumer、Supplier、Predicate、Function、BiFunctio
    Consumer说明:(1)consumer接口来自java8中引入的Java.util.function包(2)Consumer是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递一个参数执行指定的方法)。功能:Consumer的功能接口是一个接受单一参数并且不返回任何结果的操作。必要时,"结果"可以存在在集合......
  • Eclipse 创建 Java 包
    打开新建Java包向导你可以使用新建Java包向导来创建Java包。Java包向导打开方式有:通过点击"File"菜单并选择New>Package在PackageExplorer中通过右击鼠标选择>Package在工具条上点击包按钮( )如果你要创建子包,在打开创建Java包向导前选择好父包,这样在......
  • Eclipse 创建 Java 类
    打开新建Java类向导你可以使用新建Java类向导来创建Java类,可以通过以下途径打开Java类向导:点击"File"菜单并选择New>Class在PackageExplorer窗口中右击鼠标并选择New>Class点击类的下拉按钮()并选择( )在打开创建Java类向导前,最好选择好Java类......
  • Eclipse 创建 Java 接口
    打开新建Java接口向导新建Java接口向导可以创建新的Java接口。打开向导的方式有:点击File菜单并选择New>Interface在PackageExplorer窗口中右击鼠标并选择New>Interface在工具条上的下拉框按钮中()选择()在打开创建Java接口向导前,最好选择好Java接......
  • 华为OD机试D卷 --智能成绩表--24年OD统一考试(Java & JS & Python & C & C++)
    文章目录题目描述输入描述输出描述用例题目解析算法源码题目描述小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗?输入描述第1行输入两个整数,学生人数n和科目数量m。0<n<1000<m<10第2行输入m个科目名称,彼......
  • 华为OD机试D卷 --最富裕的小家庭--24年OD统一考试(Java & JS & Python & C & C++)
    文章目录题目描述输入描述输出描述用例题目解析算法源码题目描述在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。输入描述第一行为一......
  • 华为OD机试D卷 --最多购买宝石数目--24年OD统一考试(Java & JS & Python & C & C++)
    文章目录题目描述输入描述输出描述用例1用例2用例3用例4题目解析算法源码题目描述橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i]0≤i<nn=gems.length宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续;......
  • 华为OD机试D卷 --最大括号深度--24年OD统一考试(Java & JS & Python & C & C++)
    文章目录题目描述输入描述输出描述用例题目解析算法源码题目描述现有一字符串仅由‘(‘,’)’,‘{‘,’}’,’[‘,’]’六种括号组成。若字符串满足以下条件之一,则为无效字符串:①任一类型的左右括号数量不相等;②存在未按正确顺序(先左后右)闭合的括号。输出......
  • JavaScript 编程语言【 数据类型】过滤|排序|映射|迭代
    文章目录将border-left-width转换成borderLeftWidth过滤范围原位(inplace)过滤范围降序排列复制和排序数组创建一个可扩展的calculator映射到names映射到对象按年龄对用户排序随机排列数组获取平均年龄数组去重从数组创建键(值)对象Iterableobject(可迭代对象)Symbol.......