background image

  }
  // 必需的步骤 2:如果上面没有成功,
  // 我们尝试用默认的 ClassLoader 装入它

  if (clasz == null)
  clasz = findSystemClass( name );
  // 必需的步骤 3:如有必要,则装入相关的类

  if (resolve && clasz != null)
  resolveClass( clasz );
  // 把类返回给调用者

  return clasz;
  } catch( IOException ie ) {
  throw new ClassNotFoundException( ie.toString() );
  } catch( GeneralSecurityException gse ) {
  throw new ClassNotFoundException( gse.toString() );
  }
  }

  Listing 2 显示了一个简单的 loadClass 实现。代码中的大部分对所有 ClassLoader 对象
来说都一样,但有一小部分(已通过注释标记)是特有的。在处理过程中,ClassLoader 对象
要用到其他几个辅助方法:
  findLoadedClass:用来进行检查,以便确认被请求的类当前还不存在。loadClass 方法
应该首先调用它。
  defineClass:获得原始类文件字节码数据之后,调用 defineClass 把它转换成一个
Class 对象。任何 loadClass 实现都必须调用这个方法。
  findSystemClass:提供默认 ClassLoader 的支持。如果用来寻找类的定制方法不能找到
指定的类(或者有意地不用定制方法),则可以调用该方法尝试默认的装入方式。这是很有
用的,特别是从普通的 JAR 文件装入标准 Java 类时。
  resolveClass:当 JVM 想要装入的不仅包括指定的类,而且还包括该类引用的所有其
他类时,它会把 loadClass 的 resolve 参数设置成 true。这时,我们必须在返回刚刚装入的
Class 对象给调用者之前调用 resolveClass。
  三、加密、解密
  Java 加密扩展即 Java Cryptography Extension,简称 JCE。它是 Sun 的加密服务软件,
包含了加密和密匙生成功能。JCE 是 JCA(Java Cryptography Architecture)的一种扩展。
  JCE 没有规定具体的加密算法,但提供了一个框架,加密算法的具体实现可以作为
服务提供者加入。除了 JCE 框架之外,JCE 软件包还包含了 SunJCE 服务提供者,其中包
括许多有用的加密算法,比如 DES(Data Encryption Standard)和 Blowfish。
  为简单计,在本文中我们将用 DES 算法加密和解密字节码。下面是用 JCE 加密和解
密数据必须遵循的基本步骤:
  步骤 1:生成一个安全密匙。在加密或解密任何数据之前需要有一个密匙。密匙是随
同被加密的应用一起发布的一小段数据,Listing 3

 

显示了如何生成一个密匙。【Listing 3:

生成一个密匙】