2012-05-16 2 views
0

Я хочу получить доступ к variable с помощью метода static.Как получить доступ к переменной из статического метода

Например:

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()); 
    } 
} 

Так вот код ошибки:

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 

Итак, как я могу получить доступ к value в variable от статического метода?

EDIT:

Я редактировал код, и я просто хочу, чтобы получить значение abc от staticABC(). Но, основываясь на приведенном выше примере кода, при компиляции отображается ошибка.

Образец кода имеет тот же стиль программного кода.

ОК, вот мой код программы:

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. Но мне нужно получить значения names, hours, minutes, seconds и clicks для выполнения моей основной программы. Я нашел эту проблему, когда попытался реализовать ее в своей основной программе.

Если я делаю это отдельно, то есть я создаю метод 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. 

Даже если вы определяете статический класс, доступ к нестационарным переменным не таким образом. Если переменная тоже не является статичной, вам необходимо создать экземпляр статического класса и соответствующим образом получить доступ к значению переменной.

Ответ на вторую часть вашего размещения:
Вы должны определить класс для инкапсуляции указанных полей, как указано ниже:

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. 
} 

Изменить метод из void в return object of HighestData.

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, вы не можете определить local статические поля в Java. Они должны быть на уровне класса.

+0

Моя ошибка, это 'метод', а не' class'. Я следую примеру из справочника, но пример книги имеет «главный» метод. – Chin

+0

@AnonyNewbie - Мой ответ на вторую часть публикации должен помочь решить вашу проблему. –

+0

Я попробую. Любой результат, который я буду комментировать здесь позже. Благодарю. – Chin

2

abc - локальная переменная метода. Доступ к этому доступу не возможен.

0

Вы должны объявить его в область видимости класса:

public static int abc = 123; 
2

abc имеет локальную область действия в отношении ABC(). Если вы хотите его обратно, вы могли бы возвращать int из ABC() вместо:

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

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

Попробуйте добавить GET, который возвращает строку:

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

Затем вызовите эту функцию:

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

Ваша переменная не является переменной класса, а переменной метода. Убедитесь, что вы знаете, что делаете, если используете статическую переменную. Часто их плохо использовать. Вот как вы можете получить доступ к статической переменной.

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

Вы действительно пробовали компилировать код? Если да, то вы, возможно, не заметили, что в коде много проблем.

  1. Здесь «int tempabc = abc;» вы пытаетесь получить доступ к переменной в другом методе, который не отображается вне метода, который был объявлен

  2. То же самое произошло здесь, «int tempbcd = bcd;»

3. Ответ на ваш вопрос: вы не можете получить доступ к нестационарному методу из статического метода. Добавьте спецификатор доступа static в метод, который вам нужен для доступа из основного.