java中 什么是反射?

JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

获取String的方法

1public class DumpMethods { 2 3 4 public static void main(String[] args) throws Exception{ 5 6 Class<?> classType = Class.forName("java.lang.String"); 7 8 Method[] methods =classType.getDeclaredMethods(); 9 10 for (Method method:methods){ 11 System.out.println(method); 12 } 13 14 } 15 16 17}

截图:

 

通过反射调用方法 

  通过反射调用方法。详情见代码及注释:

1import java.lang.reflect.Method; 2public class InvokeTester 3{ 4 public int add(int param1, int param2) 5 { 6 return param1 + param2; 7 } 8 public String echo(String message) 9 { 10 return "Hello: " + message; 11 } 12 public static void main(String[] args) throws Exception 13 { 14 // 以前的常规执行手段 15 InvokeTester tester = new InvokeTester(); 16 System.out.println(tester.add(1, 2)); 17 System.out.println(tester.echo("Tom")); 18 System.out.println("---------------------------"); 19 20 // 通过反射的方式 21 // 第一步,获取Class对象 22 // 前面用的方法是:Class.forName()方法获取 23 // 这里用第二种方法,类名.class 24 Class<?> classType = InvokeTester.class; 25 26 // 生成新的对象:用newInstance()方法 27 Object invokeTester = classType.newInstance(); 28 System.out.println(invokeTester instanceof InvokeTester); // 输出true 29 30 31 32 // 通过反射调用方法 33 // 首先需要获得与该方法对应的Method对象 34 Method addMethod = classType.getMethod("add", new Class[] { int.class, int.class }); 35 36 // 第一个参数是方法名,第二个参数是这个方法所需要的参数的Class对象的数组 37 // 调用目标方法 38 Object result = addMethod.invoke(invokeTester, new Object[] { 1, 2 }); 39 System.out.println(result); // 此时result是Integer类型 40 41 //调用第二个方法 42 Method echoMethod = classType.getDeclaredMethod("echo", new Class[]{String.class}); 43 Object result2 = echoMethod.invoke(invokeTester, new Object[]{"Tom"}); 44 System.out.println(result2); 45 } 46}
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java中的反射和代理

  Java反射机制可以动态地获取类的结构,动态地调用对象的方法,是java语言一个动态化的机制。java动态代理可以在不改变被调用对象源码的前提下,在被调用方法前后增加自己的操作,极大地降低了模块之间的耦合性。这些都是java的基础知识,要想成为一名合格的程序猿,必须掌握!Java反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知

java面试(反射)05

1.什么是反射JAVA反射机制是在运行状态中,对于任意一个类,都能够获取这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取类信息以及动态调用对象内容就称为java语言的反射机制。2.反射的作用在运行时判断任意一个对象所属的

Java基础与提高干货系列——Java反射机制

前言今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来。那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现。正文Java反射机制定义Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以

RPC框架手撕之路---java反射以及动态代理机制

在上一篇文章中,我们提到了,RPC框架所需要的java基础,第一点就是java的动态代理机制,动态代理机制的基础是反射,无论是在实际编程或者是面试时,都是java知识的重中之重。java反射:定义:在运行状态中,对于任意一个类,都能够知道这一个类的所有属性和方法,对于任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息以及动态调用类方法

Java基础与提高干货系列 -- Java反射机制

前言今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来。那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现。正文Java反射机制定义Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性

java中 什么是反射? - HelloWorld