1、什么是反射

间接操作目标对象的机制。核心是JVM在运行时才动态加载类,并且对于任意一个类,都能知道这个类的方法和属性。允许运行中的Java程序获取类的信息,并且操作类的方法和属性。

Java运行时,动态获得类的信息以及动态调用对象的方法的功能。

在运行时判断任意一个对象所属的类

在运行时构造任意一个类的对象

在运行时判断任意一个类所具有的成员变量和方法

在运行时调用任意一个对象的方法

2. 动态语言和静态语言

动态语言的定义:在程序运行时,运行改变程序结构或者变量类型,这这种语言称为动态语言

动态语言:Perl,Python,Ruby,JavaScript

静态语言:C++,Java,C#

3. Java反射机制由以下类来实现,这些类在java.lang.reflect中

Class类: 代表一个类

Field类:代表类的成员变量

Method类:代表类的方法

Constructor类:代表类的构造方法

Array类: 提供了动态创建数组,以及访问数组的元素的静态方法。

4. Java中,无论生成某个类的多少个对象,这些对象对象都会对应同一个Class对象

5、反射的原理

参考: https://blog.csdn.net/a745233700/article/details/82893076

6. 反射的例子: 打印出String类中所有的方法

 public static void main(String[] args) throws Exception {
Class<?> classType = Class.forName("java.lang.String"); Method[] methods = classType.getDeclaredMethods();
for(Method method : methods){
System.out.println(method);
} }

  

7.反射的例子2,调用单独的反射方法

public class InvokeTester {
public int add(int param1, int param2){
return param1 +param2;
} public String echo(String message){
return "hello: " + message;
} public static void main(String[] args) throws Exception{
//传统调用
InvokeTester tester = new InvokeTester();
System.out.println(tester.add(1,5));
System.out.println(tester.echo("tom")); // 反射调用
Class<?> classType = InvokeTester.class;
Object invokerTester = classType.newInstance(); //add方法
Method addMethod = classType.getMethod("add",new Class[]{int.class, int.class});
Object result = addMethod.invoke(invokerTester,new Object[]{2,3});
System.out.println(result); //echo方法
Method echoMethod = classType.getMethod("echo",new Class[]{String.class});
result = echoMethod.invoke(invokerTester,new Object[]{"world"});
System.out.println(result); }
}

  

最新文章

  1. delegate和protocol
  2. js中的深复制和浅复制
  3. MAC系统下配置环境变量
  4. ios 宏定义 系统版本 判定
  5. 【BZOJ1012】 【JSOI2008】最大数maxnumber
  6. [luogu P2170] 选学霸(并查集+dp)
  7. HTTP协议返回代码含义
  8. indexOf()忽略大小写方法
  9. zoj3785 What day is that day?
  10. [svc]tcp三次握手四次挥手&amp;tcp的11种状态(半连接)&amp;tcp的time-wait
  11. Dockerfile的 RUN和CMD
  12. redis查看状态信息
  13. centos6.9NAT网络模式
  14. [Tensorflow] Cookbook - CNN
  15. Unicode与中文转换工具类方法(转)
  16. dialog--not attached to window manager
  17. Java中goto和break、continue实现区别
  18. flink-vs.-spark
  19. effective VBA
  20. TCP、UDP数据包大小的限制

热门文章

  1. Linux:软件包安装
  2. centos6.6安装hadoop-2.5.0(一、本地模式安装)
  3. python 爬虫数据时间转换格式
  4. python day12 ——1.生成器2.生成器表达式 3.列表推导式
  5. SS报错的解决
  6. shell统计当前文件夹下的文件个数、目录个数
  7. Ubuntu创建新用户并设置权限
  8. 【转载】 A* 寻路算法 (个人认为最详细,最通俗易懂的一个版本)
  9. Java中的this关键字老生常谈
  10. Linux按照时间顺序列出文件