首页 > 编程知识 正文

java通过反射获取方法,java反射调用get方法

时间:2023-05-03 06:36:30 阅读:41057 作者:3795

一、Java-Reflect主题

1 .类1 .使用类

2 .方法反射

3 .成员变量反射

4 .构造函数的反射

5.Java类加载机制

|------------基本反射轮廓

JAVA反射机制在执行状态下,对于任一类都可以知道该类的所有属性和方法; 对于其中一个对象

它可以调用任何方法和属性; 动态获取这些信息并动态调用对象方法的功能称为java语言反射机制。

运行Javareflection(radial )机制: )程序时,可以改变程序的结构和变量类型。 把这样的语言

PythonRuby是动态语言,而c、Java和C#不是动态语言。 但是,JAVA有非常突出的动态相关机制:Reflection

Java是指在编译期间可以在运行时加载、探测和使用完全未知的classes。 也就是说,Java程序

在运行时加载第一个知道名称的类,知道其完整结构,不包含methods定义,生成目标实体或生成其fields

设定值或唤起methods。

|--------------用于获得方法信息的函数------------------------------------------------- -。

方法获取方法(字符串名称,class[]params"--使用特定的参数类型获取命名的公共方法

Method[] getMethods ()--获取类的所有公共方法

methodgetdeclaredmethod (字符串名称,Class[] params ) -如何使用特写参数类型获取类声明的命名

method[]getdeclaredmethods(--获取类自己声明的所有方法,无论其权限如何

|-----------------用于获取用于获取成员的变量

Field[] getFields ()--方法获取所有公共成员变量的信息

Field[] getDeclaredFields ()--获取该类自己声明的成员变量的信息

字段设置(字符串名称)--获取命名的公共字段

fieldgetdeclaredfield (字符串名称)--用于获取类声明命名的字段

|------------用于获取构造函数的信息---------------------------------------------。

构造函数[ ]获取构造函数()--获取所有公共的构造函数

constructor [ ] getdeclaredconstructors (-建议使用自己声明的构造函数,而不考虑访问级别

结构控制器(class [ ] params )--获取使用特殊参数类型的公共

constructorgetdeclaredconstructor [ class [ ] params ]--获取使用特定参数类型的构造函数,而不管访问级别如何

=====================================

什么是Calss类

1 )在面向对象的世界里,万物都是对象

在Java语言中,静态成员,通常的数据类型是对象实际的吗?

班里是谁的对象?

类是对象,类是Java.lang.Class类的实例对象。

2 )这个对象应该怎么表达呢?

There is a Class named Class中文表显示,现在有一个班,他的名字叫class

大板栗直接分析:

2 .动态加载类

1.Class.forName (班级全名);

2 .不仅表示类的类类型,还表示动态加载类

3 .请区分编译、执行

4 .编译时加载类为静态加载类,运行时加载类为动态加载类

以前的小栗子:

主要:

Word类

分析:在上述main中,创建了两个类的实例。 假设现在还没有Word类

我们去运行肯定会有四个错误:找不到两个类和两个类的方法。

那么我现在去创建一个Word类,就是上述的Word类。在运行的会怎样那。

运行结果两个错,找不到Office类和方法。

现在可以看出来一个问题:就是我有Word类,但是程序还不能运行。导致我不能使用任何一个类。

这就是静态加载类:在编译时刻就需要加载所有的可能使用到的类。

那么有什么办法能做到:我想用那个类的时候在告诉我,那个类能用,还是不能用。

解决方案:静态加载类

看栗子:

首先定义一个:动态加载类----》定义两个功能类------》定义一个功能标准接口分别让两个类实现。

动态加载类:

定义一个标准接口:

定义两个类实现标准接口:方便动态加载

3.java获取方法信息

基本的数据类型:

例如:

Class  c1=int.class;  //int的类类型   ||  Class  c2=String.class; //String类的类类型

Class  c3=double.class;   ||  Class  c4=Double.class;  两者不同,后表示Double类的类类型

Class  c5=void.class;

void关键字 都存在类类型

3-1:Class类的基本API操作

打印类的信息,包括类的成员函数、成员变量

运行结果:

4:java获取成员变量构造函数信息

成员变量也是对象:java.lang.reflect.Field

Field类封装了关于成员变量的操作

4-1:获取成员变量:

运行如下:

4-1:获取构造函数信息

运行如下:

五:java方法反射的基本操作

1)如何获取某个方法

方法的名称和方法的参数列表才能唯一决定某个方法

2)方法反射的操作

methood.invoke(对象,参数列表)

小栗子:

7.泛型集合反射

1.看这样一个问题:

假设我定义一个泛型集合:

ArrayList  list = new  ArrayList();

添加一个信息:

list.add("a");

2.如果向这个集合添加一个数值可以添加吗?正常情况下肯定不行。

那么有什么办法可以实现添加那?答使用集合反射

集合反射又是什么鬼那?

集合反射就是,等待集合编译完成后,在进行集合操作,就是绕过编译期间。

接下来我们来看个,大栗子,你就懂了

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。