Java反射:框架设计的灵魂

  • 框架:办成品软件,可以在框架的基础上进行开发
  • 反射:将类的各个部分封装成对象,这就是反射机制

反射的好处

  • 在程序运行的过程中,操作这些对象
  • 可以降低程序的耦合性,提高程序的可扩展性

获取class对象的方式

  1. Class.forName(“全类名”):经字节码文件加载进内存,返回class对象
  • 多用于配置文件,将类名定义在配置文件中,读取文件,加载类
  1. 类名.class:通过类名的属性class获取
  • 多用于参数传递
  1. 对象.getClass():getClass()方法在Object方法中定义
  • 多用于对象的获取字节码的方式
  1. 同一个字节码文件(*.class)在一次程序运行过程中,只被加载一次
    不论通过哪一种方式获取的Class文件都是同一个
package reflect;import domain.Person;public class ReflectPerson {public static void main(String[] args) throws Exception {//Class.forName("全类名")Class cls1 = Class.forName("domain.Person");System.out.println(cls1);//类名.classClass cls2 = Person.class;System.out.println(cls2);//对象.getClass()Person p = new Person();Class cls3=p.getClass();System.out.println(cls3);//比较三个对象System.out.println(cls1==cls2);//trueSystem.out.println(cls1==cls3);//true}
}

Class对象的功能

获取功能

  • 获取成员变量们
  • 获取构造方法们
  • 获取成员方法们
  • 获取类名

实例

写一个“框架”,可以帮我们创建任意类的对象,并且执行其中任意方法

  • 步骤:
  1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
  2. 在程序中加载读取配置文件
  3. 使用反射技术来加载类文件进内存
  4. 创建对象,执行方法

配置文件

//className=cn.itcast.Person
//methodName=eat
className=cn.itcast.Student
methodName=sleep

执行代码

package cn.itcast.test;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创建Properties文件Properties pro = new Properties();//创建properties对象//1.2加载配置文件,转换成一个集合//1.2.1获取Class目录下的配置文件ClassLoader classLoader = ReflectTest.class.getClassLoader();InputStream is = classLoader.getResourceAsStream("pro.properties");pro.load(is);//2.获取配置文件中定义的数据String className = pro.getProperty("className");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反射:框架设计的灵魂相关推荐

  1. Java 反射:框架设计的灵魂

    作者 l 会点代码的大叔(CodeDaShu) 在学习 Java 反射之前,先让我们看看这几个概念. 01 解释型语言和编译型语言 解释型语言:不需要编译,在运行的时候逐行翻译解释:修改代码时可以直接 ...

  2. Java--反射(框架设计的灵魂)

    Java--反射(框架设计的灵魂) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 框架:半成品软件.可以在框架的基础上进 ...

  3. java 反射 框架_Java 反射,开发框架必备技能

    通过反射技术我们将上面的统一资源定位付(URL) 映射到Class 相当于 class: news method: list parameter: 2 差不多就是下面样子 class News{ pu ...

  4. java 简单 框架_java简单框架设计

    设计框架包可以作为一个工具给大家用,需要有完全不同设计思路给出来,不同于我们去做一个web服务.网站. 或者一个业务微服务,需要从原来使用视角转换成一个构建者视角. 框架或者工具,更多是框架来管理或者 ...

  5. java reflections_Java反射框架Reflections示例详解

    MAVEN 坐标 org.reflections reflections 0.9.10 Reflections 的作用 Reflections通过扫描classpath,索引元数据,并且允许在运行时查 ...

  6. Java反射(自己的理解)

    动态语言:运行是代码可以根据某些条件改变自身结构,像js和php,python等,但是我们不像c++,是一门静态语言,可以准确的说我们是一门准动态语言,因为反射让我们具有动态性. 我来直接用我所理解的 ...

  7. JAVA反射通俗易懂转 转载大牛的 通俗易懂

    https://blog.csdn.net/sinat_21843047/article/details/80066333 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class, ...

  8. JAVA反射机制及其原理实现

    9.1 概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:public.protected.private. OO ...

  9. java 反射 内存_Java内存到反射入门

    Java内存到反射入门(一) 初识Java内存 平常我们最常提到的的JAVA分区是这三个分区 其中方法区是一个特殊的堆,功能如图上所示. 初识反射:框架设计的灵魂 反射的功能:将类的各个组成部分封装为 ...

最新文章

  1. 报错解决:undefined reference to `snappy::MaxCompressedLength(unsigned long)'
  2. linux环境变量恢复,linux环境变量设置错误后的恢复方法(转)
  3. python linux命令-Python之路【第三篇】:Linux常用命令
  4. java try、catch、finally及finally执行顺序详解
  5. [NOI2001]炮兵阵地
  6. 增量式pid调节方式有何优点_增量式pid和位置式pid相比各有什么优缺点
  7. 如何创建多个条形图_学习使用D3创建条形图-初学者教程
  8. mit许可证_MIT许可证的神秘历史
  9. ajax上传json到服务器
  10. httpd mysql认证_Apache Httpd服务器之认证与授权
  11. python安装opencv库、提示找不到pip_OpenCV Python importorror:DLL加载失败:找不到指定的模块...
  12. WebDriver使用入门
  13. SQL中代替Like语句的另一种写法
  14. 为什么大多公司不要培训班培训出来的Java程序员?
  15. rx550 黑苹果_为什么黑苹果 amd显卡 特定型号免驱?
  16. RK3288源码编译
  17. android viewpager
  18. 鲸鱼算法优化PID参数优化附matlab代码
  19. 分块9题【参考hzw】
  20. 公司网站建设的几点建议—竹晨网络

热门文章

  1. CentOS 7.4 基于LNMP搭建wordpress
  2. Ajax-goahead局部刷新页面
  3. 进化:一个平庸人的互联网之路
  4. mac下使用自带的apache与php
  5. (转)DOS批处理的字符串功能
  6. 自己封装一个MySignal函数,方便以后直接copy.
  7. js 对一个字段去重_JS单行、多行文本字符去重和行去重
  8. lua如何打印行号_双11购物清单,你打印了吗?9个打印技巧解密Excel打印问题,每一个难题都可以在这里找到答案...
  9. 标准化工作导则2020_最新版 GB/T 1.12020 标准化工作导则 第 1 部分:标准化文件的结构和起草规则标准解读...
  10. java map常用类及其方法_Day50.Map类常用的方法 -Java常用类、集合#、IO