Java类别载入器

2012-11-12
    1 Java的动态特性
    Java的动态特性有两种,一是隐式的;另一种是显示的。隐式的(implicit)方法就是当程式设计师用到new 这个Java 关键字时,会让类别载入器依需求载入您所需要的类别,这种方式使用了隐式的(implicit)方法。显式的方法,又分成两种方式,一种是藉由java.lang.Class 里的forName()方法,另一种则
    是藉由java.lang.ClassLoader 里的loadClass()方法。您可以任意选用其中一种方法。
    2 隐式的动态特性
    在执行java文件时,只有单独的变量声明是不会载入相应的类的,只有在用new生成实例时才载入
    如示例所示:
    public class Main
    public static void main(String args[])
    {
    A a1 = new A() ;
    B b1 ;
    }
    类A和B相同,如下:
    public class A
    {
    public void print(“using A”);
    }
    编译后,可用java –verbose:class Main运行,察看输出结果。可以看到JVM只载入了A,而没有载入B.
    另外,类的载入只在执行到new一个类时,才载入,如果没有执行到new语句,则不载入。
    如://类Office
    public class Office
    {
    public static void main(String[] args)
    {
    Word myword=null;
    Excel myexcel=null;
    if (args[0].equals("Word"))
    {
    myword = new Word();
    myword.start();
    }
    if (args[0].equals("Excel"))
    {
    myexcel = new Excel();
    myexcel.start();
    }
    }
    }
    //类Word和Excel基本相同,如下
    public class Word
    {
    public void start()
    {
    System.out.println("using word");
    }
    }
    在dos命令提示符下,输入java –verbose Office Excel可以看到JVM只载入Excel类,而不载入Word类。
    3 显示的动态特性
    3.1 java.lang.Class里的forName()方法
    在上一个Office示例中,进行如下修改:
    一 加入Assembly类
    public interface Assembly
    {
    public void start();
    }
    二 让Word和Excel类实现该接口
    public class Word implements Assembly
    {
    public void start()
    {
    System.out.println("using word");
    }
    }
    三 Office 类如下所示
    public class Office
    {
    public static void main(String[] args) throws Exception
    {
    java.lang.Class c = java.lang.Class.forName(args[0]);
    Object o = c.newInstance();
    Assembly a = (Assembly)o;
    a.start();
    }
    }

   考试大温馨提示:本内容来源于网络,仅代表作者个人观点,与本站立场无关,仅供您学习交流使用。其中可能有部分文章经过多次转载而造成文章内容缺失、错误或文章作者不详等问题,请您谅解。如有侵犯您的权利,请联系我们,本站会立即予以处理。

   编辑特别推荐:

   40个轻量级JavaScript库介绍

   Java网络编程:实现HTTP模拟器

   使用NetBeans开发Firefox插件

分享到:
0
相关阅读
友情链接
© 2018 我考网 http://www.woexam.com 中国互联网举报中心 湘ICP备18023104号 京公网安备 11010802020116号
违法和不良信息举报:9447029@qq.com