Sl9v9J Ответов: 1

Ява. Цепочка конструкторов. Почему я должен инициализировать параметр в этом случае()


I have a Java sample presented below. And I have a question: why should I initialize the third parameter in this(name, sal, "Gurgaon"); in the third constructor public Employee1(String name, int sal) ? I mean why i can't put "addr" instead of initializing the third parameter--> this(name, sal, addr); ?


public class Employee1 {
    public String name;
    public int salary;
    public String address;

    //default constructor of the class
    public Employee1()
    {
        //this will call the constructor with String param
        this("Chaitanya");
        System.out.println("Default");
    }

    public Employee1(String name)
    {
        //call the constructor with (String, int) param
        this(name, 120035);
        System.out.println(name);
    }
    public Employee1(String name, int sal)
    {
        //call the constructor with (String, int, String) param
        this(name, sal, "Gurgaon");
        System.out.println(name + " " + sal);
    }
    public Employee1(String name, int sal, String addr)
    {
        this.name=name;
        this.salary=sal;
        this.address=addr;
        System.out.println(name + " "+ sal + " " + addr);
    }

    public static void main(String[] args)
    {
        Employee1 obj = new Employee1();
    }
}


Что я уже пробовал:

Я новичок в Java. И я погуглил, но не смог найти ответа.

1 Ответов

Рейтинг:
8

Mohibur Rashid

Прежде всего, используйте отладчик, Java предлагает хороший вариант для отладки.
Если вы используете какие-либо инструменты редактирования, такие как eclipse или другие, есть поддержка отладки. Если вы хотите изучить внутренний инструмент отладки java, который используется этими приложениями, взгляните на jdb.
С помощью инструмента отладки вы можете изучить поведение каждой строки и наблюдать за результатом.

Я добавил некоторую отладочную информацию, чтобы вы поняли; запустите код, пройдите один за другим и посмотрите результат.

public class Employee1 {
  public String name;
  public int salary;
  public String address;

  //default constructor of the class
  public Employee1()
  {
      System.out.println("0 arguments");
      this("Chaitanya");
      System.out.println("Default");
  }

  public Employee1(String name)
  {
      //call the constructor with (String, int) param
      System.out.println("1 arguments");
      this(name, 120035);
      System.out.println(name);
  }
  public Employee1(String name, int sal)
  {
    System.out.println("2 arguments");
      //call the constructor with (String, int, String) param
      this(name, sal, "Gurgaon");
      System.out.println(name + " " + sal);
  }
  public Employee1(String name, int sal, String addr)
  {
      System.out.println("3 arguments");
      this.name=name;
      this.salary=sal;
      this.address=addr;
      System.out.println(name + " "+ sal + " " + addr);
  }

  public static void main(String[] args)
  {
      Employee1 obj = new Employee1();
  }
}


Несколько других примеров создания объекта на основе вашего текущего класса
obj = new Employee1("Navin"); // you are giving a name and your constructor is setting up rest of the default values
obj = new Employee1("Navin", 3000); // name and salary, others are default
obj = new Employee1("Navin", 3000, "Australia"); // name, salary and location; no default value


На ваш вопрос
Цитата:
в третьем конструкторе public Employee1(String name, int sal) ? Я имею в виду, почему я не могу поставить "addr" вместо инициализации третьего параметра - > this(name, sal, addr); ?


Это предназначено для целей обучения. Как только вы поймете смысл этого, вам больше не придется иметь дело именно с этим способом.