`

JAVA classLoader

    博客分类:
  • JAVA
阅读更多
JDK内置ClassLoader
1.bootstrap class loader 
最顶层的 负责管理一些classloader 
implemented by native lauguage c 汇编 C++ 操作系统本地语言 无名字(null)
load the core classes of jdk
首先是bootstrap class loader  把其他的classloader load 进来,然后其他的classloader负责把class load进来。

System.out.println(String.class.getClassLoader());
output:null


2.JDK\jre\lib\ext\*jar
extension classLoader 负责加载 其他均匀JAVA语言实现
System.out.println(
com.sun.crypto.provider.DESKeyFactory.class.getClassLoader().getClass().getName());


3.Application class loader 加载自己定义的类
System.out.println(JdkClassLoader.class.getClassLoader().getClass().getName());
System.out.println(ClassLoader.getSystemClassLoader());


4.其他的classloader可以通过classloader的继承了解
URLClassLoader 也可以自定义自己的classloader


ClassLoader的层次关系  不是继承关系
public final ClassLoader getParent()
这里说的是对象之间的关系  而不是类之间的关系

Application class loader 有个引用指向extension classLoader
extension classLoader  有个引用(Parent)指向bootstrap class loader

public class JdkClassLoader {

	public static void main(String[] args) {

		ClassLoader c = JdkClassLoader.class.getClassLoader();
		while(c!=null){
			System.out.println(c.getClass().getName());
			c = c.getParent();
		}
	}

}


String.class
如果一个classLoader 的getParent()已经加载,那这个classloader不用加载了


站在classloader的角度,每一个loader进来的class文件是一个class对象,class里面的方法,参数,属性也可以堪称一个对象 property method argm1

java.lang.reflect
Field Methods class



import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class TestReflection {

	//读取test.properties文件 并生成指定对象
	public static void main(String[] args) {

		/*String str = "T";
		T t = new T();*/
		//动态加载
		String str = "T";
		try {
			Class c = Class.forName(str);
			//生成一个对象
			Object o = c.newInstance();
			
			Method[] methods = c.getMethods();
			
			for(Method m : methods){
				//System.out.println(m.getModifiers()+"\t"+m.getName());
			}
			
			//如何去调用方法
			for(Method m : methods){
				if(m.getName().equals("mm")){
					//m.invoke(c, null);
					//m.invoke(c, new Object[]{});
					//m.invoke(T.class, new Object[]{});
					//动用需要的是类的对象而不是class对象 invoke是可变参数方法
					m.invoke(o);
				}
				
				if(m.getName().equals("m1")){
					m.invoke(o, 1,2);
					//可以了解方法的信息 类似于反汇编
					//不知道方法怎么具体实现
					m.getParameterTypes();
					for(Class pt : m.getParameterTypes()){
						System.out.println(pt.getName());
					}
				}
				
				if(m.getName().equals("getS")){
					Class rt = m.getReturnType();
					System.out.println(rt.getName());
				}
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
	}

}

	/**
	 * 反射机制:可以在运行期间动态的加载一个类进来,动态的new一个对象
	 * 动态的去了解类的内部结构,动态的去调用对象的抹一些方法
	 * 
	 * 配置文件中只需写类的名字,然后就可以动态加载进来
	 * 在Spring Struct中 很多类要配置在配置文件中得
	 * */

class T{
	
	//验证T是否被加载进来
	static {
		System.out.println("T loaded!");
	}
	
	public T(){
		System.out.println("T constructed!");
	}
	
	int i;
	String s;
	
	public void m1(int i,int j){
		this.i = i+j;
		System.out.println(this.i);
	}
	
	public String getS(){
		return s;
	}
	
	public void mm(){
		System.out.println("mm invoked!");
	}
}

分享到:
评论

相关推荐

    Java ClassLoader定制实例

    在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作原理以及如何定制它,对于深入学习Java的运行机制和进行高级应用开发具有重要意义。本篇文章将...

    java classloader

    Java ClassLoader是一个核心的Java运行时组件,负责加载类到Java虚拟机(JVM)中。它是Java平台的独特特性,因为它允许动态加载类,增强了软件的可扩展性和灵活性。这篇博文(虽然链接不可用)可能深入探讨了...

    Java ClassLoader原理

    ### Java ClassLoader原理详解 #### 摘要 本文探讨了Java虚拟机(JVM)中的一个重要特性:动态类加载(Dynamic Class Loading)。这一机制为Java平台提供了强大的能力,允许在运行时安装软件组件,例如从网络下载...

    java classloader classpath 张孝祥

    ### Java ClassLoader与ClassPath详解 #### 一、概述 在Java编程中,类加载机制是十分关键的一个环节。类加载器(`ClassLoader`)负责将编译后的`.class`文件加载到Java虚拟机(JVM)中执行,而类路径(`ClassPath...

    java ClassLoader机制及其在OSGi中的应用

    Java ClassLoader机制是Java虚拟机(JVM)中一个至关重要的组成部分,它的主要任务是将类的.class文件加载到JVM中,使得程序能够运行。ClassLoader不仅负责类的加载,还涉及类的验证、初始化等一系列过程。理解...

    理解Java ClassLoader机制

    Java ClassLoader机制是Java运行时环境中的核心组件之一,它负责加载类到JVM(Java虚拟机)中,使得程序能够执行。理解ClassLoader的工作原理对于优化应用性能、处理类加载问题以及实现自定义加载器至关重要。 首先...

    Java ClassLoader Tutorial.zip

    Java 类加载器(ClassLoader)是Java虚拟机(JVM)的重要组成部分,它负责在运行时查找并加载类到JVM中。这个教程将深入探讨ClassLoader的工作原理、类型以及如何自定义类加载器。 一、Java ClassLoader 基础 1. 类...

    Java ClassLoader学习总结

    Java ClassLoader学习总结 Java 类加载机制是 Java 中一个非常重要的机制,它负责加载 Class 文件到 JVM,以供程序使用。ClassLoader 是 Java 中的一个抽象类,它的主要作用是加载 Class 文件到 JVM 中。...

    java classloader讲义-淘宝网

    ### Java ClassLoader详解:以淘宝网为例 #### 一、ClassLoader概述 在Java环境中,类加载器(ClassLoader)是负责加载Java类到JVM的重要组件。它不仅实现了类的加载机制,还支持了动态加载与卸载的功能。本文将...

    Understanding the Java ClassLoader

    ### Java ClassLoader理解详解 #### 一、引言 在商业流行的编程语言中,Java以其独特的运行机制脱颖而出:它在Java虚拟机(JVM)上运行。这意味着编译后的程序采用一种特殊的、与平台无关的格式,而不是针对特定...

    java classLoader 的全面讲解

    Java 类加载器(ClassLoader)是Java虚拟机(JVM)中的一个重要组成部分,它负责加载类的字节码文件,使得程序能够运行。深入理解ClassLoader对于优化应用性能、处理类加载问题以及实现自定义加载策略至关重要。 一...

    JAVA ClassLoader 讲解 (类加载器)

    ### Java ClassLoader (类加载器)详解 #### 一、教程提示 如果你正在查看这份文档,在线版中你可以点击下面的任何主题直接跳转到相应的部分。 1. **教程提示** 2. **介绍** 3. **类加载器结构** 4. **编译类加载...

    破解java加密的ClassLoader.java,在classloader植入破解代码

    破解java加密的ClassLoader.java,在classloader植入破解代码

    了解Java ClassLoader

    Java ClassLoader是Java虚拟机(JVM)的重要组成部分,它负责加载类到JVM中运行。理解ClassLoader的工作原理对于深入学习Java以及进行JVM优化、插件开发等高级技术至关重要。下面将详细介绍Java ClassLoader的基本...

    Understanding the Java ClassLoader.pdf

    在深入探讨Java类加载器(ClassLoader)之前,我们首先需要了解它在Java运行时系统中的核心作用。类加载器是Java虚拟机(JVM)的一个关键组成部分,负责查找、加载和链接类文件到JVM中。它的存在使得Java应用程序...

    了解java classloader

    Java ClassLoader 是一个重要的、但又常常被人忽略的 Java 运行时系统组件。它是负责在运行时查找和装入类文件的类。创建自己的 ClassLoader 可以以实用且有趣的方式定制 JVM,这样可以让您彻底重新定义如何将类文件...

Global site tag (gtag.js) - Google Analytics