盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

初探Java类加载机制

时间:2024/11/15作者:未知来源:盾怪网教程人气:

[摘要]!classFile.exists())     throw new ClassNotFoundException("ClassNotFoundExcetpion:"+javaF...
!classFile.exists()){
    throw new ClassNotFoundException("ClassNotFoundExcetpion:"+javaFilename);
   }
  }catch(IOException ie){
   throw new ClassNotFoundException(ie.toString());
  }
  }

  try{
  byte[] raw=getBytes(classFilename);

  //通过读入数据来构造一个类结构,这是核心
  clas=defineClass(name,raw,0,raw.length);
  }catch(IOException ie){
  //
  }

  if(clas==null){
  clas=findSystemClass(name);
  }

  System.out.println("findSystemClass:"+clas);

  if(resovle && clas!=null){
  resolveClass(clas);
  }

  if(clas==null){
  throw new ClassNotFoundException(name);
  }

  return clas;
  }
  }
  测试该loader:
  /**
  *TestRun.java
  *Copyright 2005-2-11
  */
  import java.lang.reflect.*;

  public class TestRun{
  public static void main(String[] args) throws Exception{
  String progClass=args[0];

  String progArgs[]=new String[args.length-1];
  System.arraycopy(args,1,progArgs,0,progArgs.length);

  CompilingClassLoader ccl=new CompilingClassLoader();

  Class clas=ccl.loadClass(progClass);

  //返回一个class的type
  Class[] mainArgType={(new String[0]).getClass()};
  Method main=clas.getMethod("main",mainArgType);

  Object argsArray[]={progArgs};

  main.invoke(null,argsArray);

  }
  }

  以上的核心内容已经编写完了,编译后,我们得到两个文件:

  CompilingClassLoader.class,TestRun.class

  四、编写一个例子,然后运行我们的ClassLoader

  /**
  *Hello.java
  */
  public class Hello{
  public static void main(String[] args){
  if(args.length!=1){
   System.err.println("Error,exit!");
   System.exit(1);
  }
  String name=args[0];
  System.out.println("Hello,"+name);
  }
  }

  好了,运行java TestRun Hello 阿飞

  ....
  ....
  ....
  Hello,阿飞

关键词:初探Java类加载机制




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版