@turdubekov
Студент

Почему методы не считывать данные?

Всем привет!
есть два класса:
public class Student {
    private String name;
    private String secondName;
    private int age;

    private String format = ("Меня зовут %s %s и мне %s лет");
    private String info = String.format(format,name,secondName,age);

    public void personInfo(){
        System.out.println(info);
    }

    public Student(String name, String secondName, int age) {
        this.name = name;
        this.secondName = secondName;
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {

        Student person1 = new Student("ПЕТЯ", "Сидоров", 22);
        person1.personInfo();

    }
}

Стало любопытно почему метод не считывает данные из конструктора?
И как это делается правильно?

P.s Только начал учиться пожалуйста не обливать говном)))
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
На уровне языка существует объявление полей с инициализацией, но не на уровне байткода. Компилятор переносит все операции инициализации в начало объявленного конструктора или в конструктор по умолчанию. Соответственно, ваш код после компиляции будет соответствовать такому:
public class Student {
    private String name;
    private String secondName;
    private int age;

    private String format;
    private String info;

    public void personInfo(){
        System.out.println(info);
    }

    public Student(String name, String secondName, int age) {
        this.format = ("Меня зовут %s %s и мне %s лет");
        this.info = String.format(format,name,secondName,age);

        this.name = name;
        this.secondName = secondName;
        this.age = age;
    }
}

А значит в момент выполнения String.format(format,name,secondName,age) в полях будет содержаться null.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mmmaaak
@mmmaaak
Полагаю, что значение info вычисляется до выполнения тела конструктора, вычисляй его также в конструкторе с новыми данными
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
XCritical Software Санкт-Петербург
До 370 000 ₽
MediaSoft Ульяновск
от 80 000 до 150 000 ₽
от 180 000 до 210 000 ₽