反射机制

作者: 江湖非良人 | 来源:发表于2019-07-31 16:28 被阅读4次

反射机制简介 ObjectClass

  在Java语言中之所以会员如此众多的开源技术支撑,很大一部分是来自于Java的最大的特征:反射机制,也是Java的精髓。所有技术实现的目标只有一点:可复用性(可重用性)。
  对于反射技术首先考虑的是“反”与“正”的操作,所谓的“正”操作指的是使用一个类时,一定要先导入程序所在的包,而后根据类进行对象的实例化,并依靠对象调用类中的方法。而“反”则是根据实例化对象反推出其类型。
范例:正向操作

import java.util.Date;//1、导入程序所在的包.类,就知道对象的来源了
public class JavaApiDemo {
    public static void main(String[] args) throws Exception {
        Date date=new Date();//2、通过类产生实例化对象
        System.out.println(date.getTime());//3、根据对象调用类中的方法
    }
}

  如果要想实现反的操作,那么首先要采用的就是Object类中所提供的一个方法:

  • 获取类信息:public final Class<?> getClass()
    范例:观察Class对象的使用
import java.util.Date;//1、导入程序所在的包.类,就知道对象的来源了
public class JavaApiDemo {
    public static void main(String[] args) throws Exception {
        Date date=new Date();//2、通过类产生实例化对象
        System.out.println(date.getClass());//3、根据实例化对象找到对象的所属类型
        //class java.util.Date
    }
}

  getClass()可以帮助使用者找到对象的根源。

Class类对象的三种实例化模式

  反射中所有的核心操作都是通过Class类对象展开的,可以说Class类是反射操作的根源所在,但是这个类如果要想获取它的实例化对象可以采用三种方式来实现,首先来观察java.lang.Class类的定义:

public final class Class<T> extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement

  从JDK1.5开始,Class类在定义的时可以使用泛型进行标记,这样的用法主要是希望可以避免所谓的向下转型。下面通过具体的操作讲解三种实例化形式。
1、【Object类支持】Object类可以根据实例化对象获取Class对象。
    public final Class<?> getClass()

class Person{//采用自定义的程序类
}
public class JavaApiDemo {
    public static void main(String[] args) throws Exception {
        Person per=new Person();
        Class<? extends Person> cls=per.getClass();
        System.out.println(cls.getName());//类的完整名称
    }
}

  特点:如果想获得Class类对象,就必须产生指定类对象后才可以获得。

2、【JVM直接支持】采用“类.class”的形式实例化

class Person{//采用自定义的程序类
}
public class JavaApiDemo {
    public static void main(String[] args) throws Exception {
        Class<? extends Person> cls=Person.class;
        System.out.println(cls.getName());//com.mldn.demo.Person
    }
}

  特点:如果想获得Class类对象,就必须导入程序对应的开发包;

3、【Class类支持】在Class类中提供有一个static加载类的方法:
    public static Class<?> forName​(String className)throws ClassNotFoundException

package com.mldn.demo.ref;
public class Person {
}
package com.mldn.demo;
public class JavaApiDemo {
    public static void main(String[] args) throws Exception {
        Class<?> cls=Class.forName("com.mldn.demo.ref.Person");//该类必须存在
        System.out.println(cls.getName());//com.mldn.demo.ref.Person
    }
}

  特点:可以直接采用字符串的形式定义要使用的类型,并且程序中不需要编写任何的import语句。

相关文章

  • java反射机制

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

  • 反射之一

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

  • 反射之二

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

  • Java反射机制入门

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

  • OC的反射机制

    目录 1 反射机制的概念 2 反射机制原理 首先还是按照惯例和大家解释下什么反射机制? 反射的概念是由Smith在...

  • 反射之三

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

  • Java基础之反射

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

  • 详解Java反射机制(Reflection)

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

  • 反射机制基础

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

  • Java获取反射的三种方法

    1.通过new对象实现反射机制 2.通过路径实现反射机制 3.通过类名实现反射机制 public class Ge...

网友评论

    本文标题:反射机制

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