通过反射, 我们可以修改成员变量
但是, 如何修改静态代码块?比如以下代码
/**
*
*/
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);
}
}
但是, 如何修改静态代码块?比如以下代码
/**
*
*/
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);
}
}
我想禁止它注册
有什么办法?
可以动态生成新的类。 这个也许可以帮助到你。比如你上面的java文件static断先空着,根据运行时把static内填了。
然后再编译成class
注册也就是初始化几个成员变量,
不怕麻烦的话,可以通过反射挨个的置空。
sql驱动中的静态代码会在dirvermanage中注册自己
所以比较麻烦
就是想让他不执行
我都用javassist工具修改class文件了
也不行, 方法可以改, 但是静态代码块改不了
下面是oracle驱动的静态代码块, 可以参考看看 static
{
defaultDriver = null;
try
{
if(defaultDriver == null)
{
defaultDriver = new oracle.jdbc.OracleDriver();
DriverManager.registerDriver(defaultDriver);
}
...
http://blog.csdn.net/hfmbook/article/details/7630498http://www.iteye.com/topic/428633 这个看第三种方法。