美文网首页程序员
JAVA反射---获取Class实例、创建运行时类对象、获取相应

JAVA反射---获取Class实例、创建运行时类对象、获取相应

作者: 一花一世界yu | 来源:发表于2020-05-09 08:54 被阅读0次

一、重点问题

1、JVM是如何加载一个类的

类的加载过程

2、JVM加载class文件的原理机制

JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader

是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

二、课堂知识

2.1、反射

关于反射的理解

Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何

类的内部信息,并能直接操作任意对象的内部属性及方法。

框架 = 反射 + 注解 + 设计模式。

2.2、Class类

Class类:字节码文件对应的对象。

获取Class类的实例的四种方式:

方法一:

对象.getClass()——>Class类的实例对象

Class cls1 = p1.getClass();

方法二:

类名.class——>Class类的实例对象

Class cls2 = Person.class;

方法三:

Class类提供了一个静态的方法:forName()

Class cls3 = Class.forName("包名.类名");

方式四:使用类的加载器:ClassLoader (了解)

        ClassLoader classLoader = ReflectionTest.class.getClassLoader();

        Class clazz4 = classLoader.loadClass("包名.类名");

2.3、Constructor

//step1:获取Class类实例:

Class<?> cls1 = Person.class;

//step2:获取Constructor类实例:

Constructor<?> constructor2 = cls1.getConstructor(String.class,int.class);//public Person(String, int){}

//step3:根据构造方法实例,创建类的对象:Person对象

Person p2 = (Person) constructor2.newInstance("name",age);

获取构造方法:

获取构造方法:

1、获取所有的public的构造方法:数组

Constructor<?>[]getConstructors()

2、获取单个的public的构造方法:具体的某一个构造方法

Constructor<T>getConstructor(Class<?>...parameterTypes)

3、获取所有的构造方法:数据

Constructor<?>[]getDeclaredConstructors()

4、获取单个构造方法:具体的某一个构造方法

Constructor<T>getDeclaredConstructor(Class<?>...parameterTypes)

创建对象

T newInstance(Object... initargs)

使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。

2.4、Field

思路:

//step1:获取Class类的实例

//step2:获取Field类实例,表示属性

//step3:访问实例的属性,进行赋值

获取Field实例:

.Field getDeclaredField(String name)

          返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。 /

.Field[] getDeclaredFields()

          返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。

操作属性:

A:设置是否可以访问:

field.setAccessible(true);

B:设置某个实例的该属性值

field.set(对象,数据);

2.5、Method

获取方法:

Method getMethod(String name, Class<?>... parameterTypes)

          返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。

Method[] getMethods() ;//本类的和父类的public类型的方法。

          返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。

Method getDeclaredMethod(String name, Class<?>... parameterTypes)

          返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。

Method[] getDeclaredMethods() //获取本类中所有的方法,但是不包括继承来的

          返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。

相关文章

  • 05-反射

    java.lang.Class:是反射的源头 如何获取Class的实例(3种)必会的 创建运行时类对象 通过反射获...

  • java反射

    参考:深入解析Java反射(1) - 基础 获取class对象 判断是否某个类实例 创建实例 获取方法 getDe...

  • JAVA反射---获取Class实例、创建运行时类对象、获取相应

    一、重点问题 1、JVM是如何加载一个类的 2、JVM加载class文件的原理机制 JVM中类的装载是由Class...

  • 反射总结

    什么是反射?定义:反射就是把JAVA类中的各种成分映射成相应的JAVA类。 获取Class的实例对象(三种方法) ...

  • Java高级特性整理

    Java高级特性 反射 使用场景 功能 获取Class对象方式 判断是否为类的实例 创建实例 newInstanc...

  • 反射

    反射简介 反射允许我们在程序运行时获取和使用类的信息。 Class 对象 Java程序运行时,用Class对象表示...

  • Java 反射

    Java反射Java反射API获取Class对象通过反射创建实例对象,调用公共方法通过反射调用私有方法 一.Jav...

  • java反射机制

    java反射机制是为了动态获取类的结构,动态地调用对象的方法 java反射机制 获取类Class对象 A.clas...

  • Java高级-反射

    15.1.Java反射机制概述 15.2.理解Class类并获取Class实例(重点) 用反射实现类的实例化,调用...

  • 3 反射,代理

    反射 获取Class的实例的方式(前三种方式比较常用) 创建运行时对象 newInstance():调用此方法,创...

网友评论

    本文标题:JAVA反射---获取Class实例、创建运行时类对象、获取相应

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