运用反射机制来调用类的main方法,在一些框架当中经常用到。我们只需要将一个类的全名(即要包括包名)配置到配置文件当中。
我们知道main方法的参数是一个String类型的数组,那么在反射当中应该要注意这个地方。代码中有详解。
MainClass.java
package com.cloud.reflect; public class MainClass { public static void main(String[] args) { for (String arg : args) { System.out.println(arg); } } }
MainTest.java
package com.cloud.reflect; import java.io.InputStream; import java.lang.reflect.Method; import java.util.Properties; public class MainTest { public static void main(String[] args) throws Exception { //用类加载器加载配置文件 InputStream in = MainTest.class.getResourceAsStream("config.properties"); Properties props = new Properties(); props.load(in); //关闭IO流 in.close(); String className = props.getProperty("className"); Method mainMethod = Class.forName(className).getMethod("main", String[].class); //由于main方法是静态方法,所以第一个参数为null, 由于main方法只接收一个字符串数组的参数, //如果你的第二参数是new String[]{"chris", "cloud"}这种形式的话,会报错的。因为 //JDK会认为你传了两个String类型的参数,为此解决方案有两种,推荐用第一种。 //第一种方案: mainMethod.invoke(null, (Object) new String[]{"chris", "cloud"}); //第二种方案: mainMethod.invoke(null, new Object[]{new String[]{"chris", "cloud"}}); } }
config.properties
className=com.cloud.reflect.MainClass
相关推荐
反射机制使得我们能够在运行时动态地获取类的信息,并且能够创建对象、调用方法、访问字段,甚至改变类的行为。在Java中,`java.lang.reflect`包提供了对反射的支持。 在“反射,动态加载指定类调用类中的方法”这...
Go 语言中的反射机制使得程序能够在运行时获取变量的类型信息,以及根据这些信息来动态地创建对象、调用方法等。 **1. 接口(interface)类型与反射** Go 语言中的接口类型是反射的核心概念之一。一个接口类型包含两...
反射机制和类加载机制是Java编程语言中的两个重要概念。反射提供了强大的运行时元数据操作能力,而类加载机制则确保了类的安全加载和动态管理。深入理解这两个机制对于Java开发者来说至关重要,尤其对于那些从事框架...
下面我们将详细讨论如何利用Java反射机制来调用类的私有方法。 首先,我们需要导入相关的Java反射包,包括`java.lang.reflect.Method`和`java.lang.reflect.InvocationTargetException`。接下来,我们创建一个名为`...
Java 反射机制是 Java 语言中的一个重要特性,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并调用对象的方法,甚至修改对象的状态。这一机制极大地增强了 Java 程序的灵活性和可扩展性,尤其是在...
- **框架开发**:许多框架(如Spring、Hibernate)都大量使用反射机制来实现其功能。 - **代码解析**:在开发IDE时,可以通过反射来获取类的信息进行代码提示和分析。 #### 四、Class对象 `Class`对象是反射的核心...
在编程领域,反射机制是一种强大的特性,允许程序在运行时检查自身的行为,包括类的信息、对象的状态以及函数的调用等。在C++的世界里,Qt框架提供了一种实现反射的手段,即QMetaObject系统。这个系统允许我们动态地...
`Class`类在Java反射机制中扮演着核心角色,它是所有Java类的运行时表示。`Class`对象可以由以下几种方式获取: 1. **通过类的`Class`属性获取**:如`String.class`。 2. **通过对象的`getClass()`方法获取**:如`...
在Java中,反射机制主要通过java.lang.Class类和相关的类库来实现,它使得我们能够在运行时动态地获取类的信息(如类名、属性、方法等)并能创建和调用对象。 1. **类的加载与Class对象** 当Java虚拟机(JVM)加载一...
通过 Java 反射机制,开发者可以在运行时判断任意一个对象所属的类、构造任意一个类的对象、判断任意一个类所具有的成员变量和方法、调用任意一个对象的方法,并生成动态代理。 Java 反射机制主要提供了以下功能: ...
Java反射机制的主要作用包括:获取类的所有属性和方法、构造动态实例、调用类的方法等。通过反射,程序可以动态地创建对象和调用其方法,从而实现更灵活的功能。 #### 二、Java反射机制的由来与发展 Java反射机制...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地获取类的信息并调用其方法,创建对象,访问私有成员,甚至改变类的行为。在深入...
Java反射机制使得程序在运行时能够动态加载、解析和使用未知类型的类。这为开发者提供了强大的灵活性,比如在设计和运行时添加新类,或者动态查询和操作类的能力。通过反射,我们可以: 1. 加载运行时才能确定的...
Java中的反射机制为开发者提供了一种强大而灵活的方式来处理类信息。通过反射,可以实现诸如动态代理、框架开发等高级功能,同时也可以用于构建高度可扩展和可维护的软件系统。然而,需要注意的是,反射操作可能会...
### Java反射机制总结 ...总之,Java反射机制是Java语言的一个重要特性,它提供了在运行时动态获取类信息和操作类结构的能力。合理使用反射可以提高程序的灵活性和扩展性,但在使用时也需要考虑到其潜在的问题和限制。
首先,Java反射机制允许我们在运行时获取类的元数据,包括类的名称、属性(字段)和方法。例如,通过`Class.forName()`方法,我们可以根据类名动态加载类。一旦获取到`Class`对象,我们就可以进一步获取该类的所有...
反射机制可以用来创建动态代理类,这对于AOP(面向切面编程)非常有用。动态代理允许你在不修改原有代码的情况下增强功能,例如添加日志记录或事务管理。 ##### 3.2 序列化与反序列化 反射可以用于序列化和反序列...
C#的反射机制提供了一种强大的工具,使我们能够在运行时动态地操作代码。尽管可以利用反射访问私有成员,但这应被视为一种特殊情况下的权宜之计,而不是常规编程实践。在单元测试中,适度使用反射可以帮助验证私有...