`

java反射 ClassLoader 和 Class.forName() 的区别

    博客分类:
  • Java
 
阅读更多
package fanshe;

public class Person {
	private int age;
	private String name;
	
	static {
		System.out.println("initial static block...");
	}
	
}

package fanshe;

import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Mymain {
	
	public static void main(String[] args) throws Exception{
		
		ClassLoader c1 = ClassLoader.getSystemClassLoader();
		c1.loadClass("fanshe.Person");
		System.out.println("系统加载Person类");
		Class.forName("fanshe.Person");
		
	}
}


输出结果:
系统加载Person类
initial static block...

原因:  ClassLoader 加载类时不会进行类的初始化, Class.forName()会强制初始化该类。
分享到:
评论

相关推荐

    在Java的反射中,Class.forName和Class

    在Java的反射机制中,`Class.forName`和`ClassLoader`都是关键组件,它们在程序运行时动态加载类和实现类的实例化方面扮演着重要角色。理解这两个概念及其区别是深入掌握Java反射的重要一步。 首先,`Class.forName...

    java中Class.forName方法的作用详解

    `Class`对象是Java反射机制的基础,它代表着运行时的类信息,可以通过此类对象实例化对象、获取类的属性、方法等信息。 在上述的JDBC示例中,我们看到`Class.forName("com.mysql.jdbc.Driver")`这行代码,其作用是...

    Classfor的用法

    `Class.forName` 是 Java 反射 API 中的一个重要方法,主要用于动态加载类。该方法的主要作用是根据提供的全限定类名来加载并返回对应的 `Class` 对象。在 Java 开发过程中,当我们需要根据用户的输入或者配置文件中...

    java面试题--反射机制

    通过`Class.forName()`方法或者`ClassLoader`的`loadClass()`方法,可以根据类名字符串在运行时加载类。 #### 七、操作成员 - **创建对象**:使用`Class`对象的`newInstance()`方法。 - **访问和修改字段**:使用`...

    java反射机制原理详解.docx

    3. 通过`Class`的静态方法`forName(String className)`:例如`Class clazz4 = Class.forName(className);` 4. 通过类的加载器获取:更复杂的情况,一般用于自定义类加载。 **三、创建运行时类对象** 1. 获取`Class`...

    White paper

    Java 2提供的解决方案,如修改后的`Class.forName`语法和线程上下文类加载器,为开发者提供了工具,以确保即使在复杂环境中也能正确加载类。掌握这些技术对于构建健壮、可扩展的Java应用程序至关重要。

    java中的Class类和反射.docx

    - 使用`Class.forName("类的全限定名")`,例如`Class.forName("java.lang.String")`。 #### 二、Class类的特性 `Class`类自身并没有公共的构造方法,它是由JVM自动创建的。这意味着我们无法直接实例化`Class`对象...

    【Java基础笔记】反射.docx

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。在Java中,反射主要涉及到`java.lang.Class`、`java.lang.reflect.Method`、`java.lang.reflect.Field`和`java.lang...

    Java反射机制21

    - **Class.forName()**:使用`Class.forName()`方法,传入完全限定类名(包括包名),可以加载并返回指定类的`Class`对象,例如`Class.forName("com.anbai.sec.classloader.TestHelloWorld")`。 - **ClassLoader....

    java reflect and dynamic proxy .Java反射和动态代理

    1. **获取Class对象**:Class对象代表一个类,可以通过类名.class、对象.getClass()或Class.forName()获取。 2. **创建对象**:通过Class的newInstance()方法或Constructor的newInstance()方法创建对象。 3. **...

    java反射机制

    Java反射机制是Java语言提供的一种强大特性,它使得程序可以在运行时动态地获取类的信息并直接操作对象的内部属性和方法。这种能力使得Java具备了一种动态语言的灵活性。 #### 二、Java反射机制的功能 Java反射...

    JAVA的反射机制与动态代理.pdf

    - **`forName(String name, boolean initialize, ClassLoader loader)`**:同上,但提供了额外的控制选项,如是否初始化类(默认为true)和使用哪个类加载器。 - **`asSubClass(Class superClass)`**:确保给定的...

    JAVA反射机制与类的加载

    Java反射机制使得程序在运行时能够动态加载、解析和使用未知类型的类。这为开发者提供了强大的灵活性,比如在设计和运行时添加新类,或者动态查询和操作类的能力。通过反射,我们可以: 1. 加载运行时才能确定的...

    java反射机制1

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、对象等的内部信息,实现对Java类的动态加载、动态调用方法和访问字段。这一特性使得Java能够展现出高度的灵活性和适应性,尤其...

    反射取继承子类.rar

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作对象的内部属性、方法和实现细节。这个压缩包“反射取继承子类.rar”很可能包含了一个示例或教程,专注于如何利用反射机制来...

    Java的反射机制深度解析

    例如,我们可以使用`Class.forName()`方法或者`ClassLoader.loadClass()`方法来获取类的`Class`对象。 以下是一些关键的反射操作: 1. **获取构造函数**:通过`Class`对象的`getConstructors()`或`...

    java反射说明

    Java反射机制是Java语言提供的一种在运行时动态访问和操作类、对象、方法和字段的能力。这种能力使得开发者可以在程序运行过程中获取到类的信息(包括类名、字段、方法等),并能够动态地创建对象、调用方法和更改...

Global site tag (gtag.js) - Google Analytics