Java反射机制

作者: 极乐君 | 来源:发表于2017-01-12 15:59 被阅读51次

来源:Java反射机制
作者:kimball


一、概述

Java反射机制就是在运行状态中,对于任意一个类,都能够知道这个类的属性和方法。对于任意一个对象能够调用它的任意一个属性和方法。这种动态获取的信息和动态调用对象的方法的功能称为Java语言的**反射机制 **--百度百科

反射机制就是通过Class类实现的。但是总所周知在Java中,Object 类是所有类的根类,而Class类就是描述Java类的类。有点儿抽象?没关系,我们再来解释下Class到底是何物!

在Java中,每一个class都有一个相应的Class对象,在将Java源码编译成.class文件中就会生成一个Class对象,Class对象表示这个类的类型信息,你也可以理解成Class是类的类型

注意:因为Class类也是类,所以Object也包括Class类

我们创建对象一般是通过new关键字创建,但是new是静态加载类,一旦找不到类就会编译不通过。但是通过反射机制创建对象一旦找不到类则抛出java.lang.ClassNotFoundException异常,如图:

说的再多不如写个例子实在,接下来上源码

二、运用

1、定义一个接口Office

/** 
 * 描述:办公接口  <br>
 * 作者: kimball <br>
 * E-mail: kimballlu@foxmail.com <br>
 * 日期: 2017-1-9 下午2:21:42 <br>
 */
public interface Office {
    /**
     * 描述
     */
    public void describe();
}

2、创建一个实现类Word

/** 
 * 描述: Word <br>
 * 作者: kimball <br>
 * E-mail: kimballlu@foxmail.com <br>
 * 日期: 2017-1-9 下午2:22:27 <br>
 */
public class Word implements Office {
    @Override
    public void describe() {
        System.out.println("大家好,我是Word");
    }
}

3、创建测试类Test

/** 
 * 描述:测试类  <br>
 * 作者: kimball <br>
 * E-mail: kimballlu@foxmail.com <br>
 * 日期: 2017-1-9 下午2:07:15 <br>
 */
public class Test {

    /**
     * Main入口
     * @param args
     * @throws ClassNotFoundException 
     */
    public static void main(String[] string) throws ClassNotFoundException {
        try {
            @SuppressWarnings("rawtypes")
            //传入接口实现类的路径
            Class office = Class.forName("com.Word");           
            try {
                //创建该类的对象
                Office word = (Office)office.newInstance();     
                //调用方法
                word.describe();                                
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

}

4、运行结果


至此一个简单的使用已经通过例子实现了,接下来我们深入一点儿了解Class的属性和方法

Class对象的常用方法:

  • Constructor[] getConstructors():返回此Class对象所表示的类的所有public构造方法
  • Method[] getMethods():返回此Class对象所表示的类的所有public方法
  • Method[] getDeclaredMethods():返回此Class对象所表示的类的所有方法,与方法的访问级别无关
  • Field[] getFields():返回此Class对象所表示的类的所有public属性
  • Field[] getDecalaredDields():返回此Class对象所表示的类的所有属性,与属性访问级别无关
  • Object get(Object obj):得到引用类型属性值
  • void set(Object obj,Object val):将obj对象的该属性设置成val值。针对引用类型赋值
  • Object invoke(Object obj,Object args):调用类的方法,obj是执行该方法的对象,args是执行该方法时传入该方法的参数

以上介绍的是如何通过Class类得到指定的对象,接下来我们看如何通过对象得到Class类,看源码:

/** 
 * 描述:测试类  <br>
 * 作者: kimball <br>
 * E-mail: kimballlu@foxmail.com <br>
 * 日期: 2017-1-9 下午2:07:15 <br>
 */
public class Test {

    /**
     * Main入口
     * @param args
     * @throws ClassNotFoundException 
     */
    @SuppressWarnings("rawtypes")
    public static void main(String[] string) throws ClassNotFoundException {
        Word word = new Word();
        Class word1 = word.getClass();              // 通过对象的getClass()方法获取Class
        Class word2 = Word.class;                   // 通过类.class获取Class
        Class word3 = Class.forName("com.Word");    // 通过路径获取Class
        System.out.println(word1 == word2);
        System.out.println(word2 == word3);
    }

}

输出结果:

三、结语

看起来好像不难,也是,这因为只是教会了怎么去使用它而已,并没有深入去了解、挖掘它的原理实现。工欲善其事,必先利其器就是这个道理,先学会用它,然后再去“造工具”,好像“造工具”这个词不太恰当,管他呢!反正意思差不多就对了,反正你们又不会打我

我最近在搭博客网站,PC端+Android客户端,应该能在春节过后没多久做好吧!不出意外的话,而且最近事儿确实多,各种各种。

本文完!


在学习过程如果有任何疑问,请来极乐网提问,或者扫描下方二维码,关注极乐官方微信,在平台下方留言。

相关文章

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 反射之三

    总结内容源自以下文章 粗浅看java反射机制 反射机制应用实践 谈谈java反射机制 Java Reflectio...

  • java反射机制

    java的反射机制 1 JAVA的反射机制是什么?反射机制能做什么?反射机制的优点与缺点2 认识 Class...

  • Java中反射的用途

    Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框...

  • Chapter 13 . 反射机制

    阅读原文 Chapter 13 . 反射机制 13.1 Java反射机制研究及应用 Java Reflection...

  • 详解Java反射机制(Reflection)

    详解Java反射机制(Reflection) 反射机制的作用 JAVA反射机制是在运行状态中,对于任意一个类,都能...

  • Java 反射机制

    [1]. java反射详解[2]. Java Reflection(反射机制)详解[3]. 深入理解Java类型...

网友评论

    本文标题:Java反射机制

    本文链接:https://www.haomeiwen.com/subject/yxodbttx.html