package com.cgm.invokeclass;
import java.lang.reflect.Method;
/*
* 关于动态代理的两个核心类
* 1.Proxy
* 用来创建给定接口的子类,在内存中动态创建 $proxy() 执行一次
* 2.InvicationHandler 执行句柄。。在执行时可以获取被代理类的反射。 执行多次,用户的每一次调用都会被这个句柄所拦截
*
* 3.关于类加载器 有3
* 1 BootStrapClassLoader 根类加载器 ----加载jdk下rt.jar
* 2 ExtClassloader java扩展类加载器---- jdk下 的 ext文件夹下了类
* 3 AppClassLoader----加载系统的类 我们自己写的类 Web_info下 class文件夹下的类
* 因为jdk的父类委托机制 任务由下往上 委托执行 下列代码证明
*
* 如何用cmd给class打jar包
* 如把包 com/cgm/ss/VBBB.class
* copy到某个目录下 D:a目录----》
* 开cmd 到 D:\a\com>cd..
* D:\a>.jar -vcf aa.jar com.*
*
*/
public class ProxyDemo {
public static void main(String[] args) throws Exception {
ProxyDemo p=new ProxyDemo();
System.out.println(p.getClass().getClassLoader());
System.out.println(ProxyDemo.class.getClassLoader()); //和上面同一个内存地址 应该是 由AppClassLoader加载
System.out.println(ProxyDemo.class.getClassLoader().getParent());//ExtClassLoader 父类
System.out.println(ProxyDemo.class.getClassLoader().getParent().getParent()); //返回null,跟类加载器不允许使用
System.out.println(String.class.getClassLoader()); //取得根类加载器 因为String是jre下rt.jar的方法
}
@Override
public String toString() {
return "你好朋友";
}
}
分享到:
相关推荐
类加载器是JVM实现动态加载的核心组件,它的主要任务是根据类名找到对应的.class文件,并将其转换为内存中的Class对象。Java中的类加载器主要有以下几种: 1. Bootstrap ClassLoader:引导类加载器,负责加载JRE...
2. **扩展类加载器(Extension ClassLoader)**:负责加载Java的扩展类库(位于JRE/lib/ext/目录下的所有jar包),可以通过 `sun.misc.Launcher#getExtClassLoader()` 获取。 3. **应用程序类加载器(Application ...
Java中有三个类加载器,问题就来了,碰到一个类需要加载时,它们之间是如何协调工作的?在这里,Java采用了委托模型机制,这个机制简单来讲,就是“类装载器有载入类的需求时,会先请示其Parent使用其搜索路径帮忙...
2. Extension ClassLoader:扩展类加载器,加载JDK扩展目录下的jar包。 3. System ClassLoader(也称App ClassLoader):应用类加载器,加载应用程序classpath路径下的类。 4. 用户自定义类加载器:根据需求创建的类...
类加载器有三个类型:Bootstrap类加载器、Extension类加载器和Application类加载器。 1. Bootstrap类加载器:Bootstrap类加载器是JVM的内置类加载器,负责加载JDK中的核心类。 2. Extension类加载器:Extension类...
Java的类加载器体系结构由三个主要类型的类加载器组成: 1. **引导类加载器(Bootstrap ClassLoader)**:这是最基础的类加载器,负责加载Java的核心库类,如`java.lang`包下的类。 2. **扩展类加载器(Extension ...
类加载器本身也是一个类,它的主要职责是从文件系统、网络或者JAR包中加载类文件到JVM内存中。Java类加载器采用双亲委托模型进行类加载,这保证了Java类的安全性和系统类的优先加载。 类加载器主要分为三类:...
类加载器负责将.class文件加载到Java虚拟机中,并生成对应的java.lang.Class对象,以便JVM能够使用这些类。类加载过程大致可以分为加载、链接、初始化三个步骤,其中链接又分为验证、准备、解析三个阶段。 首先,...
Java 类加载器是Java语言的核心特性之一,它允许程序在运行时动态地加载类到Java虚拟机(JVM)中。这一特性对于实现模块化、插件化和动态部署等功能至关重要。类加载器的设计遵循“分层加载”原则,形成了一个树状的...
Java虚拟机(JVM)使用类加载器来加载.jar文件中的类。默认的类加载器会从类路径中查找.class文件,开发者还可以自定义类加载器以实现特定的加载逻辑。 总的来说,.jar文件在Java和Android开发中起着至关重要的...
5. **类加载**:在运行时,Java虚拟机(JVM)会使用类加载器加载JAR包中的类,以便执行程序。 6. **元数据**:JAR文件头可以包含Manifest文件,其中记录了关于包的信息,如版本、作者、主类(如果有的话)等。 7. ...
这种模型由三个内置的类加载器组成:Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和App ClassLoader(应用程序类加载器)。 - **Bootstrap ClassLoader**:这是系统最基本的类...
2. Extension ClassLoader/扩展类加载器 负责加载 java 平台 中 扩展功能 的 一些 jar 包 ,包括 $JAVA_HOME 中 jre/lib/*.jar 或 -Djava.ext.dirs 指定目录下的 jar 包 3. App ClassLoader/系统类加载器负责记载 ...
- **扩展类加载器(Extension ClassLoader)**:加载JRE的扩展目录下的jar包。 - **应用程序类加载器(Application ClassLoader)**:也称为系统类加载器,负责加载环境变量`CLASSPATH`或`-cp`指定的类。 - **...
1. **启动类加载器** (`BootstrapClassLoader`): 用C++编写,负责加载机器上安装的`javalib`目录下的核心类库(如`rt.jar`、`resources.jar`),主要用于提供JVM自身需要的核心类。 2. **扩展类加载器** (`...
默认有三个内置的类加载器:Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和App ClassLoader(应用程序类加载器)。开发者可以自定义类加载器,实现`java.lang.ClassLoader`接口,...
1. 类加载器(ClassLoader):负责加载 Java 类文件到 JVM 中。 2. 运行时数据区(Runtime Data Area):包括方法区、堆、栈、本地方法栈等。 3. 执行引擎(Execution Engine):将 Java 字节码转换为具体平台上的...
工程包“jar1”是一个Java应用程序的归档文件,它包含了一组编译好的类文件、资源文件和其他元数据,通常用于分发可执行的Java程序或库。在Java开发中,JAR(Java Archive)文件起着至关重要的作用,它们使得代码...
- **Webapp应用类加载器**:每个部署的应用都会有一个独立的类加载器,它负责加载位于WEB-INF/lib下的jar文件中的类和WEB-INF/classes下的类文件。 **2. 类的加载顺序** 当应用需要加载某个类时,Tomcat会按照以下...
Java的jar包是一种用于打包和分发Java应用程序的文件格式,它包含了类文件、资源文件以及其他元数据。在开发过程中,有时我们可能需要查看jar包内的源代码或.class字节码文件,特别是在处理第三方库或者遇到无法理解...