2015-05-18 2 views
1

Я изучаю основы java, и я не могу понять, почему я не могу использовать класс внутри основного метода. может кто-нибудь, пожалуйста, скажите мне, где мой код поступил не так?Использование нескольких классов в java?

основной класс


package Base; 
    class Game { 
     public static void main(String[] args){ 
      Data gameData = new Data(); 
      gameData.test(); 
      System.out.println(score); 
    } 
} 

package Base; 

public class Data { 
    public void test(){ 
     int score = 100; 

    } 
} 
+3

Так что вы даже не буду упоминать, что проблема? – John3136

ответ

2

Проблема с вашим кодом в том, что ваш метод main пытается получить доступ к локальной переменной класса Data. В отличие от полей и функций, локальные переменные других классов не зависят от классов на одном уровне вложенности *.

Для того, чтобы решить эту проблему, сделать score переменной членом Data, и добавить метод геттер сделать доступ к нему:

public class Data { 
    // Declaring score here makes it an instance variable 
    private int score; 
    // Giving score a getter lets others access the value, 
    // but it does not let them set the new score 
    public int getScore() { return score; } 
    // test() method can be used to set the score to a specific value 
    public void test(){ 
     score = 100; 
    } 
} 

Теперь ваш метод main может получить доступ к score из Data класса по телефону getScore(), как это:

public static void main(String[] args){ 
    Data gameData = new Data(); 
    gameData.test(); 
    System.out.println(gameData.getScore()); 
} 

* Вложенные классы могут получить доступ конечных локальных переменных о f, внутри которых создаются экземпляры.

1

Переменная score только в рамках в рамках метода test() в Data классе, он не сохраняется после вызова test() возвращается.

Вместо того, чтобы просто объявить score в test() вы можете вернуть его:

public int test() { 
    int score = 100; 
    return score; 
} 

Затем в главном вы бы хранить возвращение от вызова test():

int score = gameData.test(); 

В какой момент он будет печатать оценка, как вы хотели.

1

Например, вы можете добавить счет параметра к классу данных, как этот

package Base; 

public class Data { 
    public int score = 0; 
    public void test(){ 
     score = 100; 
    } 
} 

Тогда в классе игры:

package Base; 
    class Game { 
     public static void main(String[] args){ 
      Data gameData = new Data(); 
      gameData.test(); 
      System.out.println(gameData.score); 
    } 
} 
Смежные вопросы