2012-05-16 6 views
0

static 메서드에서 variable에 액세스하려고합니다. 예를 들어정적 메서드에서 변수에 액세스하는 방법

:

그래서
error: cannot find symbol 
     int tempabc = abc; 
        ^
symbol: variable abc 
location: class ABC 

error: cannot find symbol 
     int tempbcd = bcd; 
        ^
symbol: variable bcd 
location: class ABC 

error: non-static method getabc() cannot be referenced from a static context 
     System.out.println(ABC.getabc()); 
          ^
3 errors 

, 어떻게 정적 메서드에서 variablevalue에 액세스 할 수 있습니다 그래서 여기

public class ABC 
{ 
    public static void ABC() 
    { 
     int abc = 123; 
     int bcd = 234; 
    } 
    public int getabc() 
    { 
     int tempabc = abc; 
     return tempabc; 
    } 
    public int getbcd() 
    { 
     int tempbcd = bcd; 
     return tempbcd; 
    } 
    public static void main(String[] args) 
    { 
     System.out.println(ABC.getabc()); 
    } 
} 

는 오류 코드입니까?

편집 :

내가 코드를 편집 한, 나는 단지 staticABC()에서 abc의 가치를 얻을 싶어요. 그러나 위의 샘플 코드를 기반으로 컴파일 할 때 오류가 표시됩니다.

샘플 코드의 프로그램 코드 스타일은 동일합니다.

import java.io.*; 
import java.util.*; 

public class ReadHighestScoreFile 
{ 
    public static void ReadHighestScoreFile() throws IOException 
    { 
     final int NAME_SIZE = 35; 
     String name = ""; 
     public static String names = 0; 
     static int hours, minutes, seconds, clicks; 

     File file = new File("Highest.txt"); 
     RandomAccessFile out = new RandomAccessFile(file, "rw"); 

     for (int i = 0; i < NAME_SIZE; i++) 
     { 
      name += out.readChar(); 
     } 

     names = name; 
     hours = out.readInt(); 
     minutes = out.readInt(); 
     seconds = out.readInt(); 
     clicks = out.readInt(); 

     System.out.println(">> Name : " + names); 
     System.out.println(">> Hour : " + hours); 
     System.out.println(">> Minute: " + minutes); 
     System.out.println(">> Second : " + seconds); 
     System.out.println(">> Click : " + clicks);  

     out.close(); 
    } 
} 

내 프로그램이 Highest.txt라는 이름의 파일에 액세스하는 데 사용됩니다

OK, 여기 내 프로그램 코드입니다. 하지만 내 메인 프로그램에 구현하려면 names, hours, minutes, secondsclicks 값을 가져와야합니다. 내 메인 프로그램에 구현하려고 할 때이 문제점을 발견했습니다.

내가이 코드를 위해 main 메서드를 만들면 별도로 처리하면 잘 작동합니다. 하지만 지금은 다른 작업을 수행하기 위해 메인 프로그램에서이 값을 가져와야합니다.

+3

당신의'ABC()'메소드는 "정적 생성자"에 대한 시도처럼 의심 스럽습니다. 실제로는별로 의미가 없습니다. –

+1

정적 변수가 아닌 함수 범위 변수에 액세스하려고합니다. – Nick

+0

먼저 읽어보십시오. http://docs.oracle.com/javase/tutorial/java/index.html –

답변

0

귀하의 게시물이 충돌하는 문이 있습니다

1. how to access variable from a static class? 

귀하의 코드가 정의 된 정적 클래스하지만 클래스 ABC와 같은 이름을 가진 정적 방법이 없습니다.

2. static method that has same name as class `ABC`. 

정적 클래스를 만드는 방법이라고 생각한다면 틀린 말입니다. 정적 클래스는 외부 클래스에 대해서만 내부 클래스가 될 수 있습니다.

3. tempabc = abc. 

정적 클래스를 정의하더라도 비 정적 변수에 액세스하는 것은 이와 같은 방식이 아닙니다. 변수도 정적 변수가 아니라면 정적 클래스의 인스턴스를 만들고 적절한 방식으로 변수 값에 액세스해야합니다. 당신이을 게시의 두 번째 부분에

답변 : 아래 정의 당신은 상기 필드를 캡슐화하는 클래스를 정의해야
: void에서 return object of HighestData

class HighestData { 
    String names; 
    int hours; 
    int minutes; 
    int seconds; 
    int clicks; 

    // define setter, getter methods or a constructor with input params for above fields. 
} 

변경 방법.

public static HighestData ReadHighestScoreFile() throws IOException { 
    // your code here 
    // ... 
    HighestData data = new HighestData(); 
    data.setName(name); 
    data.setHours(out.readInt()); 
    data.setMinutes(out.readInt()); 
    data.setSeconds(out.readInt()); 
    data.setClicks(out.readInt()); 
    // ... 
    return data; 
} 

ReadHighestScoreFile() 메소드의 호출은 이제 HighestData 오브젝트에 핸들을 추가로 처리하기 위해 사용할 수있다.

마지막으로 중요한 점은 C와 달리 로컬 정적 필드를 Java로 정의 할 수 없다는 것입니다. 그들은 수업 수준에 있어야합니다.

+0

내 잘못으로, 그것은'class'가 아니라'method'입니다. 나는 참고 도서의 예제를 따르고 있지만 책의 예제는'main' 메소드를 가지고있다. – Chin

+0

@AnonyNewbie - 게시의 두 번째 부분에 대한 내 대답은 문제를 해결하는 데 도움이되어야합니다. –

+0

한번 시도해 보겠습니다. 결과는 나중에 여기에서 설명하겠습니다. 감사. – Chin

2

abc은 메소드 로컬 변수입니다. 이 메소드 밖에서는 액세스 할 수 없습니다.

0

당신은 클래스 범위에서 선언해야합니다

public static int abc = 123; 
2

abcABC()에 대한 로컬 범위가 있습니다. 당신이 그것을 다시 원하는 경우 ABC() 대신에서 int을 반환 할 수 :

System.out.println(getABC()); 
0

시도는 문자열을 반환하는 GET 추가 변수는 클래스 변수가 아니라 메소드 변수입니다. 정적 변수를 사용하는 경우 수행중인 작업을 확인하십시오. 그것들을 사용하는 것은 종종 나쁜 생각입니다. 다음은 정적 변수에 액세스하는 방법입니다.

public static class ABC { 
    public static int someInt = 123; 
} 

public static class MainClass { 

    public static void main(String[] args) { 
    System.out.println(ABC.someInt); 
    } 
} 
0

:

public static String getABC() 
{ 
    string i = "abc"; 
    return i; 
} 

그런 다음 그 함수를 호출

public static int ABC() 
{ 
    int abc = 123; 
    return abc; 
} 

public static void main(String[] args) 
{ 
    System.out.println(ABC()); 
} 
0

정말 코드를 컴파일 해 보셨습니까? 그렇다면 코드에 많은 문제가 있음을 알지 못했을 수 있습니다.

  1. 여기에서 "int tempabc = abc;" 변수가 선언 된 메서드 외부에 표시되지 않는 다른 메서드에서 변수에 액세스하려고합니다.

  2. "int tempbcd = bcd;

귀하의 질문에 대한 대답은 정적 방법에서 비 정적 방법에 액세스 할 수 없다는 것입니다. 메인에서 액세스해야하는 메소드에 정적 인 액세스 지정자를 추가하십시오.

관련 문제