JavaRush /جاوا بلاگ /Random-UR /کافی وقفہ نمبر 123۔ جاوا کنسٹرکٹر - تکنیکی انٹرویو کے سوا...

کافی وقفہ نمبر 123۔ جاوا کنسٹرکٹر - تکنیکی انٹرویو کے سوالات اور جوابات

گروپ میں شائع ہوا۔
ماخذ: ہیکنون

کنسٹرکٹر کیا ہے؟

کنسٹرکٹر ایک خاص طریقہ ہے جس کی وضاحت کلاس میں اسی نام کے ساتھ کی جاتی ہے جس کا کلاس نام ہوتا ہے۔ جاوا کنسٹرکٹر ایک طریقہ کی طرح ہے جس میں واپسی کی قسم نہیں ہے۔ کافی وقفہ نمبر 123۔  جاوا کنسٹرکٹر - تکنیکی انٹرویو کے سوالات اور جوابات - 1تعمیر کنندگان اشیاء کی ابتدا میں سب سے اہم کردار ادا کرتے ہیں اور اس مضمون میں، ہم انٹرویو کے نمونے کے سوالات کی فہرست بنائیں گے جو جاوا میں کنسٹرکٹرز کا احاطہ کرتے ہیں۔ آپ جاوا میں کنسٹرکٹرز کی اہمیت کے بارے میں بھی جانیں گے، کوڈ کی مثالیں اور دیگر اہم تفصیلات دیکھیں گے جو انٹرویو میں جاوا کنسٹرکٹرز کے بارے میں سوالات کے جوابات دینے میں آپ کی مدد کریں گی۔

کنسٹرکٹرز کی ضرورت کیوں ہے؟ تفصیل سے بتائیں

ہم کہتے ہیں کہ ہماری ایک کلاس ہے جس کا نام طالب علم ہے ۔ اور ہمارے پاس مثال متغیر کا نام اور roll_number ہے ۔
class Student{
String name;
int rollNo;
}
اب، اگر ہم 1000 آبجیکٹ بناتے ہیں، تو JVM ان اقدار کو اپنی ڈیفالٹ قسم Name = null اور rollNo = 0 کے ساتھ شروع کرے گا ۔ ان انفرادی اشیاء کی شناخت ممکن نہیں ہے، اور ہر ایک آبجیکٹ کو قدریں تفویض کرنے سے کوڈ کی مقدار میں اضافہ ہو جائے گا، جسے پروگرامنگ کی خراب مشق سمجھا جاتا ہے۔ لہذا، اس سے بچنے کے لئے، تعمیر کنندگان کا استعمال کیا جاتا ہے. یعنی جاوا میں کنسٹرکٹر کا مقصد کلاس انسٹینس متغیرات کی قدر کو شروع کرنا ہے۔

جاوا میں کنسٹرکٹرز کی اقسام ہیں؟

جاوا میں تین مختلف قسم کے کنسٹرکٹرز ہیں:
  • ڈیفالٹ کنسٹرکٹر
  • غیر دلیل کنسٹرکٹر
  • پیرامیٹرائزڈ کنسٹرکٹر

جاوا میں ڈیفالٹ کنسٹرکٹر کیا ہے؟

ڈیفالٹ کنسٹرکٹر ایک کنسٹرکٹر ہوتا ہے جسے 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;
}

}

پیرامیٹرائزڈ کنسٹرکٹر کیا ہے؟

ایک پیرامیٹرائزڈ کنسٹرکٹر ایک کنسٹرکٹر ہے جو مثالوں کو شروع کرنے کے لئے پیرامیٹر کو قبول کرتا ہے۔ مثال کے طور پر:
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.");
}
یہ کوڈ درست نہیں ہے کیونکہ یہ تکرار پیدا کرے گا۔ ایک کنسٹرکٹر جس میں کوئی دلیل نہیں ہے ایک کنسٹرکٹر کو پیرامیٹرز کے ساتھ کال کرے گا، اور پیرامیٹرز والا کنسٹرکٹر بغیر دلائل کے کنسٹرکٹر کو کال کرے گا۔

کیا ہم جاوا میں کنسٹرکٹر کو اوور رائیڈ کر سکتے ہیں؟

نہیں، کنسٹرکٹر اوور لوڈنگ کا تصور جاوا میں لاگو نہیں ہوتا ہے۔

کیا جاوا میں کنسٹرکٹر فائنل ہوسکتا ہے؟

کوئی کنسٹرکٹر فائنل نہیں ہو سکتا۔ اس کی وجہ یہ ہے کہ اخذ کردہ کلاس میں کسی طریقہ کو اوور رائیڈ کرنے سے روکنے کے لیے حتمی مطلوبہ الفاظ استعمال کیے جاتے ہیں۔ لیکن کنسٹرکٹر میں، اوور رائیڈنگ کا تصور لاگو نہیں ہوتا، اس لیے حتمی کلیدی لفظ لکھنے کی ضرورت نہیں ہے ۔ اگر ہم حتمی کلیدی لفظ کنسٹرکٹر میں لکھتے ہیں تو ہمیں کمپائل ٹائم ایرر ملے گا جسے مطلوبہ واپسی کی قسم کہا جاتا ہے کیونکہ کمپائلر اسے ایک طریقہ کے طور پر دیکھتا ہے۔

کیا جاوا میں کنسٹرکٹر جامد ہوسکتا ہے؟

نہیں، جاوا کنسٹرکٹر جامد نہیں ہو سکتا۔ اس کی وجہ یہ ہے کہ جامد مطلوبہ الفاظ اس وقت استعمال ہوتے ہیں جب ہم چاہتے ہیں کہ کوئی ممبر کسی شے کے بجائے کسی کلاس سے تعلق رکھے۔ لیکن کنسٹرکٹرز کا مقصد اشیاء کو شروع کرنا ہوتا ہے، لہذا مرتب کرنے والا اسے ایک طریقہ سمجھے گا۔ ہمیں مطلوبہ واپسی کی قسم کی خرابی ملے گی ۔

سپر()، سپر اور اس()، اس کے درمیان فرق بیان کریں۔

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