赞
踩
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 中非常重要的一部分,好啦本文就到此为止啦,希望能够对各位小伙伴有所帮助哦。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。