java 静态方法 的不明之处


        if (safeKeyMap(switchMap, NETDATA_PRINT)) {
            SocketMonitor.startMonitor();
        }

public class SocketMonitor {
    public static void startMonitor() {
    }

    static {
        startMonitorInternal();
    }

    private static Set<Class> monitoredClass = Sets.newConcurrentHashSet();

    private static void startMonitorInternal() {
        LogUtil.startRecord();
        //to find all class that extend java.net.Socket
        XposedBridge.hookAllConstructors(Socket.class, new SingletonXC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                Class<?> theSocketClass = param.thisObject.getClass();
                if (monitoredClass.contains(theSocketClass)) {
                    return;
                }
                synchronized (SocketMonitor.class) {
                    if (monitoredClass.contains(theSocketClass)) {
                        return;
                    }
                    monitorSocketClass(theSocketClass);
                    monitoredClass.add(theSocketClass);
                }
            }
        });
    }
    if (safeKeyMap(switchMap, NETDATA_PRINT)) {
        SocketMonitor.startMonitor();
    }

这里的if 判断调用的是startMonitor() 那么下面的那个 startMonitorInternal(); 会执行吗?两个方法名不一样啊

阅读 1.8k
2 个回答

是的,如果这是第一次引用该类的话。Java类被调用前,会调用一次静态初始化代码块。如果已经调用过了,就不会再调用。

动手试了下,这个代码感觉编译无法通过吧,如果是非静态内部类怎么拥有静态方法和属性呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题