Bc23 Ответов: 2

Почему этот код не будет работать, если я не изменю строку на статическую и что такое статическая работа


public class pc{
    int kills;
    String playerName;
    boolean play;
  public pc(int killCount, String userName, boolean playing){
      kills = killCount;
 heres the code i get this message;/Playground/pc.java:14: error: non-static variable playerName cannot be referenced from a static context
    System.out.println(pc.playerName);
                         ^
1 error



     playerName = userName;
      play = playing;
      
  }
 public static void main(String[] args){
    pc game = new pc(12, "lol", false);
    System.out.println(pc.playerName);

    
    
}


}


Что я уже пробовал:

я изменил строку на статическую, и она печатается, но почему она это делает(пожалуйста, ответьте как можно проще.)

2 Ответов

Рейтинг:
2

Richard MacCutchan

Вам просто нужно использовать экземпляр класса, то есть имя объекта в качестве ссылки, а не имя класса, таким образом:

public static void main(String[] args){
    pc game = new pc(12, "lol", false);
    System.out.println(game.playerName);

Посмотрите на документацию Java по классам для полного объяснения.


Рейтинг:
0

OriginalGriff

Вы можете посмотреть здесь: Ссылка на объект Dnspy требуется для нестатического поля abso.load()[^] - он основан на C#, но статика в VB и статика и C# означают точно то же самое, и разница между методом и строкой также не имеет значения. Другой вопрос состоял в том, чтобы задать то же самое - и иметь ту же самую проблему - с "другой стороны": вам обоим нужно выяснить разницу между статическими данными / методами и данными / методами экземпляра, вот и все.