日期:2014-05-20  浏览次数:20715 次

如何修改静态代码块
通过反射, 我们可以修改成员变量
但是, 如何修改静态代码块?

比如以下代码
Java code
/**
 *
 */
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);
    }
}



------解决方案--------------------
第一次主动使用一个类的时候,静态代码块肯定是要执行的。
------解决方案--------------------
不知道你要干嘛??

你知道JDK1.6有个新特性吗??
可以动态生成新的类。 这个也许可以帮助到你。

比如你上面的java文件static断先空着,根据运行时把static内填了。
然后再编译成class
------解决方案--------------------
static块 不就是这个作用吗。应该没法不让它执行。
注册也就是初始化几个成员变量,
不怕麻烦的话,可以通过反射挨个的置空。
------解决方案--------------------
静态代码 就是初始化执行的啊。如果需求是这样的,可以考虑换个思路啊。

sql驱动(oracle,mysql等)在加载过程中是指定对应的数据库驱动注册啊。

智商有限,有点不理解 -。-||
------解决方案--------------------
想在加载类前改写静态代码块吗,关注下先
------解决方案--------------------
探讨

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