通过反射, 我们可以修改成员变量
但是, 如何修改静态代码块?比如以下代码
/**
 *
 */
package pkg;import java.util.Scanner;public class HelloWorld { private static int bbb; static {
bbb = 2;
System.out.println("in static");
} /**
 * @param args
 */
public static void main(String[] args) {
if (args.length == 0) {
Scanner scanner = new Scanner(System.in); String tmp = null;
tmp = scanner.next();
while (!tmp.equals("exit")) {
System.out.println(tmp);
tmp = scanner.next();
}
}
} public void foo(String aaa) {
System.out.println("in foo.");
} public static void printBBB() {
System.out.println(bbb);
}
}

解决方案 »

  1.   

    我把实际问题也描述下吧sql驱动(oracle,mysql等)在加载过程中就会在静态代码块中注册自己
    我想禁止它注册
    有什么办法?
      

  2.   

    不知道你要干嘛??你知道JDK1.6有个新特性吗??
    可以动态生成新的类。 这个也许可以帮助到你。比如你上面的java文件static断先空着,根据运行时把static内填了。
    然后再编译成class
      

  3.   

    static块 不就是这个作用吗。应该没法不让它执行。
    注册也就是初始化几个成员变量,
    不怕麻烦的话,可以通过反射挨个的置空。
      

  4.   

    静态代码 就是初始化执行的啊。如果需求是这样的,可以考虑换个思路啊。sql驱动(oracle,mysql等)在加载过程中是指定对应的数据库驱动注册啊。智商有限,有点不理解 -。-||
      

  5.   


    sql驱动中的静态代码会在dirvermanage中注册自己
    所以比较麻烦
      

  6.   


    就是想让他不执行
    我都用javassist工具修改class文件了
    也不行, 方法可以改, 但是静态代码块改不了
      

  7.   


    下面是oracle驱动的静态代码块, 可以参考看看    static 
        {
            defaultDriver = null;
            try
            {
                if(defaultDriver == null)
                {
                    defaultDriver = new oracle.jdbc.OracleDriver();
                    DriverManager.registerDriver(defaultDriver);
                }
    ...
      

  8.   


    http://blog.csdn.net/hfmbook/article/details/7630498http://www.iteye.com/topic/428633 这个看第三种方法。