2011-08-25 2 views
3

나는 이것에 대해 약간 혼란스러워하고 여기에 제안 된 대답을 통해 내 브라우징을하면 내 컨텍스트에서 작동하는 즉각적인 결과를 얻을 수 없습니다.정적 컨텍스트에서 비 정적 메서드에 액세스

제 질문은 기본적입니다. 나는 이와 같은 방법을 가지고 있다고 가정 해 봅시다.

private int someFunction(int x, int y){ 
    return (x+y+5) 
} 

하지만 난 그 일에 대해 갈 것이라고 어떻게 주에서이 기능 (public static void main(String args[]))을. 전화 하시겠습니까?

을 당신은 내가 크게 것이 경우에 나를 도울 것 같아 튜토리얼이있는 경우 감사도 그

답변

8

당신이 정적 메소드 선언 할 수 있도록이 기능은, 구성원-변수에 대한 액세스를 필요로하지 않습니다.

private static int someFunction(int x, int y) { 
     ^^^^^^ 
    return (x+y+5) 
} 

이 것을 main에서 someFunction(arg1, arg2) 또는 YourClass.someFunction(arg1, arg2)을 사용하여 전화를 걸 수 있습니다.


방법이 실제로 멤버 변수 (및/또는 this 참조)에 액세스해야 할 경우이 방법은 정적 선언 할 수 없습니다.

new YourClass().someFunction(0, 1); 

또는 (인스턴스 나중에 다시해야하는 경우)

YourClass x = new YourClass(); 
x.sumFunction(0, 1); 
0
을 :이 경우에는 인스턴스를 호출하기 위해 메소드를 포함하는 클래스의을 만들 해야합니다

먼저 인스턴스를 만들어야합니다. 인스턴스 메소드 (정적이 아닌 메소드)는 정적 컨텍스트에서 정의에 의해 액세스 할 수 없습니다. 예를 들어 당신이 someFunction()main(String[] args)이 주요 방법으로 다음을 수행 포함 클래스의 MyApp 경우

그래서 :

new MyApp().someFunction(1, 2);

0

을 기본적를, 당신은 단지의 객체 [인스턴스에서 비 정적 메서드를 호출 할 수 있습니다 클래스]가 아니라 클래스 자체.

약간 혼란 스러울 때 객체와 클래스의 차이점에 대한 설명을 보려면 Sun Java 튜토리얼을 확인하십시오. 이는 매우 중요한 개념입니다!

로컬 변수를 참조하지 않는 경우 함수를 정적으로 만들거나 클래스를 로컬로 호출 할 수 있도록 클래스 인스턴스를 만들 수 있습니다.

0

someFunction 메서드가 정적이 아니므로이 메서드를 정적 컨텍스트 i : e main()에서 호출 할 수 없습니다. 1. 그래서 당신은 SomeFunction을

static private someFunction() 

2.or 주에서 개체를 만들 수 있도록()와 같은 SomeFunction을 호출 할 수 있습니다

A A = 새로 만들기를();
a.someFunction (4, 5);

1

인스턴스 메소드를 호출하려면 특정 메소드가 속한 클래스의 인스턴스가 있어야합니다. 귀하의 경우에는

,

새로운 MyClass에() 된 SomeFuncion (5,6).;