Java类加载原理
来源:优易学  2011-12-24 15:15:30   【优易学:中国教育考试门户网】   资料下载   IT书店

 

 // 创建CompilingClassLoader

  CompilingClassLoader ccl = new CompilingClassLoader();

  // 通过CCL加载主函数类。

  Class clas = ccl.loadClass( progClass );

  // 利用反射调用它的主函数和传递参数。

  // 产生一个代表主函数的参数类型的类对象。

  Class mainArgType[] = { (new String[0]).getClass() };

  // 在类中找到标准的主函数。

  Method main = clas.getMethod( "main", mainArgType );

  // 创建参数列表 -在这里,是一个字符串数组。

  Object argsArray[] = { progArgs };

  // 调用主函数。

  main.invoke( null, argsArray );

  }

  }

  Foo.java

  以下是文件Foo.java内容

  public class Foo

  {

  static public void main( String args[] ) throws Exception {

  System.out.println( "foo! "+args[0]+" "+args[1] );

  new Bar( args[0], args[1] );

  }

  }

  Bar.java

  以下是文件Bar.java内容

  import baz.*;

  public class Bar

  {

  public Bar( String a, String b ) {

  System.out.println( "bar! "+a+" "+b );

  new Baz( a, b );

  try {

  Class booClass = Class.forName( "Boo" );

  Object boo = booClass.newInstance();

  } catch( Exception e ) {

  e.printStackTrace();

  }

  }

  }

  baz/Baz.java

  以下是文件baz/Baz.java内容

  package baz;

  public class Baz

  {

  public Baz( String a, String b ) {

  System.out.println( "baz! "+a+" "+b );

  }

  }

  Boo.java

  以下是文件Boo.java内容

  public class Boo

  {

  public Boo() {

  System.out.println( "Boo!" );

  }

  }

  第七部分. 总结

  总结

  通过本文你是否意识到,创建自定义类加载器可以让你深入到Java虚拟机的内部。你可以从任何资源加载类文件,或者动态的生成它,这样你就可以通过扩展这些功能做很多你感兴趣的事,还能完成一些强大的功能。

  关于ClassLoader的其它话题

  就像本文开头说的,自定义类加载器在Java嵌入式浏览器和小应用程序浏览器中起着重要的作用。下面给出类加载器的其它功能。

  * 安全: 自定义的类加载器可以在把这个类交给Java虚拟机之前检查它是否有正确的数字签名。你也可以自己创建一个"沙箱"来阻止对某些方法的调用,这是通过检查源代码,阻止该类对沙箱之外的操作来实现的。

  * 加密:通过自定义类加载器可以动态的解码,所有你的类文件就无法通过反编译被查看到代码。用户需要密码才能运行程序,这个密码用来对代码解密。

  * 存档:你是否需要将你的代码以某种格式或者压缩形式发布吗?自定义ClassLoader可以从你想要的任何资源中生成字节码文件。

  * 自提取程序:可以把整个应用程序编译到一个可执行的类文件中,这个文件包括压缩过或者加密过的数据,有了内部类加载器,当程序运行的时候,他把自己解包到内存-不需要事前安装。

  * 动态生成:可以动态的生成那些被引用的类-整个程序需要用的类都可以动态的生成然后交给Java虚拟机。

上一页  [1] [2] [3] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训