Java 编程的动态性,第 7 部分: 用 BCEL 设计字节码
Apache Byte Code Engineering Library (BCEL)可以深入 Java
类的字节码。可以用它转换现有的类表示或者构建新的类,因为 BCEL 在单独的 JVM
指令级别上进行操作,所以可以让您对代码有最强大的控制。不过,这种能力的代价是复杂性。在本文中,Java 顾问 Dennis Sosnoski
介绍了 BCEL 的基本内容,并引导读者完成一个示例 BCEL 应用程序,这样您就可以自己决定是否值得以这种复杂性来换取这种能力。
在本系列的最后三篇文章中,我展示了如何用 Javassist 框架操作类。这次我将用一种很不同的方法操纵字节码——使用 Apache Byte
Code Engineering Library (BCEL)。与 Javassist 所支持的源代码接口不同,BCEL 在实际的 JVM
指令层次上进行操作。在希望对程序执行的每一步进行控制时,底层方法使 BCEL 很有用,但是当两者都可以胜任时,它也使 BCEL 的使用比
Javassist 要复杂得多。
我将首先讨论 BCEL 基本体系结构,然后本文的大部分内容将讨论用 BCEL 重新构建我的第一个 Javassist 类操作的例子。最后简要介绍
BCEL 包中提供的一些工具和开发人员用 BCEL 构建的一些应用程序。
BCEL 类访问
BCEL 使您能够同样具备 Javassist 提供的分析、编辑和创建 Java 二进制类的所有基本能力。BCEL 的一个明显区别是每项内容都设计为在
JVM 汇编语言的级别、而不是 Javassist 所提供的源代码接口上工作。除了表面上的差别,还有一些更深层的区别,包括在 BCEL 中组件的两个不同层次结构的使用——一个用于检查现有的代码,另一个用于创建新代码。我假定读者已经通过本系列前面的文章熟悉了
Javassist(请参阅侧栏
不要错过本系列的其余部分
)。
因此我将主要介绍在开始使用 BCEL 时,可能会让您感到迷惑的那些不同之处。
与 Javassist 一样, BCEL 在类分析方面的功能基本上与 Java 平台通过 Relfection API 直接提供的功能是重复的。这种重复对于类操作工具箱来说是必要的,因为一般不希望在所要操作的类被修改
之前
就装载它们。
不要错过本系列的其余部分
第 1 部分: “
类和类装入
”(2003
年 4 月)
第 2 部分,“
引入反射
”
(2003 年 6 月)
第 3 部分,“
应用反射
”
(2003 年 7 月)
第 4 部分, “
用
Javassist 进行类转换
&rdquo
相关文档:
命名方法(JAVA)
命名方法:
1,骆驼(Camel)命名法:第一个字母小写,随后的每个单词的第一个字母大写。如:studentName
2,帕斯卡(Pascal)命名法:每一个单词的第一个字母都大写。如:StudentName
3,匈牙利命名法:加前缀。如btnName,txtName.
1,命名空间
以Pascal命名法.
2,类
以Pascal命名方法,确保类的名称 ......
/**
* 堆排序
*
* */
public void heapSort(double[] a){
double temp;
initCreateHeap(a);
for(int i = a.length - 1; i > 0; i --){
temp = a[0];
a[0] = a[i];
a[i] = temp;
createHeap(a, i, 0);
}
}
/**
* 将数组看成完全二叉树,建立最大堆
* */
private ......
NVelocity是Java模板引擎Velocity的.Net版本。NVelocity目前官方版本为0.42。官方地址:http://nvelocity.sourceforge.net/,原作者已经申明不再对NVelocity做技术支持了,所以sourceforge上NVelocity版本一直是0.42不再有更新了。不过目前NVelocity已经有1.0的版本了,是由castleproject项目维护的。NVelocity.dll能在cast ......
package com;
import java.util.*;
public class WhatDay {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.setTime(new Date(System.currentTimeMillis()));
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
switch (dayOfWeek) {
ca ......