没有初始化的Java默认构造函数
我有一个类与下面的类有所有的静态方法。因此,该类在其他类中使用时未初始化。在调用该类的任何静态方法之前,我必须检查一个条件。即使我添加一个默认构造函数,它也不会被调用。有人可以建议有解决方案而不用在所有用途中实例化这个类?它需要一个默认的构造函数可能是一个简单的其他解决方案。没有初始化的Java默认构造函数
我需要在拨打电话前每次检查网络连接。静态初始化程序仅在加载时第一次被调用。
public class ABCServerUtil {
public static boolean checkServer() {...bla...bla...}
}
我需要一些像下面这段代码被调用和退出。
public ABCServerUtil(){
if(!isNetworkOnline())
return;
}
使用静态初始化块
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
}
}
好的..在OP的编辑之后,此答案是*错误*。 – TheLostMind 2015-03-02 08:57:10
@TheLostMind我没有看到编辑过的问题? – 2015-03-02 08:58:52
在你发布你的答案前5分钟被编辑.. :) – TheLostMind 2015-03-02 09:00:29
您可以使用静态初始化程序。
static {
// code here
}
它将在第一次访问类的任何属性(静态或其他)的方法之前运行。
如果每次需要检查条件其中一个静态方法被调用,您没有多少选择,只能做你正在做的事情:调用一个方法在开头执行检查每种方法。
如果你只需要检查的条件一次类时最初加载/初始化,您可以使用static initializer:
public class ABCServerUtil {
static {
// Code here runs when the class is loaded
}
// ...
}
*如果您需要在每次调用某个静态方法时检查条件,*他可以使用代理来调用他的所有方法:P – TheLostMind 2015-03-02 08:54:23
**因此,该类在其他类中使用时未初始化。** - 你怎么知道它没有得到*初始化*?你没有任何静态初始化块。请详细解释发生了什么,什么不是。 :) – TheLostMind 2015-03-02 08:44:14
你所描述的不是一个对象,因此不需要构造函数。您正在定义静态行为,因此需要对其进行编程。 – Jared 2015-03-02 08:46:44