статические понятия - PullRequest
1 голос
/ 09 декабря 2008
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()); 
   } 
}

Здесь trial - это не статический класс, а i - статическая переменная. Как я могу получить доступ к этому из статического основного метода. Это правильно?

Ответы [ 5 ]

3 голосов
/ 09 декабря 2008

Да, это правильный путь.

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

Trial t1 = new Trial(); 

Статическая переменная i не должна быть статической, если вы не хотите делиться ее значением между всеми объектами Trial. Если вы хотите использовать это значение (в «режиме совместного использования»), вы можете сделать это так, как вы это сделали. Если вы сделаете эту переменную общедоступной, вы можете просто сделать Trial.i = "ваше значение" ...

2 голосов
/ 09 декабря 2008

По сути, да, но если вы объявите ваши методы доступа общедоступными, то вы сможете получить к ним доступ через имя класса, т.е.

1 голос
/ 09 декабря 2008

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

0 голосов
/ 09 декабря 2008

Вы действительно хотите статическую переменную-член? Как упоминалось выше, статические переменные являются общими для всех экземпляров, поэтому t2.setI (x) также означает t1.getI () == x.

Если вы объявляете сеттеры и геттеры статическими, они могут быть доступны через класс, а не через экземпляры. Trial.setI (х). Теперь всем ясно, что x является общим для всех экземпляров.

Но мне кажется, что вам действительно нужна нестатическая переменная.

class Trial {   
    private int i; 
    int getI() { return i;} 
    void setI(int value) {i = value;} 
} 

Когда вы запускаете main-метод, результат будет 10 10 100

В отличие от использования статической переменной, которая выводит 10 100 100

0 голосов
/ 09 декабря 2008

Другие уже упоминали, что методы get и set должны быть статическими, поскольку они ссылаются на статическую переменную.

Кроме того, в Java нет такой вещи, как статический класс . Также вы должны сделать эту статическую переменную закрытой. Так что в этом смысле я против предложения @ Daok обнародовать его.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...