Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。
Java 可运行于多个平台,如 Windows, Mac OS 及其他多种 UNIX 版本的系统。Java语言编写的程序,在一次编译后,可以在多个系统平台上运行。
主要特性:
????????反射是 java 中重要的一个只是模块,其是框架设计的灵魂,基本上所有的框架都是使用反射机制来实现的。
将类的各个组成部分封装为其他对象,这就是反射机制。
注意:同一个字节码文件,在以上三种方式中,获取的 class 对象都是同一个。
package cn.reflectTest;
public class reflectTest {
public static void main(String[] args) throws Exception {
// 1.通过class.forName获取
Class cls1 = Class.forName("cn.reflectTest.reflectClass");
// 2.直接用类名.clss获取
Class cls2 = reflectClass.class;
// 3.使用对象获取
reflectClass obj = new reflectClass();
Class cls3 = obj.getClass();
}
}
? ? ? ? 备注:暴力反射:setAccessible() 忽略访问权限符的安全检查
? ? ? ? 要求:写一个框架,可以创建任意类的对象,并且执行其中的任意方法
? ? ? ? 1)目录如下
? ? ? ? 2)配置文件 pro.properties 中代码如下
className=
methodName=
? ? ? ? 3)Person 和 Student 代码如下
package cn.cats.doMain;
public class Person {
public void eat(){
System.out.println("eat...");
}
}
package cn.cats.doMain;
public class Student {
public void sleep(){
System.out.println("sleep...");
}
}
? ? ? ? 4)框架类 ReflectTest 代码如下
package cn.cats.doMain;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
/**
* 框架类
*/
public class ReflectTest {
public static void main(String[] args) throws Exception {
// 创建任意类对象,执行任意方法
// 1.加载配置文件
// 1.1创建pro对象
Properties pro = new Properties();
// 1.2加载配置文件,转换为一个集合
// 1.2.1获取class目录下的配置文件
ClassLoader classLoader = ReflectTest.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("pro.properties");
System.out.println(classLoader);
pro.load(is);
// 2.获取配置文件中定义的数据
String className = pro.getProperty("c1assName");
String methodName = pro.getProperty ( "methodName" );
// 3.加载该类进内存
Class cls = Class.forName(className) ;
//4.创建对象
Object obj = cls.newInstance();
//5.获取方法对象
Method method = cls.getMethod (methodName) ;
//6.执行方法
method.invoke(obj);
}
}
? ? ? ? 通过反射的学习,虽然在实际开发中使用较少,但是当需要自己写一些框架的时候,这是必须要用到的知识。因此反射是 java 中非常重要的一部分,好啦本文就到此为止啦,希望能够对各位小伙伴有所帮助哦。