为什么要用反射?

举个栗子:

package com.imooc.reflect;

public class Work {

    // 定义一个word方法
    public void word() {
        System.out.println("厉害了word哥");
    }
}
package com.imooc.reflect;

public class Word {

    public static void main(String[] args) {
        Work work = new Work();
        work.word(); // 厉害了word哥

        work.excel(); // 报错,因为work类中没有这个方法
    }
}

我们希望既然定义了word方法就能使用该方法,而不受是否有excel()方法的影响。

反射的作用就是避开编译期不通过的影响,运行期需要调用word()方法就能调用,不用管excel()方法是否存在。

编译时刻加载类是静态加载类、运行时刻加载类是动态加载类。

动态加载类的三种方式:

 1 package com.imooc.reflect;
 2
 3 public class ClassDemo1 {
 4
 5     public static void main(String[] args) {
 6         //Foo的实例对象如何表示
 7         Foo foo1 = new Foo();
 8         //Foo这个类 也是一个实例对象,Class类的实例对象,如何表示呢
 9         //任何一个类都是Class的实例对象,这个实例对象有三种表示方式
10
11         //第一种表示方式--->实际在告诉我们任何一个类都有一个隐含的静态成员变量class
12         Class c1 = Foo.class;
13
14         //第二中表达方式  已经知道该类的对象通过getClass方法
15         Class c2 = foo1.getClass();
16
17         /*
18          * c1 ,c2 表示了Foo类的类类型(class type)
19          * 万事万物皆对象,
20          * 类也是对象,是Class类的实例对象
21          * 这个对象我们称为该类的类类型
22          *
23          */
24
25         //不管c1  or c2都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象
26         System.out.println(c1 == c2);
27
28         //第三种表达方式
29         Class c3 = null;
30         try {
31             c3 = Class.forName("com.imooc.reflect.Foo");
32         } catch (ClassNotFoundException e) {
33             // TODO Auto-generated catch block
34             e.printStackTrace();
35         }
36         System.out.println(c3 == c2);
37
38         //我们完全可以通过类的类类型创建该类的对象实例---->通过c1 or c2 or c3创建Foo的实例对象
39         Foo foo;
40         try {
41             foo = (Foo)c1.newInstance();//需要有无参数的构造方法
42             foo.print();
43         } catch (InstantiationException e) {
44             // TODO Auto-generated catch block
45             e.printStackTrace();
46         } catch (IllegalAccessException e) {
47             // TODO Auto-generated catch block
48             e.printStackTrace();
49         }
50     }
51 }
52
53 class Foo{
54     void print() {
55         System.out.println("hahahahahaha");
56     }
57 }

以上是自己在慕课网学习java反射的一点点理解,肯定不精准,只是为了快速理解反射。毕竟越简单越方便入门。等自己达到一定水平再追求精确吧。希望读到此篇的同学,不要太把本文太当真,理解就好。

java反射_01的更多相关文章

  1. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  2. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  3. java反射(基础了解)

    package cn.itcast_01; /** *Person类 */ public class Person {    /** 姓名 */    private String name;     ...

  4. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  5. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  6. java反射学习之二万能EXCEL导出

    一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...

  7. java反射学习之一反射机制概述

    一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...

  8. java反射 之 反射基础

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

  9. java反射 cglib asm相关资料

    有篇文章对java反射的调用的效率做了测试,写的比较好.猛击下面地址 http://www.blogjava.net/stone2083/archive/2010/09/15/332065.html ...

随机推荐

  1. Jupyter Notebook 下安装 PHP 内核

    我最近被强烈安利了 Jupyter Notebook 这个交互式笔记本.然后试用了它自带的 Python 内核后,这个应用整体给我的感觉很不错,就去搜索了下它所支持的其它内核 Jupyter Kern ...

  2. 3 Java的基本程序设计结构

        本章主要内容: 一个简单的Java应用程序 注释 数据类型 变量 运算符 字符串 输入输出 控制流 大数值 数组       本章主要介绍程序设计的基本概念(如数据类型.分支以及循环)在Jav ...

  3. Java基础学习总结(72)——提升 java 代码的运行效率

    前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没 ...

  4. [BZOJ 3796]Mushroom追妹纸

    [BZOJ 3796]Mushroom追妹纸 题目 Mushroom最近看上了一个漂亮妹纸.他选择一种非常经典的手段来表达自己的心意——写情书.考虑到自己的表达能力,Mushroom决定不手写情书.他 ...

  5. 洛谷 P1843 奶牛晒衣服

    题目背景 熊大妈决定给每个牛宝宝都穿上可爱的婴儿装 . 于是 , 为牛宝宝洗晒衣服就成了很不爽的事情. 题目描述 熊大妈请你帮助完成这个重任 . 洗完衣服后 , 你就要弄干衣服 . 衣服在自然条件下用 ...

  6. VS2010: 远程访问IIS Express

    可以远程访问IIS Express的意义在于:1.    可以从其它设备上Debug项目,这点对于手持设备等不是很容易用虚拟机虚拟的设备尤为重要.2.    可以避免过早配置IIS 7(不一定是好事. ...

  7. QT中使用高速排序

    今天想到了用QT做一个高速排序.所以研究了一下. 由于用习惯了,C++的std::sort.就算是C的时候也用得是stdlib.h中的qsort. 手写板 手写板的快排事实上不难,仅仅是自从用C++打 ...

  8. luogu1197 [JSOI2008]星球大战

    题目大意 有一个无向图,每次删除一个节点,求删除后图中连通块的个数.(如果两个星球可以通过现存的以太通道直接或间接地连通,则这两个星球在同一个连通块中) 题解 连通块?用并查集可以找到一个连通块,但是 ...

  9. Java-MyBatis:MyBatis

    ylbtech-Java-MyBatis:MyBatis 1.返回顶部 1. MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foun ...

  10. python对XML 操作

    一.XML的读取. 在 NewEdit 中有代码片段的功能,代码片段分为片段的分类和片段的内容.在缺省情况下都是用XML格式保存的.下面我讲述一下,如何使用minidom来读取和保存XML文件. 下面 ...