反射的本质:将类的各种属性(类的变量,类的方法,类所在的包名,类的构造器等)映射成相应的java类。用"一群类"去描述和操纵一个类。
学习反射的第一步语法就是类的加载。
关于类的解释:类是对象实例的抽象和模板。如果定义一个描述人的类,那么对象张三就是人的实例,对象李四也是人的实例。
类的字节码加载相当于从对象张三或对象李四那里得到人的信息或者通过定义人的类得到人的信息。
一 类的三种加载方式 String.class 和 str.getClass() 和 Class.forName(\"java.lang.String\") 返回的都是String类的字节码。
第一种和第二种方式都是通过已经存在的对象类型来获得类的字节码加载。
第三种方式是动态的类加载方式,使用时需要处理ClassNotFoundException异常。本例中将异常抛出以例代码紧凑。
二 九种基本类型(void byte short int long float double boolean char)也有类的加载 例如 void.class int.class 它们都属于基本类型,而 <br /><br />Integer.class不是基本类型。
三 int.class和Integer.class加载的是不同类的字节码,但int.class和Integer.TYPE是相同的。
四 数组的判断语法是int[].class.isArray()。
总结:只要是在代码中出现的类型,都有各自的class实例对象。
代码示范如下: </p>
public class MyClass {
public static void main(String[] args) throws Exception {
String str = "abc";
// 类的三种加载方式的语法如下
Class cls1 = String.class;
Class cls2 = str.getClass();
Class cls3 = Class.forName("java.lang.String");
System.out.println("关于类的解释:类是对象实例的抽象和模板。如果定义一个描述人的类,那么对象张三就是人的实例,对象李四也是人的实例。");
System.out.println("类的字节码加载相当于从对象张三或对象李四那里得到人的信息或者通过定义人的类得到人的信息");
System.out.println("1 类的三种加载方式 String.class 和 str.getClass() 和 Class.forName(\"java.lang.String\") 返回的都是String类的字节码:"+((cls1 == cls2)&&(cls2 == cls3)));
// 九种基本类型(void byte short int long float double boolean char)也有类的加载
System.out.println("2 九种基本类型也有类的加载 例如 void的类加载void.class:"+void.class.getName()+" int的类加载int.class:"+int.class.getName()+" 它们都属于基本类型 :"+void.class.isPrimitive()+" 而Integer的类加载不是基本类型:"+Integer.class.isPrimitive());
System.out.println("3 int.class 和 Integer.class加载的是不同类的字节码:"+(int.class==Integer.class)+" 但int.class和Integer.TYPE是相同的:"+(int.class==Integer.TYPE));
System.out.println("4 数组的判断语法是int[].class.isArray():"+int[].class.isArray());
System.out.println("总结:只要是在源程序中出现的类型,都有各自的class实例对象");
}
}
下一章节
http://lgywindows.iteye.com/blog/1797303
分享到:
相关推荐
1. **加载**:这是类加载的第一步,JVM会通过类加载器找到对应的`.class`文件。类加载器主要有Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和AppClassLoader(应用程序类加载器)...
- **直接引用**: 当一个类直接引用另一个类时(例如,类A引用类B),JVM会使用加载类A的类加载器来加载类B。 - **反射调用**: 使用`Class.forName()`方法也会触发类的加载。 - **初始化**: 当类的静态块或静态成员被...
Java注解、反射、字节码和类加载机制是Java编程中的核心概念,它们在实际开发中扮演着重要角色。让我们深入探讨这些知识点。 **Java注解(Annotation)**: Java注解是一种元数据,它提供了在编译时或运行时处理代码的...
反射是Java提供的一种在运行时分析类和对象的能力。它允许程序在运行时动态获取类的信息(如类名、方法、属性等)并进行操作。反射增强了程序的灵活性,可以在不预先知道具体类型的情况下创建对象、调用方法。 获取...
类加载器是Java虚拟机(JVM)的一个组成部分,它的主要任务是将`.class`文件从磁盘加载到内存中,以便程序可以使用。类加载器分为以下几类: 1. **Bootstrap class loader**:这是最基础的类加载器,由JVM内置,...
Java虚拟机(JVM)是Java程序运行的基础,它的类加载机制是理解Java应用程序如何启动和执行的关键部分。本文将深入JDK源码,详细解析JVM类加载机制的各个环节,帮助开发者更好地理解和优化自己的代码。 类加载机制...
Java反射机制是Java语言的一个重要特性,它使得Java在运行时具有了动态性,能够获取和操作类的信息,包括类的修饰符、超类、实现的接口、字段和方法等。这种机制允许程序在运行时动态加载未知名称的类,进行字段的...
类加载器在Java虚拟机(JVM)中扮演着至关重要的角色,它是程序运行的基础,负责将类的二进制数据加载到内存中并进行初始化。类加载的过程分为三个主要阶段:加载、连接和初始化。 1. **加载**:在这个阶段,类加载...
根类加载器,也称为bootstrap class loader,是JVM内置的最基础的类加载器,由C++实现,负责加载JDK核心库,如rt.jar,这些库位于JRE的lib目录下,包含了Java的基础类和API。 扩展类加载器,又叫extension class ...
每个`Class`实例都关联着一个特定的类加载器,若加载器为`null`,则表示类由引导类加载器(bootstrap loader)加载,这是最基础的加载器,由JVM内置,非Java编写。 自定义类加载器(Custom ClassLoader)允许开发...
3. **反射**:动态加载的代码可能需要调用主程序中的类和方法,反射机制使得在运行时查找和调用这些元素成为可能。 4. **组件化框架**:例如插件化框架ARouter等,它们提供了完善的组件通信和管理机制,方便动态...
这是Java类加载机制的一种策略,当一个类加载器收到加载类的请求时,它会首先委托父类加载器去加载,只有当父类加载器无法加载时,当前类加载器才会尝试加载。这种模型可以避免类的重复加载,同时保证了JDK核心类库...
1. **启动类加载器(Bootstrap ClassLoader)**:这是最基础的类加载器,负责加载JDK中的核心类库,如`java.lang`包下的类。这个类加载器没有父类加载器,因为它本身是由C++编写并在JVM启动时初始化的。 2. **扩展类...
#### 一、类加载机制 ##### 1.1 类加载的时机 类加载机制负责将描述类的数据从`.class`文件加载到内存,并进行必要的校验、转换解析和初始化,使之成为可以被Java虚拟机直接使用的Java类型。根据Java虚拟机规范的...
Java虚拟机(JVM)的类加载过程是Java程序运行的基础,它涉及到类加载器、类的生命周期和一系列复杂的步骤。在这个过程中,类加载器主要任务是根据类的全限定名加载二进制字节流并转化为`java.lang.Class`对象。整个...
根据提供的文件信息,我们将详细解析Java基础中关于反射的相关知识点,包括Class类的理解、Java的类加载机制、ClassLoader的使用、反射机制的概念、Constructor、Method和Field类的用法以及动态代理的理解和掌握。...
这篇学习笔记将带你深入了解C#反射的基础知识,帮助你掌握这一关键技能。 1. **程序集(Assembly)**:程序集是.NET应用程序的基本部署和版本控制单位,包含了元数据和IL(中间语言)代码。你可以通过`System....
类的加载并非在使用时才进行,而是满足以下三个条件之一时:首次主动使用类(如new关键字、静态字段引用、反射调用等)、初始化子类时如果父类未初始化、JVM启动时指定的主类。 6. **类加载器与垃圾回收** 类加载...
- **全盘负责**:一旦某个类由某个类加载器加载,那么这个类所引用的所有类也必须由同一个类加载器加载,除非明确使用其他类加载器。 - **委托机制**:在加载类时,ClassLoader会先尝试让父类加载器加载,只有当...