没有初始化的Java默认构造函数

时间:2015-03-02 08:42:10

标签: java constructor default super

我有一个类似于下面的类,所有静态方法。因此,在其他类中使用时,类未初始化。我必须在调用此类中的任何静态方法之前检查条件。即使我添加了默认构造函数,它也不会被调用。有人可以建议想要解决方案,而不是在所有用法中实例化这个类吗?它需要一个默认的构造函数可能是一个简单的其他解决方案。

我需要在拨打电话之前每次检查网络连接。静态初始化程序仅在加载时第一次被调用。

        public class ABCServerUtil {

        public static boolean checkServer() {...bla...bla...}


        }

我需要一些像下面的代码来调用并退出。

        public ABCServerUtil(){
        if(!isNetworkOnline())
        return;
        }

6 个答案:

答案 0 :(得分:2)

如果您需要检查条件每次调用一个静态方法,那么您没有太多选择,只能做您正在做的事情:调用方法进行检查在每个方法的开头。

如果您只需要在最初加载/初始化班级时检查条件一次,您可以使用static initializer

public class ABCServerUtil {

    static {
        // Code here runs when the class is loaded
    }

    // ...
}

答案 1 :(得分:1)

使用静态初始化块

static {
    //whatever code for initialization
}
  • 一个类可以有任意数量的静态初始化块
  • 它们可以出现在课堂主体的任何地方
  • 静态初始化块按它们在源代码中出现的顺序调用。

每次调用

方法时都应该调用
public class Test {

    public static void checkServer() {
        if (!checkNetwork()) {
            return;
        }
    }

    public static void checkClient() {
        if (!checkNetwork()) {
            return;
        }
    }

    private static boolean checkNetwork() {
        return true; // or false depending on network condition
    }
}

答案 2 :(得分:0)

您可以使用静态初始化程序。

static {
    // code here
}

它将在首次访问类的任何属性方法(静态或其他方法)之前运行。

答案 3 :(得分:0)

你可以直接调用类名这样的静态方法,

 boolean val=ABCServerUtil.checkServer();

给出了一些教程here

答案 4 :(得分:0)

因为已经有5个答案说同样的事情,但它们似乎都不是你所追求的:

Byte Buddy这样的工具听起来就像你需要的那样。

答案 5 :(得分:-1)

我认为这是您的解决方案:Static initializer in Java

在实践中,您需要在第一次加载类时执行一段代码。