java 反射机制:运行时的类信息(为框架服务的Bug存在)

  • 反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
  • 换一种引出反射的说法是:当通过反射与一个未知的类型的对象打交道是,JVM只是简单地检查这个类,看它是属于哪个特定的类(就想RTTI那样)。在用它做其他事情之前必须先加载那个类的Class对象。因此,那个类的.class文件对于JVM来说必须是可获取的;那么在本地机器上,要么通过网络获得。所以RTTI和反射之间真正的区别只在于,对于RTTI来说,编译器再编译的时候打开和检查.class文件。(换句话说,我们可以用“普通”方式调用对象的所有方法)而对于反射机制来说,.class文件在编译时时不可获得的,所以在运行时打开和检查.class文件。
  • 举个项目例子来说: 

    我们在项目运行开始后,如果我们需要更改这个项目的某个地方的Dao的时候,根据我们设计模式的OCP原则:对增加开放,对修改关闭,所以我们是不会轻易的去修改代码的,因为我们一般都会用一个配置文件来设置我们项目需要的哪种Dao,如:

    factory = shop.dao.PropertiesFactory

    userDao = shop.dao.UserDao

    addressDao = shop.dao.AddressDao

所以我们以后就能在这里修改我们需要的,并不需要去项目中修改代码,但问题来了,我们如果通过String来获得我们需要的类呢,这就是反射的起因之一。

            Properties prop = PropertiesUtil.getDaoProp();
            String fs = prop.getProperty("factory");
            Class clz = Class.forName(fs);
            String mn = "getInstance";
            Method m = clz.getMethod(mn);
            f = (IFactoryDao)m.invoke(clz);

这段代码中我们可以看到:Class clz = Class.forName(fs);我们通过Class.forName()方法便能得到一个类(其他看不懂可以看接下来我贴的中文sdk文档链接学习)。这样我们便能做到动态的获得一个类了,这也就是反射机制的好处之一。

  • 反射机制其实还能做到好多,在框架的学习中也是有很大的用处的。接下来就是硬菜了,个人感觉看文档,绝对是有着很大的好处的。在java中Class类与java.lang.reflect类库一起对反射的概念进行了支持

    Class类

    java.lang.reflect

    一个例子让你了解Java反射机制

时间: 2024-12-28 00:41:29

java 反射机制:运行时的类信息(为框架服务的Bug存在)的相关文章

Java如何在运行时识别类型信息?

在日常的学习工作当中,有一些知识是我们在读书的时候就能够习得:但有一些知识不是的,需要在实践的时候才能得到真知--这或许就是王阳明提倡的"知行合一". 在Java中,并不是所有的类型信息都能在编译阶段明确,有一些类型信息需要在运行时才能确定,这种机制被称为RTTI,英文全称为Run-Time Type Identification,即运行时类型识别,有没有一点"知行合一"的味道?运行时类型识别主要由Class类实现. 一.Class类 在Java中,我们常用&quo

java反射获得运行时属性的值

运行时动态获得属性的值(通过方法获得): Method[] methods = cls.getDeclaredMethods(); for (Method method : methods) { if (method.getName().startsWith("get")) { try { System.out.println(method.invoke(object)); } catch (Exception e) { } } } 运行时动态获得属性的值(通过属性获得): for (

利用反射机制动态的调用类信息

public class reflectTest { /** * 利用反射设置实体类的属性 * * @return * @throws ClassNotFoundException * @throws IllegalAccessException * @throws InstantiationException * @throws NoSuchFieldException * @throws SecurityException * @throws NoSuchMethodException *

Java反射机制浅析

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载.探知.使用

Java反射机制知识点

反射机制 本文章参照:魔乐java视频教程讲解,感谢 1.认识反射 反射之中包含一个"反"的概念,所以就必须先从"正"开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化对象,但是"反"指的是通过对象找到类 package cn.test; class Person{};   // 定义一个Person类 public class ReflectDemo { public static void main(Str

java反射机制剖析(三)—类类型Class

为了区别于我们常用的Class,因此给了个中文名类类型.目的就是为了知道此Class非彼Class.上一篇博客已经介绍了Class Loader,它的作用是根据提供的信息来加载类到内存中.我之前有提过这个类信息的提供者就是本篇博客要介绍的Class.提醒:一个类的Class对象和它的Instance是不一样的,切记,不然你会混乱的.开始了! 概念 Class类是所有类(注意是对象)的共有信息的抽象,比如该类实现的接口.对应的加载器.类名等等.一句话,类类型保存了每个类所对应的类型信息.每一个类都

Java反射机制Class类的用法详解

本文转自http://blog.sina.com.cn/s/blog_6c9536b90100rqh4.html,感谢作者 java的Class类是java反射机制的基础,通过Class类我们可以获得关于一个类的相关信息,下面我们来了解一下有关java中Class类的相关知识! java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM中的类(包括类和接口)的信息. 当一个类或接口被装入的JVM时便会产生一个与之关联的java.lang.Class对象,可以通过这个Class对象

Thinking in Java---类型信息和java反射机制学习笔记

前面学习的多态给了我们一个很好的承诺:我们编写的代码只要与基类打交道,而不用为每一个新增加的子类写一份代码.但是这种思想在我们想要访问子类自己定义的方法时,就会有问题了.如下面的代码所示: class Base1{ void f(){ System.out.println("Base.f()"); } } class Sub extends Base1{ void f(){ System.out.println("Sub.f()"); } void g(){ Sys

工厂类分离与java反射机制

网易 博客 发现 小组 风格 手机博客 玩LOFTER,免费冲印20张照片!> 创建博客登录 加关注 黙言-在路上 奋斗 首页 日志 相册 音乐 收藏 博友 关于我 黙言 加博友   关注他 他的网易微博 最新日志 Javascript 操作select控件 Oracle 存储过程基本语法 将域名和tomcat6进行绑定的 svn 423 Locked JS的trim()方法 jbpm4.4 结束流程时报错 随机阅读 让员工每年有一次机会当主角 外国女性如何舍身"套"色狼 亚洲电