CodeGym /جاوا بلاگ /Random-UR /جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات ا...
John Squirrels
سطح
San Francisco

جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔ حصہ 4

گروپ میں شائع ہوا۔
سب کو سلام! آج میں جاوا ڈویلپر انٹرویو کے سوالات کا جائزہ لے رہا ہوں۔ جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 4 - 1

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;
}
لیکن اگر ہم ٹھوس اقدار کے بارے میں بات کر رہے ہیں، تو واپسی کا مطلوبہ لفظ کوئی خاص قدر واپس نہیں کر سکتا کیونکہ:
  • جب آپ کنسٹرکٹر کا اعلان کرتے ہیں، تو آپ کے پاس واپسی کی قسم جیسی کوئی چیز نہیں ہوگی۔
  • ایک اصول کے طور پر، کنسٹرکٹر کو انسٹی ٹیشن کے دوران واضح طور پر بلایا جاتا ہے۔
  • کنسٹرکٹر کوئی طریقہ نہیں ہے: یہ ایک الگ طریقہ کار ہے جس کا واحد مقصد مثال کے متغیرات کو شروع کرنا ہے، یعنی ہم ایک آبجیکٹ بنانے کے لیے نئے آپریٹر کا استعمال کر رہے ہیں۔
جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 4 - 2

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. کلاس ہیڈر کے عناصر کیا ہیں؟ ایک مثال لکھیں۔

ان عناصر کی وضاحت کرنے کے لیے جو کلاس ہیڈر بناتے ہیں، آئیے ایک چھوٹی اسکیما دیکھیں:
  • لازمی عناصر بریکٹ <> میں ظاہر ہوتے ہیں۔
  • اختیاری عناصر {} میں ہیں
{access modifier}{static}{final}{abstract}<class name>{والدین کی کلاس کا وراثت}انٹرفیس کا نفاذ} تو، ہمارے پاس کیا ہے: {access modifier} — صرف عوامی اور پہلے سے طے شدہ رسائی موڈیفائر دستیاب ہیں کلاس {static}static modifier اشارہ کرتا ہے کہ یہ کلاس جامد ہے۔ یہ صرف اندرونی کلاسوں پر لاگو ہوتا ہے (دوسری کلاسوں کے اندر کی کلاسیں)۔ {final} — یہ حتمی ترمیم کنندہ ہے، یقیناً، جو کلاس کو ناقابل وراثت بناتا ہے (ایک باہر کی مثال String ہے )۔ {abstract}تجریدی ترمیم کنندہ، جو اس بات کی نشاندہی کرتا ہے کہ کلاس میں غیر لاگو طریقے ہو سکتے ہیں۔ یہ ترمیم کنندہ حتمی ترمیم کنندہ سے متصادم ہے۔ کلاس ہیڈر میں ان میں سے صرف ایک ہو سکتا ہے کیونکہ خلاصہ موڈیفائر کا مطلب ہے کہ کلاس وراثت میں ملے گی اور اس کے تجریدی عناصر کو لاگو کیا جائے گا۔ لیکن فائنل اشارہ کرتا ہے کہ یہ کلاس کا آخری ورژن ہے، اور یہ کہ اسے وراثت میں نہیں مل سکتا۔ دراصل، بیک وقت دونوں ترمیم کاروں کا استعمال مضحکہ خیز ہوگا۔ مرتب کرنے والا ہمیں ایسا نہیں کرنے دے گا۔ <class> ایک لازمی کلیدی لفظ ہے جو کلاس ڈیکلریشن کی نشاندہی کرتا ہے۔ <class name> ایک سادہ کلاس کا نام ہے جو ایک مخصوص جاوا کلاس کا شناخت کنندہ بن جاتا ہے۔ مکمل طور پر اہل کلاس کا نام اہل پیکیج کے نام کے علاوہ '.' پر مشتمل ہوتا ہے۔ نیز سادہ کلاس کا نام۔ {والدین کی کلاس کی وراثت} توسیع شدہ کلیدی لفظ کا استعمال کرتے ہوئے پیرنٹ کلاس (اگر کوئی ہے) کا اشارہ ہے ۔ مثال کے طور پر، ... توسیع کرتا ہے ParentClass ۔ {انٹرفیس کا نفاذ} — ان انٹرفیسز کی ایک فہرست جنہیں یہ کلاس لاگو کرتی ہے (اگر کوئی ہے)، امپلیمینٹس کلیدی لفظ کا استعمال کرتے ہوئے۔ مثال کے طور پر: ... فرسٹ انٹرفیس، سیکنڈ انٹرفیس کو لاگو کرتا ہے ... مثال کے طور پر، شیر کلاس کی کلاس ہیڈنگ پر غور کریں، جو بلی کو وراثت میں حاصل کرتا ہے اور وائلڈ اینیمل انٹرفیس کو نافذ کرتا ہے:

public final class Lion extends Cat implements WildAnimal
جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 4 - 3

32. طریقہ ہیڈر کے عناصر کیا ہیں؟ ایک مثال لکھیں۔

ان عناصر پر غور کرتے وقت جو طریقہ کار کا ہیڈر بناتے ہیں، آئیے ایک بار پھر ایک چھوٹے اسکیما پر غور کریں:
  • لازمی عناصر بریکٹ <> میں ظاہر ہوتے ہیں۔
  • اختیاری عناصر {} میں ہیں
{access modifier}{static}{abstract}{final}{synchronized} {native} <return value><method name> <(>{method parameters}<}>{throw exceptions} {access modifier} — تمام رسائی موڈیفائر ہیں طریقہ کار کے لیے دستیاب ہے — عوامی ، محفوظ ، ڈیفالٹ ، نجی ۔ {static}جامد ترمیم کنندہ، جو اس بات کی نشاندہی کرتا ہے کہ طریقہ جامد ہے اور اس لیے کلاس سے وابستہ ہے، کسی چیز سے نہیں ۔ طریقہ کار کا کوئی نفاذ (باڈی) نہیں ہے۔ درست طریقے سے کام کرنے کے لیے، طریقہ کار کا اعلان کرنے والی کلاس کے پاس بھی خلاصہ موڈیفائر ہونا ضروری ہے ۔ جیسا کہ کلاس ہیڈر میں، یہ ترمیم کنندہ حتمی موڈیفائر سے متصادم ہے، اور جامد ترمیم کنندہ سے بھی متصادم ہے، کیونکہ ایک تجریدی طریقہ کا مطلب یہ ہے کہ طریقہ کو نزول میں اوور رائیڈ کیا جائے، اور جامد طریقوں کو اوور رائڈ نہیں کیا جا سکتا۔ {finale} حتمی ترمیم کنندہ، جو اس بات کی نشاندہی کرتا ہے کہ اس طریقہ کو اوور رائڈ نہیں کیا جا سکتا۔ مختلف دھاگوں سے اس تک بیک وقت رسائی۔ اگر طریقہ جامد نہیں ہے، تو یہ آبجیکٹ کے اس mutex کے لیے بند ہے۔ اگر طریقہ جامد ہے، تو یہ موجودہ کلاس کے mutex کے لیے بند ہے۔ {native}مقامی ترمیم کنندہ اشارہ کرتا ہے کہ طریقہ کسی اور پروگرامنگ زبان میں لکھا گیا ہے۔ <return type> - قدر کی قسم جو طریقہ کو واپس کرنا ضروری ہے۔ اگر طریقہ کچھ واپس نہیں کرتا ہے، تو void ۔ <method name> — طریقہ کے نام کا نام، یعنی سسٹم میں اس کا شناخت کنندہ۔ {طریقہ پیرامیٹرز} — وہ پیرامیٹرز جنہیں طریقہ قبول کرتا ہے: وہ اس کی فعالیت کو نافذ کرنے کے لیے ضروری ہیں۔ {thrown exceptions}پھینک دیتا ہے <ExceptionType> — چیک کیے گئے مستثنیات کی ایک فہرست جسے یہ طریقہ پھینک سکتا ہے۔ میں طریقہ کے ہیڈر کی مثال کے طور پر درج ذیل پیش کروں گا۔

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);
   }
}
جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 4 - 4

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;
}
کیٹ آبجیکٹ بنانے کے لیے پہلے کنسٹرکٹر کو کال کرتے وقت ، دونوں مثال کے فیلڈز کو کامیابی کے ساتھ شروع کیا جائے گا۔ یہاں چند باریکیاں ہیں:
  1. یہ () صرف کنسٹرکٹر میں کام کرتا ہے۔
  2. دوسرے کنسٹرکٹر کا حوالہ کنسٹرکٹر بلاک (باڈی) کی پہلی لائن میں ہونا چاہیے۔ اس کا مطلب ہے کہ ایک کنسٹرکٹر اپنی کلاس کے ایک سے زیادہ (دوسرے) کنسٹرکٹر کو کال نہیں کر سکتا۔
جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 4 - 5

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 ) کا حوالہ۔ جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 4 - 6اب ہم کلاس کی ابتداء کی ترتیب کو دیکھ سکتے ہیں (اس کے پیرنٹ کلاس کے ساتھ) تاکہ یہ بہتر طور پر سمجھ سکیں کہ ابتداء کے بلاکس کب شروع کیے جاتے ہیں۔

36. ایک پبلک چائلڈ کلاس کو دیکھتے ہوئے جو والدین کو بڑھاتا ہے، آبجیکٹ کا ابتدائی ترتیب لکھیں۔

چائلڈ کلاس کو لوڈ کرتے وقت ، ابتدائی ترتیب درج ذیل ہو گی:
  1. پیرنٹ کلاس کے جامد کلاس فیلڈز ۔
  2. پیرنٹ کلاس کا جامد ابتدائی بلاک ۔
  3. چائلڈ کلاس کے جامد فیلڈز ۔
  4. چائلڈ کلاس کا جامد ابتدائی بلاک ۔
  5. پیرنٹ کلاس کے غیر جامد فیلڈز ۔
  6. پیرنٹ کلاس کا غیر جامد ابتدائی بلاک ۔
  7. پیرنٹ کلاس کنسٹرکٹر۔
  8. چائلڈ کلاس کے غیر جامد فیلڈز ۔
  9. چائلڈ کلاس کا غیر جامد ابتدائی بلاک ۔
  10. چائلڈ کلاس کا کنسٹرکٹر ۔
جاوا ڈویلپر کی پوزیشن کے لیے نوکری کے انٹرویو سے سوالات اور جوابات تلاش کرنا۔  حصہ 4 - 7

37. آپ کلاسز (آبجیکٹ) کے درمیان کس قسم کے تعلقات کو جانتے ہیں؟

جاوا میں دو قسم کے متغیرات ہیں: قدیم قسمیں اور مکمل اشیاء کے حوالے۔
  • IS-A تعلقات
OOP کا IS-A اصول طبقاتی وراثت یا انٹرفیس کے نفاذ پر مبنی ہے۔ مثال کے طور پر، اگر شیر طبقے کو Cat وراثت میں ملتا ہے ، تو ہم کہتے ہیں کہ شیر ایک بلی ہے :

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();
           ...
   }
کمپوزیشن کا مطلب یہ بھی ہے کہ جب کوئی دوسری شے کسی چیز کو استعمال کرتی ہے، تو پہلی چیز کسی دوسری چیز سے تعلق نہیں رکھ سکتی۔ ہماری مثال پر واپس جانا، ایک انجن صرف ایک کار کا ہو سکتا ہے، بیک وقت دو یا زیادہ نہیں۔ میرے خیال میں آج کے لیے اتنا ہی کافی ہے، اس لیے ہم یہیں رک جائیں گے۔
مزید پڑھ:
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION