2015-03-02 120 views
0

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

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

 public class ABCServerUtil { 

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


     } 

我需要一些像下面这段代码被调用和退出。

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

**因此,该类在其他类中使用时未初始化。** - 你怎么知道它没有得到*初始化*?你没有任何静态初始化块。请详细解释发生了什么,什么不是。 :) – TheLostMind 2015-03-02 08:44:14

+0

你所描述的不是一个对象,因此不需要构造函数。您正在定义静态行为,因此需要对其进行编程。 – Jared 2015-03-02 08:46:44

回答

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 
    } 
} 
+0

好的..在OP的编辑之后,此答案是*错误*。 – TheLostMind 2015-03-02 08:57:10

+0

@TheLostMind我没有看到编辑过的问题? – 2015-03-02 08:58:52

+0

在你发布你的答案前5分钟被编辑.. :) – TheLostMind 2015-03-02 09:00:29

0

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

static { 
    // code here 
} 

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

2

如果每次需要检查条件其中一个静态方法被调用,您没有多少选择,只能做你正在做的事情:调用一个方法在开头执行检查每种方法。

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

public class ABCServerUtil { 

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

    // ... 
} 
+0

*如果您需要在每次调用某个静态方法时检查条件,*他可以使用代理来调用他的所有方法:P – TheLostMind 2015-03-02 08:54:23

0

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

boolean val=ABCServerUtil.checkServer(); 

一些教程给出here

0

既然有已经5个回答说同样的事情,他们都不是你在做什么时后:

的工具像Byte Buddy听起来像你所需要的。

相关问题