- 浏览: 193557 次
文章分类
最新评论
JDK内置ClassLoader
1.bootstrap class loader
2.JDK\jre\lib\ext\*jar
extension classLoader 负责加载 其他均匀JAVA语言实现
3.Application class loader 加载自己定义的类
4.其他的classloader可以通过classloader的继承了解
URLClassLoader 也可以自定义自己的classloader
ClassLoader的层次关系 不是继承关系
public final ClassLoader getParent()
这里说的是对象之间的关系 而不是类之间的关系
Application class loader 有个引用指向extension classLoader
extension classLoader 有个引用(Parent)指向bootstrap class loader
String.class
如果一个classLoader 的getParent()已经加载,那这个classloader不用加载了
站在classloader的角度,每一个loader进来的class文件是一个class对象,class里面的方法,参数,属性也可以堪称一个对象 property method argm1
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!"); } }
发表评论
-
JDK配置
2012-09-19 14:13 686JAVA_HOME C:\Program Files\ ... -
Java abstract class interface 区别
2012-09-09 23:35 9841.abstract class 表示的是一种继承关系,并 ... -
全组合
2012-08-28 23:10 876package cn.xmu.microsoft; ... -
全排列
2012-08-28 11:35 835private static String[] perm ... -
Java 方法引用
2012-08-12 11:23 771一个对象的引用本质上是一个很强的完整和安全方面约束能力的对象指 ... -
Java 动态绑定 静态绑定
2012-08-12 11:07 809静态绑定:使用编译类型的对象引用 动态绑定:使用运行类型所指 ... -
A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available
2012-05-26 15:34 949Eclipse 在 Unbutu下双击图标启动会出现上述问题, ... -
Java BitSet
2012-04-13 09:29 923//说明 bs 至少能够装下65bits 大小由系统 ... -
Java 中文编码问题
2012-04-10 22:09 774import java.io.UnsupportedEn ... -
Hadoop in-mapper combining 实例
2012-04-08 14:46 2594import java.io.IOException; ... -
Java 正则表达式
2012-04-08 09:50 863Pattern p = Pattern.compile( ... -
Java 加载属性配置文件
2012-04-07 16:49 674import java.util.MissingReso ... -
Java notify wait
2012-04-06 09:42 1071wait 和 notify 是Object类而非Thread类 ... -
Dangling meta character '*' near index 0
2012-04-05 14:12 1217这个由于是在java中使用split(“”);造成的,在 ... -
Logger
2012-04-05 08:54 783/LogTest/src/log4j.properties ... -
分割字符串时存在多个分隔符
2012-03-20 17:14 904public static void main(Str ... -
Error: could not open `C:Program FilesJavajre6libamd64jvm.cfg'
2012-02-26 18:55 1074重新配置环境变量后出现可以编译,不可以运行... 删除 ... -
JAVA 运行包中的类
2012-02-23 13:41 1078Java中的包是以目录的形式组织的,在java文件中如果指定了 ... -
Data Access Object
2012-02-18 21:24 754DAO:Data Access Object 把项目开发分为 ... -
文件读写问题
2012-02-16 13:36 741'赵','1234' '钱','2345''孙','3456 ...
相关推荐
在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作原理以及如何定制它,对于深入学习Java的运行机制和进行高级应用开发具有重要意义。本篇文章将...
Java ClassLoader是一个核心的Java运行时组件,负责加载类到Java虚拟机(JVM)中。它是Java平台的独特特性,因为它允许动态加载类,增强了软件的可扩展性和灵活性。这篇博文(虽然链接不可用)可能深入探讨了...
### Java ClassLoader原理详解 #### 摘要 本文探讨了Java虚拟机(JVM)中的一个重要特性:动态类加载(Dynamic Class Loading)。这一机制为Java平台提供了强大的能力,允许在运行时安装软件组件,例如从网络下载...
### Java ClassLoader与ClassPath详解 #### 一、概述 在Java编程中,类加载机制是十分关键的一个环节。类加载器(`ClassLoader`)负责将编译后的`.class`文件加载到Java虚拟机(JVM)中执行,而类路径(`ClassPath...
Java ClassLoader机制是Java虚拟机(JVM)中一个至关重要的组成部分,它的主要任务是将类的.class文件加载到JVM中,使得程序能够运行。ClassLoader不仅负责类的加载,还涉及类的验证、初始化等一系列过程。理解...
Java ClassLoader机制是Java运行时环境中的核心组件之一,它负责加载类到JVM(Java虚拟机)中,使得程序能够执行。理解ClassLoader的工作原理对于优化应用性能、处理类加载问题以及实现自定义加载器至关重要。 首先...
Java 类加载器(ClassLoader)是Java虚拟机(JVM)的重要组成部分,它负责在运行时查找并加载类到JVM中。这个教程将深入探讨ClassLoader的工作原理、类型以及如何自定义类加载器。 一、Java ClassLoader 基础 1. 类...
Java ClassLoader学习总结 Java 类加载机制是 Java 中一个非常重要的机制,它负责加载 Class 文件到 JVM,以供程序使用。ClassLoader 是 Java 中的一个抽象类,它的主要作用是加载 Class 文件到 JVM 中。...
### Java ClassLoader详解:以淘宝网为例 #### 一、ClassLoader概述 在Java环境中,类加载器(ClassLoader)是负责加载Java类到JVM的重要组件。它不仅实现了类的加载机制,还支持了动态加载与卸载的功能。本文将...
### Java ClassLoader理解详解 #### 一、引言 在商业流行的编程语言中,Java以其独特的运行机制脱颖而出:它在Java虚拟机(JVM)上运行。这意味着编译后的程序采用一种特殊的、与平台无关的格式,而不是针对特定...
Java 类加载器(ClassLoader)是Java虚拟机(JVM)中的一个重要组成部分,它负责加载类的字节码文件,使得程序能够运行。深入理解ClassLoader对于优化应用性能、处理类加载问题以及实现自定义加载策略至关重要。 一...
### Java ClassLoader (类加载器)详解 #### 一、教程提示 如果你正在查看这份文档,在线版中你可以点击下面的任何主题直接跳转到相应的部分。 1. **教程提示** 2. **介绍** 3. **类加载器结构** 4. **编译类加载...
破解java加密的ClassLoader.java,在classloader植入破解代码
Java ClassLoader是Java虚拟机(JVM)的重要组成部分,它负责加载类到JVM中运行。理解ClassLoader的工作原理对于深入学习Java以及进行JVM优化、插件开发等高级技术至关重要。下面将详细介绍Java ClassLoader的基本...
在深入探讨Java类加载器(ClassLoader)之前,我们首先需要了解它在Java运行时系统中的核心作用。类加载器是Java虚拟机(JVM)的一个关键组成部分,负责查找、加载和链接类文件到JVM中。它的存在使得Java应用程序...
Java ClassLoader 是一个重要的、但又常常被人忽略的 Java 运行时系统组件。它是负责在运行时查找和装入类文件的类。创建自己的 ClassLoader 可以以实用且有趣的方式定制 JVM,这样可以让您彻底重新定义如何将类文件...