Java静态实例创建者?

时间:2010-08-13 15:23:34

标签: java static

我想静态创建一个RegEx模式,但我认为我的语法错误了?

static {
  Pattern noHREF = Pattern.compile("<a.+?>", Pattern.CASE_INSENSITIVE);
}

 public static String getStringWithHREFsRemoved(String html) {
    Matcher m = noHREF.matcher(html);
etc.....

2 个答案:

答案 0 :(得分:3)

您需要将noHREF变量作为您班级的静态成员变量

static Pattern noHREF = Pattern.compile("<a.+?>", Pattern.CASE_INSENSITIVE);

public static String getStringWithHREFsRemoved(String html) {
    Matcher m = noHREF.matcher(html);
    // ...

在您在问题中编写的代码中,noHREF变量意味着一个本地(临时)变量,其范围介于static {}之间。

答案 1 :(得分:2)

宣布

static {
   Pattern noHREF = Pattern.compile("<a.+?>", Pattern.CASE_INSENSITIVE);
}

这是一个匿名静态方法,在加载类时执行,而noHREF声明是该方法中的局部变量,而不是您所期望的静态字段。要获取静态字段,请使用声明

static Pattern noHREF = Pattern.compile("<a.+?>", Pattern.CASE_INSENSITIVE);

这将允许您从静态方法访问noHREF。