反射:

  JAVA语言的反射机制:

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

    对于任意一个对象,都能够调用它的任意一个方法和属性;

    这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

  如何解剖一个类:

    要想解剖一个类,必须先要获取到该类的字节码文件对象。

    而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

通俗的来说:  

  反射:就是通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法。

          Person p = new Person();

          p.使用

要想这样使用,首先你必须得到class文件对象,其实也就是得到Class类的对象。

    Class类:

      成员变量   Field

      构造方法   Constructor

      成员方法   Method

获取Class文件对象的方式: 

  1: Person p = new Person();

    Class c = p.getClass();

  2:Class c2 = Person.class;

    任意数据类型都具备一个class静态属性,看上去要比第一种方式简单.

  3:将类名作为字符串传递给Class类中的静态方法forName即可

    Class c3 = Class.forName("Person");

第三种和前两种的区别

  前两种你必须明确Person类型.

  后面是你我这种类型的字符串就行.这种扩展更强.我不需要知道你的类.我只提供字符串,按照配置文件加载就可以了

一般我们到底使用谁呢?

  A:自己玩 任选一种,第二种比较方便

  B:开发 第三种

    因为第三种是一个字符串,而不是一个具体的类名。这样我们就可以把这样的字符串配置到配置文件中。(可变)

首先建个Person类,以便用来解剖。

解剖的代码体现:

  

 public class RelfectDemo {

     public static void main(String[] args) throws ClassNotFoundException {

         // 方式1
Person p1 = new Person();
Class c1 = p1.getClass(); Person p2 = new Person();
Class c2 = p2.getClass(); System.out.println(p1 == p2); // false 开创了2个不同的空间
System.out.println(c1 == c2); // true 2个Class都是得到同一个字节码文件对象 // 方式2
Class c = Person.class;
// int.class;
// String.class;
System.out.println(c == c1); // true // 方式3 Class.forName(className); 里面的文件名是要全路径的
// 这个方法里面的文件名有两种获得方式:
// 一:在外面写 zl_Relfect.Person(包名加类名),再复制粘贴进去
// 二:右键点击想要获得的类,点击Copy Qualified Name,再粘贴进去
Class c3 = Class.forName("zl_Relfect.Person");
System.out.println(c3 == c1); // true
} }

java 27 - 2 反射之 反射的概述以及获取Class文件对象的方式的更多相关文章

  1. java 27 - 6 反射之 通过配置文件运行类中的方法

    在以前,如果我们想要调用一个类中的方法,只能这样子: 例: 有Cat和Dog两个类,里面有eat和run两个成员方法: public class Dog { public void eat() { S ...

  2. Java反射机制获取Class文件

    JAVA反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象方法的功能称为 ...

  3. Java基础(十三)反射

    一.反射 1.反射概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的 ...

  4. Spring 中的反射与反射的原理

    作者:DeppWang.原文地址 在造轮子:实现一个简易的 Spring IoC 容器一文中提到 Spring 在创建 Bean 实例和依赖注入时使用了反射,本文来具体分析一下 Spring 中的反射 ...

  5. 通过反射获取class文件中的构造方法,运行构造方法

    /* * 通过反射获取class文件中的构造方法,运行构造方法 * 运行构造方法,创建对象 * 1.获取class文件对象 * 2.从class文件对象中,获取需要的成员 * * Constructo ...

  6. Java反射【一、概述】

    .net也使用过反射,不过用的比较浅显,用来记日志等.. Java基础课程学习已经过了一段时间了,接下来继续学习 本次学习包含以下内容 Java反射[一.概述] Java反射[二.Class类的使用] ...

  7. java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值

    标题的意思是: 通过反射写一个类,类中有个方法.该方法可以设置某个类中的某个属性(构造方法,成员变量,成员方法)为特定的值 代码: // 该方法的参数列表是一个类的 类名.成员变量.给变量的赋值 pu ...

  8. java 27 - 7 反射之 通过反射越过泛型检查

    之前学过的集合里面都有泛型,规定了泛型的类型以后,就不能往这个集合添加除了这个类型之外的类型数据了. 那么,有什么方法可以越过这个泛型,添加特定类型以外的类型数据么? 例子:  往ArrayList& ...

  9. 【Java编程思想笔记】反射

    文章参考:学习网站 how2java.cn 参考博客:(敬业的小码哥)https://blog.csdn.net/sinat_38259539/article/details/71799078 (青色 ...

随机推荐

  1. sharepoint 弹出窗口

    function openAnswerQandADialog(aUrl,aTitle) { var options = { url: aUrl, width: 1024, height: 768, t ...

  2. MapGuide Maestro 5.1发布了

    MapGuide Maestro最为MapGuide开源版的authoring工具真是发展迅速,有些功能比Infrastructure Studio还给力,现在5.1版已经发布了.大家可以到http: ...

  3. clang LLVM 介绍和安装(Ubuntu10 64位)

    http://www.csdn.net/article/2013-11-27/2817632 的对Stanley B.Lippman采访提到clang的一些优点,以前程序员杂志也写过,为了提高系统的性 ...

  4. ios开发人员北京,上海,深圳的工资待遇是多少?

    ios开发人员北京,上海,深圳的工资待遇是多少? [1]首先看看平均工资      从图中来看,北京平均工资15570 居首,不愧是首都啊.     你过了平均线了吗?是不是感觉被平均了,如果感觉工资 ...

  5. 私有Pods封装个推SDK功能(解决方案)

    一:运用场景 公司中同时有好几个APP在开发,而且每个APP都有使用到集成个推SDK来处理消息的功能,以前的做法是每个APP都去集成并在AppDelegate处理一些SDK的代码,包含个推基础配置.消 ...

  6. NSPredicate

    NSPredicate 1. 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.通常被用来检索.替换那些符合某个模式的文本. 2. iOS中正则使用 有三种(NSPredicate, ...

  7. iOS开发中如何使自定义方法具有XCode插件使用提示

    iOS开发中难免要安装一些好用的插件,然而插件在使用时往往只对系统的方法有提示作用,而自己写的方法不能用上插件的便利. 其实还是有办法使插件对自定义的方法有效: 1. 首先知道Xcode的插件安装路径 ...

  8. mysql GROUP BY 与 ORDER BY 查询不是最新记录

    转载:http://blog.csdn.net/qvbfndcwy/article/details/7200910 鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,( ...

  9. Tomcat+Nginx+Lvs部署方案与性能调优

    立项要求:用户登录并发数达到1000vuser.原项目设计没有Nginx和LVS,经过性能测试并发数最高到400,就报响应超时,且系统资源消耗严重.经过和架构师商议决定先加入Nginx解决负载均衡处理 ...

  10. python urllib2 发起http请求post

    使用urllib2发起post请求 def GetCsspToken(): data = json.dumps({"userName":"wenbin", &q ...