JavaRush /Курсы /Модуль 2. Java Core /Порядок инициализации переменных

Порядок инициализации переменных

Модуль 2. Java Core
8 уровень , 2 лекция
Открыта

— Привет, Амиго! Билаабо сегодня будет рассказывать о порядке инициализации переменных.

Представь, что ты видишь код. Какие значения получат переменные?

Код
class Cat
{
 public int a = 5;
 public int b = a + 1;
 public int c = a * b;
}
Код
class Cat
{
 public int a = getSum();
 public int b = getSum() - a;
 public int c = getSum() - a - b;

 public int getSum()
 {
  return a + b + c;
 }
}

— А разве так можно?

— Конечно. Порядок объявления между методами и полями класса неважен.

Класс загружается сверху вниз, поэтому важно, чтобы поле класса обращалось только к уже загруженным другим полям. В примере поле b может обращаться к a, но ничего не знает о c.

— И что же будет?

— Когда переменные создаются, они получают дефолтовые значения (значения по умолчанию).

Код Что происходит на самом деле
class Cat
{
 public int a = 5;
 public int b = a + 1;
 public int c = a * b;
}
class Cat
{
 public int a = 0;
 public int b = 0;
 public int c = 0;

 public Cat() { super();

 a = 5;
 b = a + 1; //5+1 = 6
 c = a * b; //5*6 = 30
 }
}
class Cat
{
 public int a = getSum();
 public int b = getSum() - a;
 public int c = getSum() - a - b;

 public int getSum()
 {
  return a + b + c;
 }
}
class Cat
{
 public int a = 0;
 public int b = 0;
 public int c = 0;

 public Cat() { super();

  a = getSum(); //(a+b+c)=0
  b = getSum() - a; //(a+b+c)-a=b=0
  c = getSum() - a - b; //(a+b+c)-a-b=c=0
 }

 public int getSum()
 {
  return a + b + c;
 }
}

— Ух ты! Оказывается, это так просто. Спасибо Билаабо, ты – настоящий друг!

— Ура! У Билаабо появился друг!

Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Татьяна Уровень 48 Expert
30 мая 2023
В задаче "Статики и котики" если делать строго по т/з - решение получается неправильным. "2. В статическом блоке создать объект типа Cat и присвоить его переменной cat (не забудь инициализировать поле name)." Более правильно было бы написать: "2. В классе Solution создать статический объект типа Cat и присвоить его переменной cat. 3. В статическом блоке вывести имя созданного кота на экран (не забудь инициализировать поле name)."