Установить и получить статическую переменную из двух разных классов в Java - PullRequest
5 голосов
/ 24 ноября 2011

Допустим, у меня есть 3 класса: A, Data и B

Я передаю переменную из класса A, которая устанавливает переданную переменную в частную переменную в классе Data.

Затем в классе B я хочу вызвать конкретную переменную, которая была изменена.

Так я и делаю

Data data = new Data();
data.getVariable();

Затем он вернет ноль, поскольку в классе Data я инициализирую переменные в ноль (например: int v;), и я думаю, что класс B инициализирует новый класс и сбрасывает значения по умолчанию, но Я не знаю, как это исправить.

Я знаю, что переменная устанавливается правильно, потому что в классе A, если я сделаю data.getVariable(), она напечатает установленную переменную.

Класс A:

Data data = new Data();
int d = 1;
data.setVariable(d);

Класс Data:

private static int b;

public void setVariable(int s)
{
    b = s;
}

public int getVariable()
{
    return b;
}

Класс B:

Data data = new Data();
private int v; 

v = data.getVariable();
System.out.println(v);

Это выведет 0 вместо фактического значения

Ответы [ 2 ]

11 голосов
/ 24 ноября 2011

Когда вы создаете экземпляр объекта Data в классе A и создаете экземпляр другого объекта Data в классе B, это два разных экземпляра класса Data. Они оба создают d в 0 по умолчанию. Затем вы вызываете setVariable для экземпляра в классе A и передаете ему значение 1; но экземпляр в классе B остается в 0. Чтобы изменить значение экземпляра в классе B, вам необходимо вызвать setVariable для экземпляра в классе B.

То, что вы ищете, это статический член. Статические члены одинаковы для всех экземпляров одного и того же класса. Просто поместите ключевое слово static перед методом (ами) или полями, которые вы хотите использовать. Доступ к статическим элементам и полям обычно осуществляется с использованием имени класса, в котором они объявлены (т.е. MyClass.doMethod()). Например:

Данные класса (обновлено):

private static int b;

public static void setVariable(int s)
{
    b = s;
}

public static int getVariable()
{
    return b;
}

Класс A :

Data.setVariable(d);

Класс B :

v = Data.getVariable();
System.out.println(v);
1 голос
/ 24 ноября 2011

Редактирование - мое первое предложение состояло в том, чтобы использовать static для переменной b, и автор изменил свой вопрос, добавив это предложение.

Это исправляет то, что вы пытаетесь сделать. Я пишу пример в коде, который компилирует:

    public class Demo {
        public static void main(String[] args) {
            A a = new A();
            B b = new B();
            a.doWhatever();
            b.doSomethingElse();
        }
    }
    class Data {
        private static int b;

        public void setVariable(int s)
        {
            b = s;
        }

        public int getVariable()
        {
            return b;
        }
    }
    class A {
        public void doWhatever() {
            Data data = new Data();
            int d = 1;
            data.setVariable(d);
        }
    }

    class B {
        Data data = new Data();
        private int v; 
        public void doSomethingElse() {
            v = data.getVariable();
            System.out.println(v);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...