自定义类加载器.doc

上传人:sk****8 文档编号:3120819 上传时间:2019-05-22 格式:DOC 页数:4 大小:59.50KB
下载 相关 举报
自定义类加载器.doc_第1页
第1页 / 共4页
自定义类加载器.doc_第2页
第2页 / 共4页
自定义类加载器.doc_第3页
第3页 / 共4页
自定义类加载器.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、 自定义类加载器1、类绑定package cn.itcast.demo;public class BoundDemo public static void main(String args) A a = new B();System.err.println(a.age);/100System.err.println(a.num);/100a.abc();/abc.1000 所有非静态分开方法都是在运行时绑定,动态绑定,其他的都是静态绑定/静态绑定是指在编译时已经指定引用的就是静态绑定a.aaa();/aaa.100class Apublic int age=100;public static

2、int num = 100;public void abc()System.err.println(“abc.100“);public static void aaa()System.err.println(“aaa.100“);class B extends Apublic int age=1000;public static int num = 1000;public void abc()System.err.println(“abc.1000“);public static void aaa()System.err.println(“aaa.1000“);1、 类加载所有类加载器,都是

3、ClassLoader 的子类。类加载器永远以.class 运行的目录为准。读取 classpath 根目录下的文件有以下几种方式:在 Java 项目中可以通过以下方式获取 classspath 下的文件:public void abc()/每一种读取方法,使用某个类获取AppclassloaderClassLoader cl = ReadFile.class.getClassLoader();URL url = cl.getResource(“a.txt“);System.err.println(“url1 is:“+url.getPath();/第二种方式,直接使用ClassLoaderU

4、RL url2 = ClassLoader.getSystemResource(“a.txt“);System.err.println(“url2 is:“+url2.getPath();在 Tomcat 中 tomcat 又声明了两个类载器:StandardClassLoader 加载 tomcat/lib/*.jar - serlvetapi.jarWebappclassloader /加载 tomcat/webapps/project/web-inf/lib/*.jar /WebAppClassLoaderint index=1;while(loader!=null)System.err

5、.println(index+)+“类加载器是:“+loader.getClass();loader=loader.getParent();/获取父类加载器Comment W1: Comment W2: 接收的是类名:cn.itcast.demo.PersonComment W3: 处理成路径名运行的结果:1类加载器是:class org.apache.catalina.loader.WebappClassLoader2类加载器是:class org.apache.catalina.loader.StandardClassLoader3类加载器是:class sun.misc.Launcher

6、$AppClassLoader4类加载器是:class sun.misc.Launcher$ExtClassLoader2、 自定义类加载器JDK以哪一个类加载器读取 A类的字节码,则 A类就是被哪一个类加载器加载 的。一个同名的类,是否可以相互转换,要看是否是在同个类加载器中。package cn.itcast.demo;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import .URL;public class MyClassLoader2 extends ClassLoader

7、 /* name:cn.itcast.demo.Person* 根据包名找到.class文件* cn.itcast.demo.person = cn/itcast/demo/Person.class*/public Class findClass(String name) throws ClassNotFoundException String classNameWithPackage=name;Class cls = null;try /先将name = name.replace(“.“,“/“);name +=“.class“;/确定目录URL url = MyClassLoader2.c

8、lass.getClassLoader().getResource(name);System.err.println(“:“+url.getPath();File file = new File(url.getPath();InputStream in = new FileInputStream(file);/读取这个.class文件的字节码byte b = new bytein.available();/直接声明这个字节大小为这个文件的大小int len = in.read(b);/len=621System.err.println(len);/* 第一个参数是类名*/cls = defin

9、eClass(classNameWithPackage,b,0,len); catch (Exception e) e.printStackTrace();return cls;测试类自定义类加载器“public class ClassLoaderDemo public static void main(String args) throws Exception MyClassLoader2 mc = new MyClassLoader2();Class cls = mc.findClass(“cn.itcast.demo.Person“);Object o = cls.newInstance();System.err.println(“toString:“+o+“,“+o.getClass().getClassLoader();/直接使用peron 是 AppClassLoaderSystem.err.println(“:“+Person.class.getClassLoader();/由于o是由mc加载的。而Person是由App加载的,所有不可以转换来自于两个不同的加载器/Person p = (Person) o;/类型转换错误ClassCastException/System.err.println(p);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。