سب کو سلام! آج میں جاوا ڈویلپر انٹرویو کے سوالات کا جائزہ لے رہا ہوں۔
اب ہم کلاس کی ابتداء کی ترتیب کو دیکھ سکتے ہیں (اس کے پیرنٹ کلاس کے ساتھ) تاکہ یہ بہتر طور پر سمجھ سکیں کہ ابتداء کے بلاکس کب شروع کیے جاتے ہیں۔

29. کیا واپسی کو کنسٹرکٹر میں استعمال کیا جا سکتا ہے؟
ہاں، لیکن صرف واپسی کے مطلوبہ الفاظ کے دائیں جانب قدر کے بغیر ۔ آپ واپسی کا استعمال کر سکتے ہیں؛ کنسٹرکٹر میں ایک مددگار بیان کے طور پر مزید کوڈ پر عمل درآمد کو فوری طور پر ختم کرنے اور آبجیکٹ کی ابتدا کو ختم کرنے کے لیے۔ مثال کے طور پر، فرض کریں کہ ہمارے پاس بلی کی کلاس ہے، اور اگر ایک بلی بے گھر ہے ( isHomeless = true ، تو ہم چاہتے ہیں کہ ابتداء کو ختم کر دیا جائے اور دوسرے شعبوں کو نہ بھرا جائے (آخر کار، وہ ہمارے لیے نامعلوم ہیں، چونکہ بلی بے گھر ہے) :
public Cat(int age, String name, boolean isHomeless) {
if (isHomeless){
this.isHomeless = isHomeless;
return;
}
this.isHomeless = isHomeless;
this.age = age;
this.name = name;
}
لیکن اگر ہم ٹھوس اقدار کے بارے میں بات کر رہے ہیں، تو واپسی کا مطلوبہ لفظ کوئی خاص قدر واپس نہیں کر سکتا کیونکہ:
- جب آپ کنسٹرکٹر کا اعلان کرتے ہیں، تو آپ کے پاس واپسی کی قسم جیسی کوئی چیز نہیں ہوگی۔
- ایک اصول کے طور پر، کنسٹرکٹر کو انسٹی ٹیشن کے دوران واضح طور پر بلایا جاتا ہے۔
- کنسٹرکٹر کوئی طریقہ نہیں ہے: یہ ایک الگ طریقہ کار ہے جس کا واحد مقصد مثال کے متغیرات کو شروع کرنا ہے، یعنی ہم ایک آبجیکٹ بنانے کے لیے نئے آپریٹر کا استعمال کر رہے ہیں۔

30. کیا کنسٹرکٹر سے استثنیٰ دیا جا سکتا ہے؟
کنسٹرکٹرز مستثنیات کے ساتھ اسی طرح کام کرتے ہیں جس طرح طریقے کرتے ہیں۔ طریقے ہمیں طریقہ ہیڈر میں تھرو <ExceptionType> لکھ کر مستثنیات پھینکنے کی اجازت دیتے ہیں ۔ اور کنسٹرکٹرز ہمیں ایسا کرنے کی اجازت دیتے ہیں۔ جب ہم چائلڈ کلاس کے کنسٹرکٹر کو وراثت میں لے رہے ہیں اور اس کی وضاحت کر رہے ہیں، تو ہم استثناء کی قسم کو وسیع کر سکتے ہیں — مثال کے طور پر، IOException -> استثناء (لیکن اس کے برعکس نہیں)۔ آئیے کیٹ کلاس کے کنسٹرکٹر کو بطور کنسٹرکٹر استثنیٰ پھینکنے کی مثال کے طور پر استعمال کریں۔ ہم کہتے ہیں کہ جب ہم کوئی آبجیکٹ بناتے ہیں تو ہم کنسول سے نام اور عمر درج کرنا چاہتے ہیں:
public Cat() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
this.name = reader.readLine();
this.age = Integer.parseInt(reader.readLine());
}
چونکہ reader.readLine() ایک IOException پھینکتا ہے، اس لیے ہم اسے ہیڈر میں ممکنہ پھینکے گئے استثناء کے طور پر لکھتے ہیں۔
31. کلاس ہیڈر کے عناصر کیا ہیں؟ ایک مثال لکھیں۔
ان عناصر کی وضاحت کرنے کے لیے جو کلاس ہیڈر بناتے ہیں، آئیے ایک چھوٹی اسکیما دیکھیں:- لازمی عناصر بریکٹ <> میں ظاہر ہوتے ہیں۔
- اختیاری عناصر {} میں ہیں
public final class Lion extends Cat implements WildAnimal

32. طریقہ ہیڈر کے عناصر کیا ہیں؟ ایک مثال لکھیں۔
ان عناصر پر غور کرتے وقت جو طریقہ کار کا ہیڈر بناتے ہیں، آئیے ایک بار پھر ایک چھوٹے اسکیما پر غور کریں:- لازمی عناصر بریکٹ <> میں ظاہر ہوتے ہیں۔
- اختیاری عناصر {} میں ہیں
public static void main(String[] args) throws IOException
33. چائلڈ کلاس میں ایک ڈیفالٹ کنسٹرکٹر بنائیں اگر کسی کی بیس کلاس میں پہلے سے وضاحت نہیں کی گئی ہے (لیکن ایک مختلف کنسٹرکٹر کی تعریف کی گئی ہے)
مجھے یقین نہیں ہے کہ میں سوال کو پوری طرح سے سمجھتا ہوں، لیکن شاید اس کا مطلب یہ ہے کہ ہمارے پاس پیرنٹ کلاس میں اس طرح کا کچھ کنسٹرکٹر ہے:
public Cat(int age, String name) {
this.age = age;
this.name = name;
}
اس صورت میں، پیرنٹ کلاس میں، ہمیں یقینی طور پر ایک کنسٹرکٹر کی وضاحت کرنے کی ضرورت ہے جو پیرنٹ کو شروع کرے گا (یعنی پیرنٹ کنسٹرکٹر کو کال کریں):
public class Lion extends Cat {
public Lion(int age, String name) {
super(age, name);
}
}

34. یہ کلیدی لفظ کب استعمال ہوتا ہے؟
جاوا میں، اس کے دو مختلف معنی ہیں۔ 1. یہ موجودہ چیز کا حوالہ ہے، جیسے this.age = 9 ۔ یعنی اس سے مراد وہ شے ہے جس میں اسے استعمال کیا جاتا ہے اور جس سے اس کے ساتھ کوڈ مراد ہے۔ بنیادی مقصد کوڈ پڑھنے کی اہلیت کو بہتر بنانا اور ابہام سے بچنا ہے۔ مثال کے طور پر، اگر ایک مثال کے میدان اور ایک طریقہ دلیل کا ایک ہی نام ہے:
public void setName(String name) {
this.name = name;
}
یعنی، this.name آبجیکٹ کی فیلڈ ہے، جبکہ نام طریقہ پیرامیٹر ہے۔ اس حوالہ کو جامد طریقوں میں استعمال نہیں کیا جا سکتا۔ 2. کنسٹرکٹر میں، اسے ایک طریقہ کی طرح کہا جا سکتا ہے، جیسے this(value) ۔ اس صورت میں، یہ اسی کلاس کے دوسرے کنسٹرکٹر کو کال ہوگی۔ بنیادی طور پر، آپ آبجیکٹ بنانے کے عمل کے دوران دو کنسٹرکٹرز کو کال کر سکتے ہیں۔
public Cat(int age, String name) {
this(name);
this.age = age;
}
public Cat(String name) {
this.name = name;
}
کیٹ آبجیکٹ بنانے کے لیے پہلے کنسٹرکٹر کو کال کرتے وقت ، دونوں مثال کے فیلڈز کو کامیابی کے ساتھ شروع کیا جائے گا۔ یہاں چند باریکیاں ہیں:
- یہ () صرف کنسٹرکٹر میں کام کرتا ہے۔
- دوسرے کنسٹرکٹر کا حوالہ کنسٹرکٹر بلاک (باڈی) کی پہلی لائن میں ہونا چاہیے۔ اس کا مطلب ہے کہ ایک کنسٹرکٹر اپنی کلاس کے ایک سے زیادہ (دوسرے) کنسٹرکٹر کو کال نہیں کر سکتا۔

35. انیشیلائزر کیا ہے؟
جہاں تک میں سمجھتا ہوں، یہ سوال عام اور جامد ابتدائی بلاکس کے بارے میں ہے۔ آئیے پہلے یاد رکھیں کہ ابتداء کیا ہے۔ ابتداء فیلڈز کی تخلیق، ایکٹیویشن، تیاری اور تعریف ہے۔ کسی پروگرام یا جزو کو استعمال کے لیے تیار کرنا۔ آپ کو یاد ہوگا کہ جب آپ کوئی آبجیکٹ بناتے ہیں تو کلاس متغیر کو فوری طور پر شروع کیا جاسکتا ہے جب اس کا اعلان کیا جاتا ہے:
class Cat {
private int age = 9;
private String name = "Tom";
یا کنسٹرکٹر کے ذریعے حقیقت کے بعد سیٹ کریں:
class Cat {
private int age;
private String name;
public Cat(int age, String name) {
this.age = age;
this.name = name;
}
لیکن ایک اور طریقہ بھی ہے: آپ ایک ابتدائی بلاک کا استعمال کرتے ہوئے ایک مثال متغیر ترتیب دے سکتے ہیں، جو کسی کلاس کے اندر گھنگھریالے منحنی خطوط وحدانی کی شکل لیتا ہے، بغیر کسی نام کے (جیسے نام کے بغیر طریقہ یا کنسٹرکٹر ) :
class Cat {
private int age;
private String name;
{
age = 10;
name = "Tom";
}
انیشیلائزیشن بلاک کوڈ کا ایک ٹکڑا ہے جو کسی چیز کے بننے پر لوڈ ہوتا ہے۔ اس طرح کے بلاکس کو عام طور پر کچھ پیچیدہ حسابات کو انجام دینے کے لیے استعمال کیا جاتا ہے جو کلاس کے لوڈ ہونے پر درکار ہوتے ہیں۔ ان حسابات کے نتائج کو متغیرات کی قدروں کے طور پر سیٹ کیا جا سکتا ہے۔ عام ابتدائی بلاکس کے علاوہ، جامد بھی ہیں۔ وہ ایک جیسے نظر آتے ہیں لیکن ابتدائی گھوبگھرالی تسمہ کے سامنے جامد کلیدی لفظ ہے:
class Cat {
private static int age;
private static String name;
static{
age = 10;
name = "Tom";
}
یہ بلاک پچھلے بلاک جیسا ہی ہے۔ لیکن اگر عام کو اس وقت عمل میں لایا جاتا ہے جب ہر شے کو شروع کیا جاتا ہے، تو جامد کو صرف ایک بار عمل میں لایا جاتا ہے، جب کلاس لوڈ کی جاتی ہے۔ ایک اصول کے طور پر، کچھ پیچیدہ حسابات ایک جامد بلاک میں کیے جاتے ہیں، جو جامد کلاس متغیرات کو شروع کرنے کے لیے استعمال ہوتے ہیں۔ وہی پابندیاں جامد بلاک پر لاگو ہوتی ہیں جو جامد طریقوں پر لاگو ہوتی ہیں: آپ غیر جامد ڈیٹا استعمال نہیں کر سکتے، جیسے کہ کسی جامد بلاک میں موجودہ آبجیکٹ ( this ) کا حوالہ۔ 
36. ایک پبلک چائلڈ کلاس کو دیکھتے ہوئے جو والدین کو بڑھاتا ہے، آبجیکٹ کا ابتدائی ترتیب لکھیں۔
چائلڈ کلاس کو لوڈ کرتے وقت ، ابتدائی ترتیب درج ذیل ہو گی:- پیرنٹ کلاس کے جامد کلاس فیلڈز ۔
- پیرنٹ کلاس کا جامد ابتدائی بلاک ۔
- چائلڈ کلاس کے جامد فیلڈز ۔
- چائلڈ کلاس کا جامد ابتدائی بلاک ۔
- پیرنٹ کلاس کے غیر جامد فیلڈز ۔
- پیرنٹ کلاس کا غیر جامد ابتدائی بلاک ۔
- پیرنٹ کلاس کنسٹرکٹر۔
- چائلڈ کلاس کے غیر جامد فیلڈز ۔
- چائلڈ کلاس کا غیر جامد ابتدائی بلاک ۔
- چائلڈ کلاس کا کنسٹرکٹر ۔

37. آپ کلاسز (آبجیکٹ) کے درمیان کس قسم کے تعلقات کو جانتے ہیں؟
جاوا میں دو قسم کے متغیرات ہیں: قدیم قسمیں اور مکمل اشیاء کے حوالے۔- IS-A تعلقات
Lion IS-A Cat
(لیکن ہر بلی شیر نہیں ہے ) انٹرفیس کے ساتھ بھی یہی صورتحال موجود ہے۔ اگر شیر کلاس WildAnimal انٹرفیس کو لاگو کرتی ہے، تو وہ رشتہ میں بھی موجود ہیں:
Lion IS-A WildAnimal
- HAS-A رشتہ
Car HAS-A Passenger
اور اس کے برعکس: اگر مسافر کے پاس کار کا حوالہ ہے ، تو یہ رشتہ ہوگا:
Passenger HAS-A Car
38. آپ کن چیزوں سے تعلق رکھتے ہیں؟
جمع اور تشکیل ایسوسی ایشن کے خصوصی معاملات سے زیادہ کچھ نہیں ہیں۔ جمع ایک ایسا رشتہ ہے جہاں ایک چیز دوسرے کا حصہ ہوتی ہے۔ مثال کے طور پر، ایک مسافر گاڑی میں موجود ہو سکتا ہے۔ مزید یہ کہ ہو سکتا ہے کہ ایک سے زیادہ مسافر ہوں یا کوئی بھی نہ ہو (اور اگر ہم ٹیسلا کے بارے میں بات کر رہے ہیں تو ہو سکتا ہے کوئی ڈرائیور نہ ہو)۔ مثال کے طور پر:
public class Car {
private List passengers = new ArrayList<>();
void setPassenger(Passenger passenger) {
passengers.add(passenger);
}
void move() {
for (Passenger passenger : passengers) {
System.out.println("Transporting passenger - " + passenger.toString());
}
passengers.clear();
}
}
دوسرے الفاظ میں، مسافروں کی تعداد (کسی میں بھی) ہمارے لیے اہم نہیں ہے: کار کلاس کی فعالیت اس پر منحصر نہیں ہے۔ جمع کا مطلب یہ بھی ہے کہ جب کوئی دوسرا شے ایک شے کو استعمال کرتی ہے، تو پہلی چیز دوسری اشیاء کے ذریعے استعمال کی جا سکتی ہے۔ مثال کے طور پر، ایک ہی طالب علم بننا کلب اور راک بینڈ دونوں میں ہو سکتا ہے اور بیک وقت ہسپانوی کلاس میں شرکت کر سکتا ہے۔ جیسا کہ آپ تصور کر سکتے ہیں، جمع کرنا کلاسوں کے درمیان ایک ڈھیلا سا تعلق ہے۔ کمپوزیشن اس سے بھی زیادہ سخت تعلق ہے جہاں ایک شے نہ صرف کسی دوسری شے کا حصہ ہوتی ہے بلکہ ایک چیز کا کام دوسرے پر بہت زیادہ انحصار کرتا ہے۔ مثال کے طور پر، ایک گاڑی میں انجن ہوتا ہے۔ گاڑی کے بغیر انجن موجود ہو سکتا ہے، لیکن گاڑی کے باہر یہ بیکار ہے۔ اور گاڑی بغیر انجن کے کام نہیں کر سکتی۔
public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
void startMoving() {
engine.start();
...
}
کمپوزیشن کا مطلب یہ بھی ہے کہ جب کوئی دوسری شے کسی چیز کو استعمال کرتی ہے، تو پہلی چیز کسی دوسری چیز سے تعلق نہیں رکھ سکتی۔ ہماری مثال پر واپس جانا، ایک انجن صرف ایک کار کا ہو سکتا ہے، بیک وقت دو یا زیادہ نہیں۔ میرے خیال میں آج کے لیے اتنا ہی کافی ہے، اس لیے ہم یہیں رک جائیں گے۔
GO TO FULL VERSION