2013-08-31 4 views
0

누군가 수업 수준에서 메서드를 호출하는 방법을 말해 줄 수 있습니까?메서드가 아닌 클래스 수준에서 메서드를 호출 할 수 있습니까?

아래와 같은 클래스가 있다고 가정하면 클래스 수준에서 test1Method를 호출 할 수 있습니까? 이 정확하지 않으면 나에게 이유를 알려주세요 ..

class Test2 { 

Test1 t1=new Test1(); 
t1.test1Method(); 

public void test2Method() { } 

} 
+1

"수업 수준"이란 무엇을 의미합니까? "클래스"메소드는 정적이며 클래스 자체 또는 인스턴스 ('null'포함)에서 호출 될 수 있습니다. 이유? 그것이 바로 Java가되는 방식입니다. –

+0

@Bobby : 좋아. 다음 포스트에서 그걸 따라와. 고마워. –

답변

4

아니요 메소드 호출 문이나 클래스 아래에 직접 다른 명령문을 사용할 수 없습니다. JLS Section 8 - Classes에 따른다 : 클래스

본체 멤버 (필드 및 메소드 중첩 클래스 및 인터페이스) 인스턴스 정적 초기화 및 생성자를 선언 (§8.1.6).

멤버 호출 (일부 메서드), 이니셜 라이저 또는 생성자 중 하나에서 메서드 호출을 이동해야합니다.

+0

@SotiriosDelimanolis 무엇? –

+0

@SotiriosDelimanolis. JLS 섹션에 명시된대로 멤버, 이니셜 라이저 및 생성자를 모두 가리켜 야합니다. –

3

당신은 instance block

class Test2 { 

{ 
    Test1 t1=new Test1(); 
    t1.test1Method(); 
} 

} 

인스턴스 내에서 그들을 호출 할 수 있습니다 또는 초기화 블록마다의 객체라고합니다 유형 Test2이 생성됩니다. JVM 인스턴스 블록의 내용이 처음이 클래스 Test2가로드되는 경우

class Test2 { 

    public Test2() { 
     { 
      Test1 t1=new Test1(); 
      t1.test1Method(); 
     } 
    }  

} 

또는 static initialization block

class Test2 { 

static { 
    Test1 t1=new Test1(); 
    t1.test1Method(); 
} 

} 

정적 블록이 실행 아래처럼 생성자 내에서 복사되는 것을 확인합니다.

1

test1Method 메서드의 반환 형식을 제어 할 수있는 경우 메서드와 함께 Test1 개체를 반환하고 아래와 같이 코드를 작성할 수 있습니다.

class Test2 { 

Test1 t1=new Test1().test1Method(); 

public void test2Method() { } 

} 
관련 문제