Что именно означает “статический” при объявлении ”глобальных" переменных в Java?

StackOverflow https://stackoverflow.com/questions/3415781

Вопрос

Я много раз сталкивался с этой проблемой, и я никогда не удосуживался узнать, почему это происходит, и узнать, что на самом деле означает "статический".Я просто применил изменение, предложенное Eclipse, и двинулся дальше.

public class Member {

 // Global Variables
 int iNumVertices;
 int iNumEdges;

 public static void main(String[] args) {

  // do stuff

  iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices

  // do more stuff

 } // main end 
}

Итак , eclipse велит мне делать static int iNumVertices; и я не уверен, почему.Итак, что же такое "static", как оно используется, какова цель использования "static" и почему это вызывает у меня эту проблему?

Это было полезно?

Решение

Вот ваш пример:

public class Member {

    // Global Variables
    int iNumVertices;
    int iNumEdges;

    public static void main(String[] args) {

        // do stuff

        iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices

    }
}

Метод main это статический метод, связанный с классом. Это не связано с экземпляром Member, поэтому он не может получить доступ к переменным, которые связаны с экземпляром Member. Отказ Решение этого нет сделать эти поля статическими. Вместо этого вам нужно создать экземпляр Member с использованием new ключевое слово.

Вот модифицированная версия:

public class Member {
    // Fields
    private int iNumVertices;
    private int iNumEdges;

    public Member(){
        // init the class
    }

    public static void main(String[] args) {
        Member member = new Member();
        member.iNumVertices = 0;
        // do more stuff
    }
}

Познакомьтесь с созданием глобальной статики - это указание вам, что вы должны тщательно подумать о том, как вы что-то разрабатываете. Это не всегда Неправильно, но это должно сказать вам подумать о том, что вы делаете.

Другие советы

статический Переменные - это те, которые передаются на все объекты класса. Здесь, в вашем примере для каждого объекта Член Вы создаете, вы получите объекты, которые имеют свои собственные интенсивность значения. Когда вы используете статический с переменной, есть только одна вариабельная совмещена для каждого объекта Член. статический Методы работают так же - они разделяют все объекты.

С статический Переменные / методы распространены для всех объектов, необходимо не сделать объект класса для доступа к этим переменным / методам.

Нестатические переменные, такие как интенсивность принадлежат к объекту класса. Их нельзя доступ без создания объекта. Поэтому, когда вы получаете доступ к нестатической переменной из статического контекста (здесь основной метод), то Java не будет знать, какой объект интенсивность Вы пытаетесь получить доступ. Отсюда ошибка.

Либо сделать интенсивность статический или обратитесь к нему, создавая объект члена

Member m = new Member();
m.iNumVertices = 0;
learn what "static" actually means

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

Вот пример кода:

public class Car{

    private int speed;

    public Car(int speed){
        this.speed = speed;
    }

}

Таким образом, вы можете сделать это при создании нового экземпляра:

Car car = new Car(100);

И каждый раз, когда вы создаете экземпляр автомобиля, он будет иметь скорость 100, тем самым избегая статической декларации private static int speed = 100;

Статические переменные - это переменные классов. Будет единственная копия этой переменной доступной для всех экземпляров класса, и они поделится этой переменной. Статические элементы также могут быть использованы без ссылки на конкретный экземпляр класса.

Подробнее здесь:

http://download.orcle.com/javase/tutorial/java/javaoo/classvars.html.

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

Статические методы могут получить доступ только к статическим переменным. В классе есть два вида переменных. Одним из являются статические переменные (также переменные классов), а другие являются переменной экземпляра. Только одна копия статической переменной существует в памяти, но переменные экземпляра будут созданы для каждого объекта. Таким образом, для статических переменных все объекты доступа к одной и той же переменной, а любые изменения, выполненные одним объектом, будут отражены на других объектах. Вопрос вот почему эти методы должны быть статичными для доступа к статическим переменным. Когда вы делаете метод Static, вы можете получить доступ к способу без экземпляров объектов этого класса. Таким образом, если этот метод может получить доступ к переменным экземпляра, то для каких переменных объекта он должен вносить изменения? Другой путь возможен, т. Е. Нестатические методы могут получить доступ к статическим переменным.

Каждая переменная класса (переменная, объявленная внутри тела класса и вне тел метода), используемая в статическом методе, также должна быть объявлена статической.

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

Статические переменные являются общими для всех экземпляров класса.

ПРИМЕЧАНИЕ. Как уже говорилось, прежде всего это являются классовые переменные, т.е. разделяют все экземпляры.

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

Для получения дополнительной информации относятся:http://download.orcle.com/javase/tutorial/java/javaoo/classvars.html.

http://www.roseindia.net/java/beginners/staticVariable.shtml.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top