2010-08-13 4 views
3

RegEx 패턴을 정적으로 만들고 싶습니다.하지만 구문이 잘못됐다고 생각합니까?자바 정적 인스턴스 생성자?

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

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

답변

3

당신은 당신의 클래스의 정적 멤버 변수noHREF 변수를 넣어해야합니다. 당신이 당신의 질문에 작성한 코드에서

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

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

는 noHREF 변수는 그 범위 static {} 사이에 로컬 (임시) 변수를 의미한다.

2

당신은이 클래스가로드 될 때 실행되는 익명의 정적 메서드, 당신이 예상하는대로 noHREF 선언 로컬 메소드의 변수, 그리고 정적 필드

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

선언 할 때 . 정적 필드를 얻으려면, 선언문을 사용하십시오.

이렇게하면 정적 메소드에서 noHREF에 액세스 할 수 있습니다.

+0

귀하의 정보가 일반적으로 정확하지만 이것은 익명의 정적 방법이 아닌 정적 이니셜 라이저 블록입니다. 마찬가지로 인스턴스 이니셜 라이저 블록을 만들 수 있습니다 ('static'을 생략하고 중괄호를 유지하십시오). 이니셜 라이저 블록의 의도 된 목적은 클래스의 필드를 초기화/인스턴스화하는 것입니다. 특히 정확한 값을 얻기 위해 단순한 할당 이상을 요구할 때 그렇습니다. –