JavaRush /جاوا بلاگ /Random-SD /ڪافي بريڪ #123. Java Constructor - ٽيڪنيڪل انٽرويو سوال ۽...

ڪافي بريڪ #123. Java Constructor - ٽيڪنيڪل انٽرويو سوال ۽ جواب

گروپ ۾ شايع ٿيل
ذريعو: هيڪنون

Constructor ڇا آهي؟

Constructor ھڪڙو خاص طريقو آھي جيڪو ھڪڙي طبقي ۾ بيان ڪيو ويو آھي ساڳئي نالي سان ڪلاس جو نالو. ھڪڙو جاوا ٺاھيندڙ ھڪڙو طريقو آھي جنھن ۾ واپسي جو قسم نه آھي. ڪافي بريڪ #123.  جاوا ڪنسٽرڪٽر - ٽيڪنيڪل انٽرويو سوال ۽ جواب - 1اڏاوتون شيون جي شروعات ۾ سڀ کان اهم ڪردار ادا ڪن ٿا ۽ هن آرٽيڪل ۾، اسان نموني انٽرويو سوالن جي فهرست ڪنداسين جيڪي جاوا ۾ تعمير ڪندڙن کي ڍڪيندا آهن. توھان پڻ سکندا جاوا ۾ ٺاھيندڙن جي اھميت بابت، ڏسو ڪوڊ جا مثال ۽ ٻيا اھم تفصيل جيڪي توھان جي مدد ڪندا جاوا ٺاھيندڙن بابت سوالن جا جواب ھڪ انٽرويو ۾.

ڇو تعمير ڪندڙن جي ضرورت آهي؟ تفصيل سان بيان ڪريو

اچو ته اسان وٽ شاگرد نالي هڪ ڪلاس آهي . ۽ اسان وٽ مثال متغير جو نالو ۽ roll_number آهي .
class Student{
String name;
int rollNo;
}
هاڻي، جيڪڏهن اسان 1000 شيون ٺاهي سگهون ٿا، ته پوء JVM انهن قدرن کي ان جي ڊفالٽ قسم سان شروع ڪندو Name = null ۽ rollNo = 0 . انهن انفرادي شين جي سڃاڻپ ممڪن نه آهي، ۽ هر هڪ شئي کي قدر تفويض ڪرڻ سان ڪوڊ جي مقدار ۾ اضافو ٿيندو، جنهن کي خراب پروگرامنگ مشق سمجهيو ويندو آهي. تنهن ڪري، هن کان بچڻ لاء، تعمير ڪندڙ استعمال ڪيا ويا آهن. اهو آهي، جاوا ۾ هڪ تعمير ڪندڙ جو مقصد ڪلاس مثال جي متغير جي قيمت کي شروع ڪرڻ آهي.

جاوا ۾ ڪهڙي قسم جا تعمير ڪندڙ آهن؟

جاوا ۾ ٽي مختلف قسم جا ٺاھيندڙ آھن:
  • ڊفالٽ ٺاھيندڙ
  • بغير دليل جي تعمير ڪندڙ
  • پيرا ميٽرائيز ڪنسٽرڪٽر

جاوا ۾ ڊفالٽ ڪنسٽرڪٽر ڇا آهي؟

A Default Constructor ھڪڙو ٺاھيندڙ آھي جيڪو JVM پاران رن ٽائم تي ٺاھيو ويو آھي جيڪڏھن ڪنھن ٺاھيندڙ جي ڪلاس ۾ وضاحت نه ڪئي وئي آھي. ڊفالٽ تعمير ڪندڙ جو بنيادي ڪم مثالن جي قدرن کي ان جي ڊفالٽ قسم جي مطابق شروع ڪرڻ آھي. مثال جاوا ۾ ڊفالٽ تعمير ڪندڙ:
class DefaultConstructor{
int id;
String name;
}
ھاڻي ھن ڪلاس لاءِ، جيڪڏھن اسان ڪو اعتراض ٺاھيون ٿا، ته پوءِ JVM جي اندر ھڪڙو ڊفالٽ ٺاھيندڙ ھوندو، جنھن کي ڊفالٽ ويليو ڏنو ويندو آھي.
DefaultConstructor df= new DefaultConstructor();
هاڻي جيڪڏهن اسان قيمت پرنٽ ڪنداسين ته اسان حاصل ڪنداسين:
پرنٽ = df.id = 0.df.name = null.

No-Argument Constructor ڇا آهي؟

هڪ غير دليل سازي هڪ تعمير ڪندڙ آهي جيڪو واضح طور تي بيان ڪري سگهجي ٿو مثالن جي قيمت کي شروع ڪرڻ لاء. مثال طور:
class NoArgConstuctor{ int a; int b;

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

}

هڪ Parameterized Constructor ڇا آهي؟

هڪ پيراميٽر ٿيل تعمير ڪندڙ هڪ تعمير ڪندڙ آهي جيڪو هڪ پيٽرولر کي قبول ڪري ٿو مثالن کي شروع ڪرڻ لاء. مثال طور:
class ParameterizedConstuctor{
String name;
int age;
//Parameterized Constructor
ParameterizedConstuctor(String name, int age){
this.name = name;
this.age = age;
}
}

هڪ تعمير ڪندڙ جي وضاحت ڪرڻ جا اصول ڇا آهن؟

تعمير ڪندڙ کي بيان ڪرڻ لاء، توهان کي ڪيترن ئي قاعدن جي پيروي ڪرڻ گهرجي:
  • ٺاھيندڙ جو نالو ڪلاس جي نالي سان ملائڻ گھرجي.

  • جاوا ۾ هڪ تعمير ڪندڙ واپسي جو قسم نه هجڻ گهرجي.

  • تعمير ڪندڙن لاءِ صرف قابل اطلاق تبديليون آھن:

    • عوامي
    • ڊفالٽ
    • محفوظ ٿيل
    • خانگي
  • ٺاھڻ وارا ڪي به نمبر وٺي سگھن ٿا.

  • تبديل ڪندڙ حتمي، هم وقت سازي، جامد ۽ خلاصي جي اجازت نه آهي هڪ تعمير ڪندڙ ۾.

  • تعمير ڪندڙ پنهنجي جسم جي اندر واپسي واري بيان جي حمايت نٿو ڪري .

  • تعمير ڪندڙ ۾ اڇلائي بيان سان استثنا ٿي سگھي ٿو .

  • اهو قابل قبول آهي ته ٺهڪندڙ شق استعمال ڪرڻ لاءِ.

  • تعمير ڪندڙ کي ٻيهر ورجائي پيدا نه ڪرڻ گهرجي.

جڏهن اسان هڪ نجي تعمير ڪندڙ استعمال ڪري سگهون ٿا؟

جيڪڏهن اسان ٻاهران ڪنهن خاص طبقي جون شيون ٺاهڻ نٿا چاهيون، اسان بند يا نجي تعمير ڪندڙ استعمال ڪري سگهون ٿا. تعمير ڪندڙن کي پرائيويٽ قرار ڏيڻ سان، اسان صرف ڪلاس اندر شيون ٺاهي سگھون ٿا. سنگلٽن ڪلاس نجي تعمير ڪندڙن جي استعمال جو سٺو مثال آهن.

ڇا ٿيندو ڊفالٽ ڪنسٽرڪٽر رسائي موڊيفائر جيڪڏهن اسان ان کي واضح طور تي بيان نٿا ڪريون؟

ڊفالٽ ڪنسٽرڪٽر رسائي موڊيفائر هميشه ڪلاس ميڊيفائر وانگر ساڳيو هوندو. جيڪڏهن طبقو عوامي آهي ته پوءِ تخليق ڪندڙ به عوامي. جيڪڏهن ڪلاس خانگي آهي، ته پوءِ تعمير ڪندڙ به خانگي هوندو. ساڳيو ئي ٿيندو ٻين رسائي جي تبديلين سان.

ھيٺ ڏنل ڪوڊ جي ٽڪڙي جو آئوٽ لکو ۽ وضاحت ڪريو

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();
}
}
مٿي ڏنل ڪوڊ پرنٽ ڪندو:
InterviewBit ۾ ڀليڪار. InterviewBit پاران اسڪالر اڪيڊمي ۾ ڀليڪار.
اسان هي آئوٽ پُٽ حاصل ڪنداسين ڇو ته جيڪڏهن اسان پهرين لائن تي ڪنسٽرڪٽر ۾ super() يا هي() ڪي ورڊ شامل نه ڪندا ته 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();
}
}
مٿي ڏنل ڪوڊ غلط آهي ڇاڪاڻ ته اهو ساڳيو تعمير ڪندڙ اسڪيلر اڪيڊمي تعمير ڪندڙ اندر آهي . هي تعمير ڪندڙ ۾ ٻيهر ورجائي ٿو، جنهن جي اجازت ناهي. ان جي مطابق، اسان کي وصول ڪرڻ واري وقت جي غلطي ملندي جيڪا ٻيهر ورجائيندڙ تعمير ڪندڙ کي ڪال سان لاڳاپيل آهي.

ڇا اسان جاوا ۾ ھڪڙي طبقي ۾ ٻه ٺاھيندڙ استعمال ڪري سگھون ٿا؟

ها، اسان هڪ طبقي ۾ ڪنهن به قسم جي تعمير ڪندڙ استعمال ڪري سگهون ٿا، ٻن شرطن جي تابع:
  • تعمير ڪندڙ پيراگراف مختلف هجڻ گهرجن.
  • تعمير ڪندڙ ۾ ڪو به ريٽرنشن نه هجڻ گهرجي.
مثال. ساڳئي 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.");
}
هي ڪوڊ صحيح نه آهي ڇاڪاڻ ته اهو هڪ ورجائي پيدا ڪندو. هڪ تعمير ڪندڙ بغير دلائل سان هڪ تعمير ڪندڙ کي سڏيندو پيرا ميٽرن سان، ۽ هڪ تعمير ڪندڙ پيرا ميٽرن سان گڏ ٺاهيندڙ کي سڏيندو بغير دليلن سان.

ڇا اسان جاوا ۾ ھڪڙي ٺاھيندڙ کي ختم ڪري سگھون ٿا؟

نه، تعمير ڪندڙ اوورلوڊنگ جو تصور جاوا ۾ لاڳو ناهي.

ڇا هڪ تعمير ڪندڙ جاوا ۾ حتمي ٿي سگهي ٿو؟

ڪو به ٺاهيندڙ حتمي نه ٿو ٿي سگهي. اهو ئي سبب آهي ته آخري لفظ استعمال ڪيا ويا آهن هڪ طريقي سان ختم ڪرڻ کي روڪڻ لاء نڪتل طبقي ۾. پر هڪ تعمير ڪندڙ ۾، اوور رائڊنگ جو تصور لاڳو نٿو ٿئي، تنهنڪري حتمي لفظ لکڻ جي ڪا ضرورت ناهي . جيڪڏهن اسان فائنل ڪي ورڊ Constructor ۾ لکون ٿا، ته اسان کي هڪ compile-time error ملندي جنهن کي گهربل موٽڻ جو قسم سڏيو ويندو آهي ڇاڪاڻ ته مرتب ڪندڙ ان کي هڪ طريقي سان سمجهي ٿو.

ڇا هڪ تعمير ڪندڙ جاوا ۾ جامد ٿي سگهي ٿو؟

نه، هڪ جاوا تعمير ڪندڙ جامد نه ٿي سگهي. اهو ئي سبب آهي ته جامد لفظ استعمال ٿيندا آهن جڏهن اسان چاهيون ٿا ته ميمبر ڪنهن ڪلاس سان واسطو رکي بلڪه ڪنهن شئي سان. پر ٺاھڻ وارا مقصد شيون شروع ڪرڻ لاء آھن، تنھنڪري مرتب ڪندڙ ان کي ھڪڙي طريقي سان علاج ڪندو. اسان کي گهربل موٽڻ واري قسم جي غلطي ملندي .

سپر ()، سپر ۽ هي()، هي جي وچ ۾ فرق بيان ڪريو

super() ۽ هي() تعمير ڪندڙ ڪالون آهن. اهو صرف والدين طبقي يا موجوده طبقي جي تعمير ڪندڙ کي سڏڻ لاء استعمال ڪيو ويندو آهي. نوٽ ڪريو ته "سپر" ۽ "هي" لفظ آهن جيڪي استعمال ڪيا ويندا آهن ميمبرن کي نامزد ڪرڻ لاءِ ان جي پنهنجي طبقي يا بنيادي طبقي جي مثال. هيٺ ڏنل ڪوڊ تي غور ڪريو:
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();
	}
}
هن ڪوڊ جي ٽڪڙي ۾، this.message " Welcome to Scaler Academy " پيغام پرنٽ ڪندو ۽ super.message " Welcome to InterviewBit " کي پرنٽ ڪندو . هي ڪيئن اهي ٻه لفظ استعمال ڪيا ويندا آهن بنيادي ۽ نڪتل طبقن جي ميمبرن جي مثالن جي حوالي ڪرڻ لاءِ.

تباهه ڪندڙ ڇا آهن؟ ڇا جاوا ۾ هڪ تباهي موجود آهي؟

ڊسٽرڪٽ استعمال ڪيا ويندا آهن مفت ميموري حاصل ڪرڻ لاءِ هڪ پروگرام طرفان. مثال طور، جيڪڏهن ميموري جي ضرورت هجي ڪنهن پروگرام کي ان جي عمل دوران، ڊسٽرڪٽر ان ميموري کي آزاد ڪري ٿو ته جيئن ٻيا پروگرام ان کي استعمال ڪري سگهن. جاوا ۾ ڊسٽرڪٽر جو ڪو تصور ناهي ڇو ته جاوا ۾ ميموري کي آزاد ڪرڻ جو ڪم گاربيج ڪليڪٽر سنڀالي ٿو.

جاوا ۾ ڪنسٽرڪٽر زنجير ڇا آهي؟

جڏھن ھڪڙي ٺاھيندڙ کي ٻئي ٺاھيندڙ کان سڏيو وڃي ٿو، اھو سڏيو وڃي ٿو ڪنسٽرڪٽر زنجير. تعمير ڪندڙ ڪال کي ساڳئي طبقي تي نه ڪيو وڃي. اهو پڻ ٿي سگهي ٿو والدين طبقي لاءِ. مثال طور، هيٺ ڏنل تصوير تي غور ڪريو. ڪافي بريڪ #123.  جاوا ڪنسٽرڪٽر - ٽيڪنيڪل انٽرويو سوال ۽ جواب - 2اڳيون، اسان ڪوڊ کي ڏسي سگھون ٿا اعتراض کي شروعات ڪرڻ لاءِ هنن مثالي متغيرن جي قدرن سان:
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");
}
مٿي ڏنل ڪوڊ ۾، اسان ملازم جي تفصيل ۽ سندس ايڊريس سان گڏ هڪ ملازم طبقي اعتراض ٺاهي رهيا آهيون. ملازم ايڊريس ڪلاس ملازم طبقي طرفان ورثي ۾ ملي ٿو . ھاڻي، ھڪڙي پتي لاء ھڪڙي اعتراض جي قيمت کي تيز ڪرڻ لاء، اسان ملازم جي ايڊريس کي ھڪڙي واضح قدر تفويض نه ڪندا آھيون. ان جي بدران، اسان استعمال ڪريون ٿا تعمير ڪندڙ ملازم ايڊريس ڪلاس جو اهو ڪرڻ لاءِ . ۽ سپر (دلائل) جي مدد سان اسان قدرن کي شروع ڪرڻ لاءِ ڪنسٽرڪٽرز جو هڪ سلسلو ٺاهيندا آهيون. اهو ڇا آهي هڪ تعميراتي زنجير.

ڪوڊ مان پروگرام جي پيداوار جو اندازو لڳايو ۽ توهان جي جواب جي وضاحت ڪريو.

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();
}
مٿي ڏنل ڪوڊ ڪجھ به نه پرنٽ ڪندو ڇو ته InterviewBit() هتي تعمير ڪندڙ نه آهي. جيئن ته Void ۽ int لفظ استعمال ڪيا ويندا آهن ، اهو هڪ طريقو بڻجي ويندو آهي. ان ڪري اسان ان طريقي کي نه سڏيندا آهيون. اسان کي ڪا به پيداوار نه ملندي ڇو ته طريقي کي عمل ڪرڻ لاء اسان کي واضح طور تي ان کي اعتراض تي سڏڻ جي ضرورت آهي.

ھڪ پروگرام لکو ھڪڙي شئي جي قدرن کي نقل ڪرڻ لاءِ ھڪڙي نئين شئي ۾ ٺاھيندڙ استعمال ڪندي

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