В чем разница между экземпляром и классом (static) переменные в Java [закрыт]

название этого вопроса на самом деле является предыдущим экзаменационным вопросом, и я ищу разъяснение / ответ на него.

обратите внимание, что я изучаю Java и знакомлюсь с его синтаксисом.

Я понимаю, что этот вопрос, возможно, был задан раньше, и если да, то кто-нибудь может показать мне, где я могу получить доступ к вопросу, если это возможно? Также, Пожалуйста, примите мои извинения, если это так. Чтобы показать, что я исследовал эту область, мой собственный понимание заключается в том, что переменные экземпляра принадлежат объектам / экземплярам определенного класса (шаблона) и могут быть изменены (мутированы) внутри этого экземпляра / объекта по мере необходимости.

переменная класса-это переменная, которая имеет только одну копию и может быть доступна, но не изменена (мутирована?), но доступен для всех классов по мере необходимости?

Я на правильном пути?

кроме того, что именно делает "статический"? Является ли экземпляр класса только статическим если он находится в основном экземпляре класса?

большое спасибо.

3 ответов


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

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

вот полезный пример:

переменная экземпляра одна на объект: каждый объект имеет свою собственную копию переменная экземпляра.

public class Test{

   int x = 5;

 }

Test t1 = new Test();   
Test t2 = new Test();

оба t1 и t2 будут иметь свою собственную копию x.

статическая переменная-одна на класс: каждый объект этого класса имеет одну и ту же статическую переменную.

public class Test{

   public static int x = 5;

 }

Test t1 = new Test();   
Test t2 = new Test();

оба t1 и t2 будут иметь одинаковый x.


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

public class Foo
{
    public int instanceVariable;
    public static int staticVariable;
}

Foo instance1 = new Foo();
Foo instance2 = new Foo();
instance1.staticVariable = 1;
instance1.instanceVariable = 2;
instance2.instanceVariable = 3;

instance1.staticVariable == 1 // true
instance2.staticVariable == 1 // true

instance1.instanceVariable == 2 //true
instance2.instanceVariable == 3 //true

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