Как получить доступ к «внутренней переменной» из объекта в Java? - PullRequest
0 голосов
/ 29 апреля 2018

Мне было интересно, как я могу получить доступ к внутренней переменной из объекта в Java (переменная, объявленная после создания). Я экспериментировал со следующим кодом:

public class test1 {
    public test1(int bigNumber, int smallNumber) {

        int result = bigNumber - smallNumber;

    }
}

class invoke {

    public static void main(String[] args) {

        test1 t1 = new test1(10, 5);
        System.out.println(t1.result); //this was an invalid statement

    }

}

В коде выписка

System.out.println(t1.result);

недействительно. Почему я не могу получить внутреннее состояние объекта? Есть ли способ сделать это?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

result не определено в области действия экземпляра test1.
Он определяется в области действия конструктора test1.
Чтобы иметь возможность доступа к переменной внутри метода или конструктора, это должно быть определено как поле, и вы также должны предоставить метод для доступа к нему (чтобы оно могло быть private полем), например:

public class test1 {
    private int result;
    public test1(int bigNumber, int smallNumber) {
       result = bigNumber - smallNumber;
    }
    public int getResult(){  
      return result;
    }
}

Вы можете узнать доступ к result следующим образом:

test1 t1 = new test1(10, 5);
System.out.println(t1.getResult());

Обратите внимание, что test1 не соблюдает соглашения о присвоении имен Java. Имена классов должны начинаться с заглавной буквы: Test1 лучше.

0 голосов
/ 29 апреля 2018
System.out.println(t1.result);

Указанное выше недопустимо, поскольку переменная result не является переменной экземпляра, ее локальная переменная объявлена ​​внутри конструктора класса test1, а ее область действия ограничена конструктором, к ней нельзя получить доступ за пределами конструктора.

Чтобы получить доступ к переменной результата, сделайте ее переменной экземпляра.

0 голосов
/ 29 апреля 2018

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

Пример:

class test1 {
    int result;
    public test1(int bigNumber, int smallNumber) {
        result = bigNumber - smallNumber;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...