Как получить приватную переменную в методе main, которая была установлена ​​другим методом? - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь изменить приватные переменные в методе, а затем получить к ним доступ с помощью метода-получателя в методе main (как показано ниже), но когда я получаю приватную переменную в методе main, это всегда 0. Как я могу установить закрытую переменную в методе, отличном от основного, но все же иметь возможность доступа к этой переменной в методе main?

public class Example {

    private int testNumber;

    public static void main(String[] args) {
        Example tester = new Example();
        System.out.println(tester.getTestNumber());
        tester.TheTestExample();
        System.out.println(tester.getTestNumber());
    }

    public int getTestNumber(){
        return testNumber;
    }

    public void setTestNumber(int x){
        this.testNumber = x;
    }

    public void TheTestExample(){
        Example MyTester = new Example();
        MyTester.setTestNumber(4);
        System.out.println(MyTester.getTestNumber());
    }
}

Ответы [ 3 ]

1 голос
/ 23 января 2020

Существует два отдельных экземпляра Example, созданных вашим приложением. Один из них создается main, а другой - TheTestExample

. Похоже, вы спрашиваете, как main может получить ссылку на экземпляр Example в переменной MyTester в вашем версия метода TheTestExample.

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

    tester = tester.theTestExample();
    System.out.println(tester.getTestNumber());

public Example theTestExample(){
    Example myTester = new Example();
    MyTester.setTestNumber(4);
    System.out.println(MyTester.getTestNumber());
    return myTester;
}

Кстати:

  • MyTester не является частной переменной. Это локальная переменная. Локальные переменные не имеют / не могут иметь модификатор доступа. Называть их «частными» технически некорректно и сбивает с толку. (Для других, и, вероятно, также и для вас.)

  • MyTester и TheTestExample являются вопиющими нарушениями правил стиля Java. Имена методов и переменных всегда должны начинаться с буквы в нижнем регистре .

0 голосов
/ 23 января 2020
public class Example {
private int testNumber;

public static void main(String[] args) {
    Example tester = new Example();
    System.out.println(tester.getTestNumber()); //prints "0"
    tester.TheTestExample(); //print "4"
    System.out.println(tester.getTestNumber()); //print "0" Why? ;) See the method TheTestExample -> print4() for now it is a better name
}

public int getTestNumber(){
    return testNumber;
}

public void setTestNumber(int x){
    this.testNumber = x;
}

public void TheTestExample(){
    Example MyTester = new Example(); //local instance, @Answer we lost  this object. If you want to change testNumber here. If you want to have access to this object please return and use in main method 
    MyTester.setTestNumber(4); //setFour
    System.out.println(MyTester.getTestNumber()); //result in line 8
}

}

0 голосов
/ 23 января 2020

В вашем коде вы создаете 2 объекта для класса Test, один внутри метода main, а другой - в методе TheTestExample (). И вы устанавливаете значение 4 в стороне TheTestExample () для закрытой переменной.

Если вы хотите напечатать значение, которое было установлено в TheTestExample () в main (), вы можете вернуть вновь установленное значение из этого метода , publi c class Example {

private int testNumber;

public static void main(String[] args) {
    Example tester = new Example();
    System.out.println(tester.getTestNumber());


    **System.out.println(tester.TheTestExample());** // it prints the value return from the method
}

public int getTestNumber(){
    return testNumber;
}

public void setTestNumber(int x){
    this.testNumber = x;
}

public int TheTestExample(){
    Example MyTester = new Example();
    MyTester.setTestNumber(4);
    System.out.println(MyTester.getTestNumber());
    **return MyTester.getTestNumber();**
}

}

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