Вопросы для собеседования с конструктором Java

Вопросы для собеседования с конструктором Java

25 апреля 2022 г.

Что такое конструктор?


Конструктор — это специальный метод, определенный в классе с именем, совпадающим с именем класса. [Конструктор Java] (https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Constructor.html) подобен методу, не имеющему возвращаемого типа. Конструкторы играют наиболее важную роль в инициализации объектов, и в этой статье мы перечислили вопросы интервью с конструкторами в java. Мы также перечислили важность конструкторов в java, некоторые фрагменты кода конструктора и т. д., которые помогут вам ответить на вопросы, заданные в вашем [интервью по Java] (https://www.interviewbit.com/java-interview-questions/) из Тема конструктора.


Зачем нужны конструкторы? Объясните подробно


Предположим, у нас есть класс с именем Student. И у нас есть имя переменной экземпляра и roll_number.


```java


класс Студент {


Имя строки;


внутренний номер рулона;


Теперь, если мы создадим 1000 объектов, то JVM инициализирует эти значения своим типом по умолчанию Name = null и rollNo = 0. Идентификация этих отдельных объектов невозможна, а присвоение значений каждому из объектов увеличит объем кода, а это плохая практика программирования. . Поэтому, чтобы избежать подобных вещей, используются конструкторы. Таким образом, цель конструктора java состоит в том, чтобы инициализировать значение переменных экземпляра класса.


Какие типы конструкторов доступны в Java? Определять.


В java доступны 3 различных типа конструкторов.


  • Конструктор по умолчанию.

  • Конструктор без аргументов.

  • Параметризованный конструктор.

  • Что такое конструктор по умолчанию в java? Конструктор по умолчанию — это конструктор, созданный JVM во время выполнения, если конструктор не определен в классе. Основная задача конструктора по умолчанию — инициализировать значения экземпляров в соответствии с их типом по умолчанию.

Конструктор по умолчанию в примере Java -


класс Конструктор по умолчанию {


внутренний идентификатор;


Имя строки;


Теперь для этого класса, если мы создадим объект, то внутри JVM создаст конструктор по умолчанию и присвоит значение по умолчанию.


DefaultConstructor df= новый DefaultConstructor();


Итак, теперь, если мы напечатаем значение, мы получим -


Печать = df.id = 0.df.name = null.


  • Что такое конструктор без аргументов в Java? Конструктор без аргументов — это конструктор, который программист явно определяет для инициализации значения экземпляров.

Пример -


```java


класс NoArgConstuctor{ int a; интервал б;


//Конструктор без аргументов


Конструктор NoArg(){


а = 10;


б = 20;


  • Что такое параметризованный конструктор в Java?

Параметризованный конструктор — это конструктор, в котором конструктор принимает параметр для инициализации экземпляров.


Пример -


```java


класс ПараметризованныйКонструктор{


Имя строки;


инт возраст;


//Параметризованный конструктор


ParameterizedConstuctor (имя строки, целочисленный возраст) {


это.имя = имя;


this.age = возраст;


В приведенном выше фрагменте кода это ключевое слово их. А ключевое слово this используется для ссылки на текущий объект.


Каковы правила определения конструктора?


Для определения конструкторов необходимо соблюдать несколько правил. И это


  • Имя конструктора должно совпадать с именем класса.

  • В java не должно быть возвращаемого типа конструктора.

  • Единственные применимые модификаторы для конструкторов:

  • а. общественный

  • б. По умолчанию

  • с. защищенный

  • д. частный

  • Конструкторы могут принимать любое количество параметров.

  • Модификаторы типа - final, synchronized, static и abstract не допускаются в конструкторе.

  • Конструктор не поддерживает оператор return внутри своего тела.

  • Конструкторы могут генерировать исключения.

  • Разрешено использовать предложение throws с конструктором.

  • Конструктор не должен формировать рекурсию.

Когда мы можем использовать закрытый конструктор?


В этом случае, когда мы не хотим создавать объекты определенного класса извне, мы можем использовать конструкторы как приватные. Объявив конструкторы закрытыми, мы можем создавать объекты только внутри класса. Классы Singleton — хороший пример использования приватных конструкторов.


Каким будет модификатор доступа конструктора по умолчанию, если мы не определим его явно?


Модификатор доступа конструктора по умолчанию всегда будет таким же, как модификатор класса. Если класс публичный, то конструктор тоже будет публичным. Если класс будет приватным, то конструктор тоже будет приватным. И аналогично применимо к другому поддерживаемому модификатору доступа.


Идентифицируйте вывод приведенного ниже фрагмента кода и укажите причину.


```java


класс InterviewBit{


ИнтервьюБит(){


System.out.println("Добро пожаловать в InterviewBit");


класс ScalerAcademy расширяет InterviewBit{


СкалерАкадемия(){


System.out.println("Добро пожаловать в Scaler Academy от InterviewBit");


класс основной {


public static void main(String[] args) {


ScalerAcademy sc = new ScalerAcademy();


Приведенный выше код напечатает -


**Добро пожаловать в InterviewBit.


Добро пожаловать в Scaler Academy от InterviewBit.**


Он напечатает этот вывод, потому что если в конструкторе мы не укажем ключевое слово super() или this() в первой строке, JVM автоматически поместит это во время выполнения. JVM делает это, потому что он наследуется от другого класса, и функциональность также будет реализована в производном классе. Таким образом, присваивая экземплярам базового класса значения по умолчанию, JVM по умолчанию добавляет ключевое слово super().


Рассмотрите приведенный ниже код и укажите, является ли он действительным или недействительным. И причина ответа.


```java


класс InterviewBit{


ИнтервьюБит(){


System.out.println("Добро пожаловать в InterviewBit");


класс ScalerAcademy расширяет InterviewBit{


СкалерАкадемия(){


это();


System.out.println("Добро пожаловать в Scaler Academy от InterviewBit");


класс основной {


public static void main(String[] args) {


ScalerAcademy sc = new ScalerAcademy();


Приведенный выше код недействителен, потому что мы снова являемся одним и тем же конструктором в конструкторе Scaler Academy. Это сформирует рекурсию в конструкторе, что не допускается в конструкторе. Таким образом, это выдаст ошибку времени компиляции, говорящую о вызове рекурсивного конструктора.


Можем ли мы использовать 2 конструктора в одном классе в java?


Да, мы можем использовать любое количество конструкторов в одном классе с условием, что:


  • Параметры конструкторов должны быть разными.

  • В конструкторе не должно быть никакой рекурсии.

  • Пример. Рассмотрим эти 2 конструктора одного и того же класса InterviewBit.

```java


ИнтервьюБит(){


это("Скалер"); // Вызов параметризованного конструктора


System.out.println("Конструктор без аргументов");


InterviewBit (имя строки) {


это(); // Вызов конструктора без аргументов


System.out.println(" Конструктор с параметрами.");


Этот тип кода не допускается. Потому что это сформирует рекурсию. Конструктор без аргументов вызовет конструктор с параметрами, а конструктор с параметрами вызовет конструктор без аргументов.


Можем ли мы переопределить конструктор в java?


Нет, концепция перегрузки конструктора неприменима в java.


Может ли конструктор быть окончательным в java?


Никакой конструктор не может быть окончательным. Это связано с тем, что ключевые слова final используются для остановки переопределения метода в производном классе. Но в конструкторе концепция переопределения неприменима, поэтому нет необходимости писать ключевое слово final. Поэтому, если мы напишем ключевое слово final в конструкторе, мы получим ошибку времени компиляции, говорящую - требуется возвращаемый тип. Потому что компилятор рассматривает это как метод.


Может ли конструктор быть статическим в java?


Нет, конструктор Java не может быть статическим. Это связано с тем, что статические ключевые слова используются, когда мы хотим, чтобы член принадлежал классу, а не объекту. Но конструкторы предназначены для инициализации объектов. Таким образом, компилятор будет рассматривать это как метод. Таким образом, мы получаем ошибку: требуется тип возвращаемого значения.


Разница между super(), super и this(), this.


super() и this() — это вызовы конструктора. Он используется только для вызова конструктора родительского класса или текущего класса. Принимая во внимание, что «супер» и «это» — это ключевые слова, используемые для обозначения членов экземпляра собственного класса или базового класса.


Пример. Рассмотрим приведенный ниже код:


```java


класс InterviewBit{


String message = "Добро пожаловать в InterviewBit";


открытый класс Scaler расширяет InterviewBit


String message = "Добро пожаловать в Scaler Academy";


public void printMethod () {


// это напечатает переменную сообщения текущего класса.


System.out.println(это.сообщение);


// это напечатает переменную сообщения базового класса.


System.out.println(super.message);


public static void main(String[] args) {


Масштабатор sa = новый Масштабировщик();


sa.printMethod();


Во фрагменте кода «this.message» напечатает сообщение «Добро пожаловать в Scaler Academy», а «super.message» напечатает «Добро пожаловать в InterviewBit». Так вот как эти два ключевых слова используются для ссылки на экземпляры членов базового и производного классов.


Что такое деструкторы? У нас есть деструктор в java?


Деструкторы используются для освобождения памяти, полученной программой. Или мы можем сказать, что память, необходимая программе во время ее выполнения, деструктор освобождает эту память, так что память может быть использована другими программами. И у нас нет понятия деструктора в java. Поскольку работа по освобождению памяти обрабатывается сборщиком мусора в java.


Что такое цепочка конструкторов в java?


Когда один конструктор вызывается из другого конструктора, это можно назвать изменением конструктора. Вызов конструктора, который не требуется из других, не обязательно для одного и того же класса. Это можно сделать и для родительского класса.


Пример: рассмотрите изображение ниже.



Для приведенного выше изображения рассмотрите приведенный ниже код для инициализации объекта со значениями значений этих переменных экземпляра:


```java


класс EmployeeAddess{


внутренний пин-код;


Строковый адрес;


Строка моб№;


EmployeeAddress(int pinCode, String address, String mobNo){


this.pinCode = пин-код


этот.адрес = адрес;


this.mobNo = мобNo;


класс Сотрудники расширяет EmployeeAddress{


внутренний идентификатор;


Имя строки;


Обозначение строки;


Струнный отдел;


Сотрудник (внутренний идентификатор, имя строки, обозначение строки, отдел строки,


int pinCode, String address, String mobNo){


//Вызов конструктора базового класса для инициализации объекта.


// Это может быть цепочка конструкторов.


super(пинкод, адрес, моб№);


этот.ID = ID;


это.имя = имя;


this.обозначение = обозначение;


this.department = отдел;


открытый класс Main{


Сотрудник emp = новый Сотрудник(101, "XYX", "SDE", "Облако", 123456, "нет 150, xys, xys, ИНДИЯ", "999999999");


В приведенном выше коде мы создаем объект класса Employee с данными о сотруднике и его адресом. Класс адреса Employee наследуется классом Employee. Теперь для создания экземпляра значения объекта для адреса мы явно не присваиваем значения адреса сотрудника. Вместо этого мы используем для этого конструктор класса Employee Address. И с помощью супер(аргументов) мы формируем цепочку конструкторов для инициализации значений. Вот что такое цепочка конструкторов.


Определите вывод программы и укажите причину своего ответа.


```java


класс InterviewBit{


недействительным InterviewBit () {


System.out.println("Вопросы интервью с Java Constructor от InterviewBit");


int InterviewBit (int val) {


System.out.println(" Конструктор Java. And Value = "+val);


открытый класс Main{


InterviewBit ib1 = новый InterviewBit();


InterviewBit ib2 = новый InterviewBit();


Приведенный выше код ничего не напечатает, потому что InterviewBit() здесь не является конструктором. Ключевые слова Void и int используются, поэтому он становится методом. Поэтому мы не вызываем метод. Вот почему он ничего не напечатает. Потому что для выполнения методов нам нужно явно вызвать его у объекта.


Напишите программу Java для копирования значений объекта в новый объект с помощью конструктора.


```java


класс Прямоугольник {


внутренняя длина;


инт широта;


Прямоугольник (целая длина, целая ширина) {


это.длина = длина;


this.breadth = ширина;


//Перегружен конструктор для копирования значения старого объекта в новый объект


Прямоугольник (объект прямоугольника) {


эта.длина = объект.длина;


this.breadth = obj.breadth;


открытый класс Main{


Прямоугольник obj1 = новый прямоугольник (10, 5);


//Новый объект класса прямоугольника будет создан со значением из obj1.


Прямоугольник obj2 = новый прямоугольник (obj1);


В приведенном выше коде мы перегрузили конструктор класса прямоугольника. И этот конструктор будет обрабатывать инициализацию значения нового объекта из старого объекта, полученного в параметре.



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE