JavaRush /Java блогы /Random-KK /Кофе-брейк №123. Java конструкторы - техникалық сұхбат сұ...

Кофе-брейк №123. Java конструкторы - техникалық сұхбат сұрақтары мен жауаптары

Топта жарияланған
Дереккөз: Hackenoon

Конструктор дегеніміз не?

Конструктор – класс атымен бірдей атаумен класста анықталған арнайы әдіс. Java конструкторы қайтару түрі жоқ әдіс сияқты. Кофе-брейк №123.  Java конструкторы - техникалық сұхбат сұрақтары мен жауаптары - 1Конструкторлар нысандарды инициализациялауда ең маңызды рөл атқарады және осы мақалада біз Java конструкторларын қамтитын сұхбат сұрақтарының үлгісін тізімдейміз. Сіз сондай-ақ Java конструкторларының маңыздылығы туралы білесіз, сұхбатта Java конструкторлары туралы сұрақтарға жауап беруге көмектесетін code мысалдарын және басқа маңызды мәліметтерді көресіз.

Конструкторлар не үшін қажет? Егжей-тегжейлі түсіндіріңіз

Бізде Студент атты сынып бар делік . Бізде даналық айнымалы атауы және roll_number бар .
class Student{
String name;
int rollNo;
}
Енді, егер біз 1000 нысан жасасақ, JVM бұл мәндерді Name = null және rollNo = 0 әдепкі түрімен инициализациялайды . Бұл жеке нысандарды анықтау мүмкін емес, ал an objectілердің әрқайсысына мәндерді тағайындау нашар бағдарламалау тәжірибесі болып саналатын code көлемін арттырады. Сондықтан мұны болдырмау үшін конструкторлар қолданылады. Яғни, Java-дағы конструктордың мақсаты класс данасы айнымалыларының мәнін инициализациялау болып табылады.

Java тілінде конструкторлардың қандай түрлері бар?

Java тілінде конструкторлардың үш түрі бар:
  • Әдепкі конструктор
  • Аргументсіз конструктор
  • Параметрленген конструктор

Java тіліндегі әдепкі конструктор дегеніміз не?

Әдепкі конструктор – сыныпта конструктор анықталмаған болса, орындалу уақытында JVM арқылы жасалған конструктор. Әдепкі конструктордың негізгі жұмысы әдепкі түріне сәйкес даналардың мәндерін инициализациялау болып табылады. Java тіліндегі әдепкі конструктор мысалы:
class DefaultConstructor{
int id;
String name;
}
Енді осы сынып үшін, егер біз an object жасасақ, JVM ішінде әдепкі мән берілген әдепкі конструктор болады.
DefaultConstructor df= new DefaultConstructor();
Енді мәнді басып шығарсақ, біз аламыз:
Print = df.id = 0.df.name = null.

Аргументсіз конструктор дегеніміз не?

Аргументсіз конструктор - даналардың мәнін инициализациялау үшін анық анықталуы мүмкін конструктор. Мысалы:
class NoArgConstuctor{ int a; int b;

//No Argument Constructor
NoArgConstuctor(){
a = 10;
b = 20;
}

}

Параметрленген конструктор дегеніміз не?

Параметрленген конструктор - даналарды инициализациялау үшін параметрді қабылдайтын конструктор. Мысалы:
class ParameterizedConstuctor{
String name;
int age;
//Parameterized Constructor
ParameterizedConstuctor(String name, int age){
this.name = name;
this.age = age;
}
}

Конструкторды анықтаудың ережелері қандай?

Конструкторларды анықтау үшін бірнеше ережелерді сақтау керек:
  • Конструктор атауы сынып атауына сәйкес келуі керек.

  • Java тілінде конструктор қайтару түрі болмауы керек.

  • Конструкторлар үшін қолданылатын жалғыз модификаторлар:

    • қоғамдық
    • әдепкі
    • қорғалған
    • жеке
  • Конструкторлар параметрлердің кез келген санын қабылдай алады.

  • Конструкторда соңғы, синхрондалған, статикалық және абстрактілі модификаторларға рұқсат етілмейді.

  • Конструктор өз денесінде қайтару мәлімдемесін қолдамайды .

  • Конструктордағы throw операторымен ерекше жағдайлар болуы мүмкін .

  • Конструктормен бірге throws сөйлемін пайдалану қолайлы .

  • Конструктор рекурсия жасамауы керек.

Жеке конструкторды қашан пайдалана аламыз?

Егер біз сырттан белгілі бір кластың an objectілерін жасағымыз келмесе, біз жабық немесе жеке конструкторларды пайдалана аламыз. Конструкторларды жеке деп жариялау арқылы біз an objectілерді тек сынып ішінде жасай аламыз. Singleton сыныптары жеке конструкторларды пайдаланудың жақсы мысалы болып табылады.

Егер біз оны нақты анықтамасақ, әдепкі конструкторға кіру модификаторы қандай болады?

Әдепкі конструкторға қол жеткізу модификаторы әрқашан сынып модификаторымен бірдей болады. Егер сынып жалпыға ортақ болса, конструктор да жалпыға ортақ болады. Егер сынып жеке болса, конструктор да жеке болады. Басқа қатынас модификаторларымен де солай болады.

Төмендегі code үзіндісінің нәтижесін жазыңыз және түсіндіріңіз

class InterviewBit{
InterviewBit(){
System.out.println(" Welcome to InterviewBit ");
}
}
class ScalerAcademy extends InterviewBit{
ScalerAcademy(){
System.out.println(" Welcome to Scaler Academy by InterviewBit");
}
}
class Main{
public static void main(String[] args) {
ScalerAcademy sc = new ScalerAcademy();
}
}
Жоғарыдағы code басып шығарылады:
InterviewBit-ке қош келдіңіз. InterviewBit арқылы Scaler академиясына қош келдіңіз.
Біз бұл нәтижені аламыз, себебі бірінші жолдағы конструкторға super() немесе this() кілт сөзін қоспасақ , JVM оны автоматты түрде орындалу уақытына қояды. JVM мұны басқа сыныптан мұраға алғандықтан жасайды және оның функционалдығы туынды сыныпта да жүзеге асырылады. Осылайша, негізгі сынып даналарына әдепкі мәндерді тағайындағанда, JVM әдепкі бойынша super() кілт сөзін қосады .

Кодты қарап шығыңыз және оның жарамды немесе жарамсыз екенін көрсетіңіз. Себебін түсіндіріңіз

class InterviewBit{
InterviewBit(){
System.out.println(" Welcome to InterviewBit ");
}
}
class ScalerAcademy extends InterviewBit{
ScalerAcademy(){
this();
System.out.println(" Welcome to Scaler Academy by InterviewBit");
}
}
class Main{
public static void main(String[] args) {
ScalerAcademy sc = new ScalerAcademy();
}
}
Жоғарыдағы code жарамсыз, себебі ол Scaler Academy конструкторының ішіндегі бірдей конструктор . Бұл конструкторда рұқсат етілмеген рекурсия жасайды. Сәйкесінше, біз рекурсивті конструкторға шақырумен байланысты компиляция уақыты қатесін аламыз.

Java тілінде бір сыныпта екі конструкторды пайдалана аламыз ба?

Иә, біз екі шартты ескере отырып, бір сыныпта конструкторлардың кез келген санын пайдалана аламыз:
  • Конструктор параметрлері әртүрлі болуы керек.
  • Конструкторда рекурсия болмауы керек.
Мысал. Бір InterviewBit класының екі конструкторын қарастырыңыз :
InterviewBit(){
    this("Scaler"); // Calling parameterized constructor
    System.out.println(" No Argument Constructor");
}
InterviewBit(String name){
    this(); // Calling no-arg constructor
    System.out.println(" Constructor with Parameters.");
}
Бұл code жарамсыз, себебі ол рекурсия жасайды. Аргументтері жоқ конструктор параметрлері бар конструкторды шақырады, ал параметрлері бар конструктор дәлелдері жоқ конструкторды шақырады.

Java-да конструкторды қайта анықтай аламыз ба?

Жоқ, конструкторды шамадан тыс жүктеу тұжырымдамасы Java тілінде қолданылмайды.

Java тілінде конструктор түпкілікті бола ала ма?

Ешбір конструктор түпкілікті бола алмайды. Өйткені соңғы кілт сөздер туынды сыныптағы әдісті қайта анықтауды тоқтату үшін пайдаланылады. Бірақ конструкторда қайта анықтау түсінігі қолданылмайды, сондықтан соңғы кілт сөзін жазудың қажеті жоқ . Егер біз конструкторда соңғы түйінді сөзді жазсақ, біз талап етілетін қайтару түрі деп аталатын компиляция уақытының қатесін аламыз , өйткені компилятор оны әдіс ретінде қарастырады.

Java тілінде конструктор статикалық бола ала ма?

Жоқ, Java конструкторы статикалық болуы мүмкін емес. Себебі статикалық кілт сөздер біз мүшенің нысанға емес, сыныпқа тиесілігін қалаған кезде пайдаланылады. Бірақ конструкторлар нысандарды инициализациялауға арналған, сондықтан компилятор оны әдіс ретінде қарастырады. Біз талап етілетін қайтару түріндегі қатені аламыз .

super(), super және this(), this арасындағы айырмашылықты сипаттаңыз

super() және this() конструктор шақырулары болып табылады. Ол тек ата-аналық немесе ағымдағы сыныптың конструкторын шақыру үшін қолданылады. «Супер» және «бұл» өз класының немесе негізгі сыныптың данасы мүшелерін белгілеу үшін пайдаланылатын кілт сөздер екенін ескеріңіз. Төмендегі codeты қарастырыңыз:
class InterviewBit{
    String message = " Welcome to InterviewBit";
}
public class Scaler extends InterviewBit
{
    String message = " Welcome to Scaler Academy";
    public void printMethod(){
        //this will print the message variable of the current class.
        System.out.println(this.message);

        //this will print the message variable of Base class.
        System.out.println(super.message);
    }
	public static void main(String[] args) {
		Scaler sa = new Scaler();
		sa.printMethod();
	}
}
Бұл code үзіндісінде this.message " Scaler Academy-ге қош келдіңіз " хабарын басып шығарады , ал super.message " InterviewBit-ке қош келдіңіз " деп басып шығарады . Міне, осы екі кілт сөз негізгі және туынды сыныптардың мүше даналарына сілтеме жасау үшін пайдаланылады.

Деструкторлар дегеніміз не? Java-да деструктор бар ма?

Деструкторлар бағдарламамен алынған жадты босату үшін қолданылады. Мысалы, егер жад оны орындау кезінде программаға қажет болса, деструктор сол жадты басқа бағдарламалар пайдалана алатындай етіп босатады. Java-да деструктор ұғымы жоқ, себебі Java-да жадты босату жұмысын қоқыс жинаушы басқарады.

Java-да конструкторлық тізбек дегеніміз не?

Бір конструктор басқа конструктордан шақырылғанда, оны конструктор тізбегі деп атауға болады. Конструктор шақыруын бір сыныпта жасау міндетті емес. Мұны ата-аналар класы үшін де жасауға болады. Мысалы, төмендегі суретті қарастырыңыз. Кофе-брейк №123.  Java конструкторы - техникалық сұхбат сұрақтары мен жауаптары - 2Әрі қарай, біз осы айнымалы даналық мәндердің мәндері бар нысанды инициализациялау үшін codeты қарай аламыз:
class EmployeeAddess{
    int pinCode;
    String address;
    String mobNo;
    EmployeeAddress(int pinCode, String address, String mobNo){
        this.pinCode = pinCodel
        this.address = address;
        this.mobNo = mobNo;
    }
}
class Employees extends EmployeeAddress{
    int ID;
    String name;
    String designation;
    String department;
    Employee(int ID, String name, String designation,String department,
                    int pinCode, String address, String mobNo){

        //Calling Constructor for Base class to initialize the object.
        //This can be a constructor chaining.
        super(pinCode, address, mobNo);
        this.ID = ID;
        this.name = name;
        this.designation = designation;
        this.department = department;
    }
}
public class Main{
    Employee emp = new Employee(101, "XYX", "SDE", "Cloud", 123456, "no 150, xys, xys, INDIA", "999999999");
}
Жоғарыдағы codeта біз қызметкердің мәліметтері мен оның мекен-жайы бар Қызметкер класының нысанын жасаймыз. Employee мекенжайы класы Employee класына мұраланған . Енді мекенжай үшін нысан мәнін жасау үшін біз қызметкердің мекенжайына нақты мән бермейміз. Оның орнына, біз мұны істеу үшін Қызметкер мекенжайы сыныбының конструкторын қолданамыз . Ал super(аргументтер) көмегімен мәндерді инициализациялау үшін конструкторлар тізбегін қалыптастырамыз. Конструкторлық тізбек деген осы.

Кодтан бағдарламаның нәтижесін анықтаңыз және жауабыңызды түсіндіріңіз.

class InterviewBit{
void InterviewBit(){
System.out.println(" Java Constructor interview questions by InterviewBit");
}
int InterviewBit(int val){
System.out.println(" Java Constructor. And Value = "+val);
}
}
public class Main{
InterviewBit ib1 = new InterviewBit();
InterviewBit ib2 = new InterviewBit();
}
Жоғарыдағы code ештеңе басып шығармайды, себебі InterviewBit() мұнда конструктор емес. Void және int кілт сөздері пайдаланылғандықтан , ол әдіске айналады. Сондықтан біз әдісті атамаймыз. Біз ешқандай нәтиже алмаймыз, өйткені әдісті орындау үшін оны нысанда нақты шақыру керек.

Конструктордың көмегімен an object мәндерін жаңа нысанға көшіру бағдарламасын жазыңыз

class Rectangle{
    int length;
    int breadth;
    Rectangle(int length, int breadth){
        this.length = length;
        this.breadth = breadth;
    }

    //Overloaded Constructor for copying the value of old Object to new object
    Rectangle(Rectangle obj){
        this.length = obj.length;
        this.breadth = obj.breadth;
    }
}
public class Main{
    Rectangle obj1 = new Rectangle(10, 5);

    //New Object of rectangle class will be created with the value from obj1.
    Rectangle obj2 = new Rectangle(obj1);
}
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION