反射的源头,Class类的实例

java.lang.Class:是反射的源头。创建一个类,通过编译,生成.class文件。之后使用java.exe加载(JVM的类加载器)加载此.class文件。加载到内存以后,就是一个运行时类,存在缓冲区。那么这个运行时类本身就是一个Class的实例。

1. 一个运行时类只加载一次

2. 有了Class的实例以后,才可以进行如下操作

1)创建对应的运行时类的对象

2)获取对应的运行时类的完整结构(属性,方法,构造器…)

3)获取对应的运行时类的指定结构(属性,方法,构造器)

4)反射的应用:动态代理

获取Class类的实例

package lianxi1;

import org.junit.Test;

public class TestReflection {
//如何获取Class的实例
@Test
  public void test1() throws ClassNotFoundException{
    //1.通过运行时类本身的class属性
    Class clazz1 = Person.class;
    System.out.println(clazz1.getName());
    //2.通过运行时类的对象获取
    Person p = new Person("foj",23);
    Class clazz2 = p.getClass();
    System.out.println(clazz2.getName());
    //3.通过Class的静态方法获取,体现反射的动态性
    String s1 = "lianxi1.Person";
    Class clazz3 = Class.forName(s1);
    //clazz3.newInstance();
    System.out.println(clazz3.getName());
    //4.通过类的加载器
    ClassLoader classloader = this.getClass().getClassLoader();
    Class clazz4 = classloader.loadClass(s1);
    System.out.println(clazz4.getName());

}
}
时间: 2024-07-30 01:58:41

反射的源头,Class类的实例的相关文章

C# 利用反射根据类名创建类的实例对象

“反射”其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL) object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)");

[译文]运行时利用反射动态地创建类的实例

介绍 通常我们使用类的名称创建一个实例/类的对象,例如,如果我有一个名为 User 的类,我们会去这样创建这个类. 1 User UR = new User(); 2 UR.ID = 1; 3 UR.Name = "Kailash"; 但如果有人你在让你在应用程序运行时或者通过字符串作为类名创建一个类的实例,你将如何做? 别担心,微软.Net 框架提供了一种解决方案. 在System.Reflection名称空间的 Assembly类和System名字空间的和Activator 类可以

C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值

转自goldeneyezhang原文 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值总结: 对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法(采用反射): Type t = tc.GetType();//获得该类的Type //再用Type.GetProperties获得PropertyInfo[],然后就可以用foreach 遍历了 foreach (PropertyInfo pi

C# 反射 通过类名创建类实例

“反射”其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL) object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)");

C# 反射创建对象,包括创建引用外部程序集类的实例

1 #region 根据对象名成创建对象 2 /// <summary> 3 /// 根据对象名成创建对象 4 /// </summary> 5 /// <param name="assemblyName">程序集名称</param> 6 /// <param name="classFullName">类全称,包括命名空间</param> 7 /// <returns>对象的实例&l

ja获取Unsafe类的实例和取消eclipse编译的错误和警告

JRE的rt.jar中提供了一个类sun.misc.Unsafe,虽然这个类因为其不其安全性,不建议使用,而且被加了诸多限制:但 是在很多场合下我们确实需要这个类提供的强大功能.JDK类库下的NIO和concurrent包下的很多类都使用到了Unsafe 类,如AtomicInteger和AbstractQueuedSynchronizer等. JDK源码中对这个类进行了严格限制,我们不能通过常规new的方式去获取该类的实例,也不能通过Unsafe.getUnsafe ()来获取实例.但是我们可

反射及数学运算符类

1.API(接上篇): 数学运算符类(random 随机类)产生随机数,前包后不包Math类—基本数学运算方法:(1)abs() 返回绝对值(2)Math.max(a,b) 比较a,b值大小,输出较大的值(3)Math.min(a,b) 比较a,b值大小,输出较小的值(4)round() 四舍五入(5)floor 向下取整(6)ceil() 向上取整(7)random() 返回0到1之间的小数2.反射:(类的加载机制 Classloder)运行时探究和使用编译时未知的类反射就是操作Class类第

透彻分析反射的基础_Class类

一.反射的基石--->Class类 1. Java类用于描述一类事物的特性,该类事物有什么属性,没有什么属性,值域这个属性的值是什么,则是由这个类的实例对象来确定的,不同的实例对象有不同的属性值.Java程序中的各个Java类,他们是否属于同一类事物,是不是可以用一个类来描述这类事物呢?这个类的名字就是Class,要注意与小写class关键字的区别哦.Class类描述了哪些方面的信息呢?类的名字,类的访问属性,类所属的包名,字段名称的列表,方法名称的列表,等等.学习反射,首先就要明白Class这

用反射获取构造函数带参数的实例对象

经过测试,如果显示声明有参构造函数,用反射实例化的时候,就需要传入构造函数的参数,如果同时声明了有参和无参构造函数 或只声明了无参构造函数则不需要传入参数,直接可以获取实例 //显示无参构造函数,如果只显示定义了有参构造函数,就不能使用如下代码反射创建实例对象            //var art = Assembly.LoadFrom(@"F:\Q\NET\qi\jlcms_sql_src\jlcms.Web\bin\jlcms.DAL.dll").CreateInstance(