01_反射_01_加载类

【简述】

一个类有多个组成部分,例如:成员变量、方法、构造方法等。发射就是加载类,并剖析出类的各个组成部分。

【加载类的三种方式】

* Java中有一个Class类用于代表某一个类的字节码。

* Class类既然代表某个类的字节码,它就自然会提供加载某个类的字节码的方法:forName( ); forName( )方法用于加载某个类的字节码到内存中,并使用class对象进行封装。

*另外两种得到class对象的方式:

  类名.class

  对象.getClass()

如下所示:

【Class对象】

提供的常用方法:

//从类中获取构造方法

public Constuctor getConstructor(Class<?>..parameterTypes);

//从类中获取方法

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

//从类中获取成员变量(属性)

public Field getField(String name);

获取的构造方法、方法、成员变量(属性)分别用Constructor、Method、Field对象表示。

注意:

getDeclaredConstructor:返回指定参数类型、所有声明的(包括private)构造函数

getConstructor:返回指定参数类型、具有public访问权限的构造函数

时间: 2024-08-06 16:26:37

01_反射_01_加载类的相关文章

JAVA中的反射中加载类的方法

反射:加载类的方法有三种, 1.用Class.forName("类名")方法来调用; 2.类名.class得到 3.用对象.getClass()得到 package com.ma.reflection; import org.junit.Test; import com.ma.bean.UserBean; public class Demo1 { /** * 反射:加载类的方法 */ @Test public void test1(){ //1.用Class.forName("

java中反射:加载类的构造方法

package com.ma.reflection; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import org.junit.Test; import com.ma.bean.UserBean; /** * 反射:加载构造方法 * @author ma * */ public class Demo2 { /** * 反射:加载类的无参构造方法 */ @Te

[javaSE] 反射-动态加载类

Class.forName(“类的全称”) ①不仅表示了类的类类型,还代表了动态加载类 ②请大家区分编译,运行 ③编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 Ⅰ所有的new对象都是静态加载类 在编译的时刻就要去检测该类是否存在,如果不存在,编译失败. //对于这种情况,静态加载不适用,因为我们需要根据输入来确定加载哪个类 package com.tsh.reflect; class ReflectLoadDemo { public static void main(String[]

java 反射机制与动态加载类学习要点

获取Class类的对象: 假设Foo是一个类,Foo foo = new Foo():则 第一种:Class c1 = Foo.class; 第二种:Class c2 = foo.getClass(); 第三种:Class c3 = Class.forName("com.nudt.reflection.Foo"); //会抛出异常 此时  c1 == c2 == c3 为true 也可以通过c1\c2\c3创建Foo的实例: Foo foo = (Foo)c1.newInstance(

Java 反射理解(二)-- 动态加载类

Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 演示 我们以具体的代码来演示什么是动态加载类和静态加载类: 新建:Office.java: class Office { public static void main(String[] args) { // new 创建对象,是静态加载类,在编译时刻就需

Java反射第二课 动态加载类

在第一节课中我们讲的第三种方法 Class.forName("类的全称"); 不仅表示了类的类类型,还代表了动态加载类 请大家区分编译,运行 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 现在的开发工具比如eclipse把编译过程给隐藏了 下面做一个实验 比如用记事本编写下面的Office.java文件 class Office { public static void main(String[] args) { if(("Word").equals(ar

Java--Reflect(反射)专题2——动态加载类

转载请注明:http://blog.csdn.net/uniquewonderq 首先区分什么是动态加载,什么是静态加载? Class.forName("类的全称");//第三种表达类类型的方式 不仅代表了类的类类型,还代表了动态加载类 要区分编译和运行. 编译时刻加载类是静态加载类.运行时刻加载类是动态加载类. 在编译时刻就需要加载所有的可能使用到的类. 演示代码如下:功能性的类,最好使用动态加载.如,更新,升级,增加新功能等. 首先是一个接口,用于动态加载的.稍候可体验出来. pa

JVM加载类的过程,双亲委派机制中的方法

JVM加载类的过程: 1)JVM中类的整个生命周期: 加载=>验证=>准备=>解析=>初始化=>使用=>卸载  1.1.加载 类的加载阶段,主要是获取定义此类的二进制字节流,并将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构,最后在Java堆中生成一个代表这个类的java.lang.Class对象作为方法区这些数据的访问入口.相对于类加载过程的其他阶段,加载阶段是开发期可控性最强的阶段.我们可以通过定制不通的类加载器,也就是ClassLoader来控制二进制

利用反射动态加载程序集中所有的继承于Form的子类

利用C# 的反射,能够轻松快捷的创建指定类型的未知对象,比如继承某个接口的类,继承于某个基类的子类. 问题场景: 我自己创建一个解决方案,这个方案里面放了很多的小工具,每一个工具都是一个小窗体,于是,我就用一个MID窗体来包含这些窗体. 这样问题就来了,每一次我添加一个小工具,我就必须在MID窗体里面添加一个按钮,或者是一个菜单.在事件写上,让某个窗体显示出来.这类无聊的语句. 那么能不能让程序自动查找程序集中的窗体,自动创建按钮,或者菜单. 这样就可以达到动态创建的目的了 解决方案: 假设我们