class Trial
{ static int i;
int getI()
{ return i;}
void setI(int value)
{ i = value;}
}
public class ttest
{ public static void main(String args[])
{ Trial t1 = new Trial();
t1.setI(10);
System.out.println(t1.getI());
Trial t2 = new Trial();
t2.setI(100);
System.out.println(t1.getI());
System.out.println(t2.getI());
}
}
Здесь испытание - это нестатический класс, а i - статическая переменная. Как я могу получить к нему доступ из статического основного метода. Это правильный путь?




Да, это правильный путь.
Когда класс не является статическим, вам нужно создать его экземпляр с помощью ключевого слова new. Как и ты
Trial t1 = new Trial();
Статическая переменная i не должна быть статической, если вы не хотите делиться ее значением между всеми объектами Trial. Если вы хотите использовать это значение (в «режиме совместного использования»), вы можете сделать это так же, как и вы. Если вы сделаете эту переменную общедоступной, вы можете просто сделать Trial.i = "your value" ...
По сути, да, но если вы объявите свои методы доступа общедоступными статическими, вы сможете получить к ним доступ через имя класса, то есть Trial.getI ();
Возможно, вы захотите, чтобы установщик и получатель были статическими, поскольку они обращаются к статической переменной. Если вы не видите исходный код, если вы оставите его нестатичным, это может сбить с толку пользователя класса.
Другие уже упоминали, что методы get и set должны быть статическими, поскольку они ссылаются на статическую переменную.
Кроме того, в java нет такой вещи, как статический класс. Также вы должны сделать эту статическую переменную частной. В этом смысле я против предложения @Daok обнародовать его.
В качестве примера это работает, но если вы опишете реальный вариант использования, то можно будет выявить некоторые ошибки проектирования.
Вам действительно нужна статическая переменная-член? Как упоминалось выше, статические переменные используются всеми экземплярами, поэтому t2.setI (x) также означает t1.getI () == x.
Если вы объявляете сеттеры и геттеры статическими, к ним можно будет получить доступ через класс, а не через экземпляры. Trial.setI (x). Теперь всем ясно, что x является общим для всех экземпляров.
Но мне кажется, что вам действительно нужна нестатическая переменная.
class Trial {
private int i;
int getI() { return i;}
void setI(int value) {i = value;}
}
При запуске основного метода вывод будет 10 10 100
В отличие от использования статической переменной, которая печатала бы 10 100 100
Вы же понимаете, что весь смысл статического i в том, что два последних вызова getI () вернут одно и то же значение, верно?