- میں ان سوالات کو چھوڑ دوں گا جو مضامین کی اس سیریز کے ساتھ اوورلیپ ہوتے ہیں تاکہ معلومات کو غیر ضروری طور پر نقل نہ کیا جائے۔ میں ان مضامین کو پڑھنے کی تجویز کرتا ہوں کیونکہ یہ جاوا کور انٹرویو کے سب سے عام (مقبول) سوالات کا احاطہ کرتے ہیں۔
- میں جوابات کو مزید تفصیل سے بیان کر سکتا ہوں، لیکن میں ایسا نہیں کروں گا، کیونکہ پھر ہر جواب پورے مضمون کے لیے آگے بڑھ سکتا ہے۔ اور کوئی بھی آپ سے کسی بھی نوکری کے انٹرویو میں اس سطح کی تفصیل نہیں پوچھے گا۔
11. آبجیکٹ کلاس کے تمام طریقوں کو نام دیں۔
آبجیکٹ کلاس کے 11 طریقے ہیں:-
کلاس<?> getClass() - موجودہ آبجیکٹ کی کلاس حاصل کریں۔
-
int hashCode() - موجودہ آبجیکٹ کا ہیش کوڈ حاصل کریں۔
-
boolean equals(Object obj) — موجودہ آبجیکٹ کا کسی اور شے سے موازنہ کریں۔
-
آبجیکٹ کلون () — موجودہ آبجیکٹ کی ایک کاپی بنائیں اور واپس کریں۔
-
String toString() - آبجیکٹ کی سٹرنگ کی نمائندگی حاصل کریں۔
-
void notify() — اس آبجیکٹ کے مانیٹر پر انتظار کرنے والے ایک تھریڈ کو جگائیں (تھریڈ کا انتخاب بے ترتیب ہے)؛
-
void notifyAll() — اس آبجیکٹ کے مانیٹر پر منتظر تمام دھاگوں کو اٹھائیں۔
-
void wait() — موجودہ دھاگے کو موجودہ مانیٹر پر انتظار کریں (موجودہ تھریڈ کو منجمد کریں) جب تک کہ کوئی اطلاع یا مطلع تمام کال تھریڈ کو بیدار نہ کر دے (صرف مطابقت پذیر بلاک میں کام کرتا ہے)؛
-
باطل انتظار (طویل وقت ختم) — موجودہ دھاگے کو موجودہ مانیٹر پر انتظار کریں (موجودہ مطابقت پذیر بلاک پر)، لیکن انتظار کی حالت سے باہر نکلنے کے لیے ایک ٹائم آؤٹ کے ساتھ (یا دوبارہ، جب تک کہ کوئی اطلاع یا مطلع تمام کال تھریڈ کو بیدار نہ کر دے)؛
-
باطل انتظار (طویل وقت ختم، int nanos) - یہ طریقہ پچھلے طریقہ کی طرح ہے، لیکن زیادہ درست ٹائم آؤٹ کے ساتھ؛
-
void finalize() — کوڑا اٹھانے والے کے ذریعہ آبجیکٹ کو ہٹانے سے پہلے اس طریقہ کو (آخر میں) کہا جاتا ہے۔ اس کا استعمال حاصل شدہ وسائل کو صاف کرنے کے لیے کیا جاتا ہے۔
12. وسائل کے ساتھ کام کرتے وقت وسائل کے ساتھ کوشش کرنے اور آخر میں کوشش کرنے کے درمیان کیا فرق ہے؟
عام طور پر، try-catch-finally استعمال کرتے وقت ، حتمی بلاک وسائل کو بند کرنے کے لیے استعمال کیا جاتا ہے۔ جاوا 7 نئے وسائل کے ساتھ کوشش کرنے کا بیان متعارف کرایا ہے۔ وسائل کو آزاد کرنے کے لیے آخر میں کوشش کرنے کے مترادف ہے، لیکن زیادہ کمپیکٹ اور پڑھنے کے قابل۔ آئیے یاد کرتے ہیں کہ ٹرائی کیچ آخر میں کیسا لگتا ہے:String text = "some text......";
BufferedWriter bufferedWriter = null;
try {
bufferedWriter = new BufferedWriter(new FileWriter("someFileName"));
bufferedWriter.write(text);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
اب آئیے اس کوڈ کو دوبارہ لکھتے ہیں، لیکن وسائل کے ساتھ کوشش کریں :
String text = "some text......";
try(BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("someFileName"))) {
bufferedWriter.write(text);
} catch (IOException e) {
e.printStackTrace();
}
اب یہ کسی حد تک آسان ہے، کیا آپ نہیں سوچتے؟ آسان کوڈ کے علاوہ، نوٹ کرنے کے لیے کچھ اور نکات ہیں:
-
وسائل کے ساتھ کوشش کرنے میں ، قوسین میں بیان کردہ وسائل (وسائل جو بند ہو جائیں گے) کو لازمی طور پر AutoCloseable انٹرفیس اور اس کے واحد close() طریقہ کو لاگو کرنا چاہیے۔
کلوز میتھڈ کو ایک مضمر آخر میں بلاک میں عمل میں لایا جاتا ہے ، بصورت دیگر، پروگرام یہ کیسے سمجھے گا کہ وسائل کو کیسے بند کیا جائے؟
لیکن آپ شاذ و نادر ہی وسائل کے اپنے نفاذ اور ان کے اختتامی طریقہ کو لکھیں گے۔
-
بلاکس کو اس ترتیب میں انجام دیا جاتا ہے:
- کوشش بلاک .
- مضمر آخر میں بلاک.
- کیچ بلاک، جو مستثنیات کو پکڑتا ہے جو پچھلے مراحل میں پائے جاتے ہیں ۔
- واضح آخر میں بلاک.
ایک اصول کے طور پر، فہرست میں نیچے ڈالی گئی مستثنیات اوپر ڈالے جانے والوں کو روکتی ہیں۔
13. بٹ وائز آپریشنز کیا ہیں؟
بٹ وائز آپریشنز بٹس کی ترتیب پر ہونے والے آپریشن ہیں۔ ان میں منطقی آپریشنز اور بٹ وائز شفٹ شامل ہیں۔ منطقی آپریٹرز:-
bitwise AND — بٹ ویلیوز کا موازنہ کرتا ہے۔ 0 (غلط) پر سیٹ کوئی بھی بٹ نتیجہ میں متعلقہ بٹ کو 0 پر سیٹ کرتا ہے۔ یعنی، اگر ایک بٹ دونوں موازنہ شدہ قدروں میں 1 (سچ) ہے، تو نتیجہ میں آنے والا بٹ بھی 1 ہوگا۔
AND یا & کے بطور بیان کیا گیا
مثال: 10111101 اور 01100111 = 00100101
-
bitwise OR — یہ آپریشن پچھلے کے برعکس ہے۔ 1 پر سیٹ کوئی بھی بٹ نتیجہ میں متعلقہ بٹ کو 1 پر سیٹ کرتا ہے۔
بطور OR یا |
مثال: 10100101 | 01100011 = 11100111
-
bitwise NOT - یہ آپریٹر ایک واحد قدر پر لاگو ہوتا ہے۔ یہ بٹس کو پلٹتا ہے (الٹا)۔ یعنی جو بٹس 1 تھے وہ 0 بن جاتے ہیں۔ اور جو 0 تھے وہ 1 بن جاتے ہیں۔
NOT یا ~ کے طور پر بیان کیا گیا ہے۔
مثال: ~10100101 = 01011010
-
bitwise exclusive OR — بٹ ویلیوز کا موازنہ کرتا ہے۔ اگر دونوں بٹس 1 ہیں، تو نتیجے میں آنے والا بٹ 0 ہے۔ اگر دونوں بٹس 0 ہیں، تو نتیجے میں آنے والا بٹ 0 ہے۔ دوسرے لفظوں میں، نتیجے میں آنے والا بٹ 1 ہونے کے لیے، صرف ایک بٹ کا 1 ہونا ضروری ہے، اور دوسرا بٹ 0 ہونا چاہیے۔
XOR یا ^ کے طور پر بیان کیا گیا ہے۔
مثال: 10100101 ^ 01100011 = 11000110
- 01100011 >> 4 = 00000110
- 01100011 << 3 = 00011000
14. جاوا میں کون سے معیاری غیر تبدیل شدہ اشیاء ہیں؟
اگر کوئی چیز اپنی اصل اقدار کو تبدیل نہیں ہونے دیتی ہے تو وہ ناقابل تغیر ہے ۔ اس میں ایسے طریقے ہوسکتے ہیں جو ایک ہی قسم کی نئی اشیاء کو مختلف قدروں کے ساتھ واپس کرتے ہیں۔ کچھ معیاری ناقابل تغیر اشیاء میں شامل ہیں:- بلاشبہ، جاوا کی سب سے مشہور ناقابل تغیر قسم String ہے۔
- ریپر کلاسز کی مثالیں جو معیاری اقسام کو لپیٹتی ہیں: بولین، کریکٹر، بائٹ، شارٹ، انٹیجر، لانگ، ڈبل، فلوٹ؛
- BigInteger اور BigDecimal آبجیکٹ، جو عام طور پر خاص طور پر BIG نمبروں کے لیے استعمال ہوتے ہیں۔
- StackTraceElement اشیاء جو اسٹیک ٹریس بناتے ہیں (مثال کے طور پر، کسی استثناء کا اسٹیک ٹریس)؛
- فائل کلاس کا ایک آبجیکٹ - یہ فائلوں میں ترمیم کرسکتا ہے، لیکن ایک ہی وقت میں آبجیکٹ خود میں کوئی تبدیلی نہیں رکھتا ہے۔
- UUIDs، جو اکثر عناصر کی منفرد شناخت کے لیے استعمال ہوتے ہیں۔
- java.time پیکیج میں کلاسز کی تمام اشیاء؛
- مقامی اشیاء، جو جغرافیائی، سیاسی، یا ثقافتی خطے کی شناخت کے لیے استعمال ہوتی ہیں۔
15. عام اشیاء کے مقابلے میں ناقابل تغیر آبجیکٹ کے کیا فوائد ہیں؟
-
غیر تبدیل شدہ اشیاء کثیر تھریڈ ماحول میں استعمال کرنے کے لیے محفوظ ہیں ۔ وہ اسے بناتے ہیں تاکہ آپ کو نسل کے حالات کی وجہ سے ڈیٹا کے نقصان کے بارے میں فکر کرنے کی ضرورت نہیں ہے۔ یہ اس سے مختلف ہے جب آپ عام اشیاء کے ساتھ کام کر رہے ہوں۔ اس صورت میں، آپ کو متوازی ماحول میں آبجیکٹ کا استعمال کرتے وقت سوچنا اور اچھے طریقہ کار کے ساتھ آنا ہوگا۔
-
ناقابل تغیر اشیاء نقشے میں چابیاں کی طرح اچھی ہیں۔ اگر آپ ایک تبدیل شدہ آبجیکٹ کو HashMap کلید کے طور پر استعمال کرتے ہیں اور پھر آبجیکٹ کی حالت بدل جاتی ہے، تو ڈیٹا کا ڈھانچہ الجھن میں پڑ سکتا ہے: آبجیکٹ اب بھی موجود رہے گا، لیکن اگر آپ containsKey() استعمال کرتے ہیں تو شاید آپ کو یہ نہ ملے۔
-
ناقابل تغیر اشیاء ناقابل تغیر (مسلسل) ڈیٹا کو ذخیرہ کرنے کے لیے بہترین ہیں جنہیں پروگرام کے چلنے کے دوران کبھی تبدیل نہیں کیا جانا چاہیے۔
-
ایک اور فائدہ ناکامی جوہری ہے۔ اگر کوئی ناقابل تغیر شے مستثنیٰ ہے تو اسے ناپسندیدہ (ٹوٹی ہوئی) حالت میں نہیں چھوڑا جائے گا۔
-
ان کلاسوں کی جانچ کرنا آسان ہے۔
-
آپ کو کسی اضافی میکانزم کی ضرورت نہیں ہے جیسے کاپی کنسٹرکٹر یا آبجیکٹ کلوننگ کا نفاذ۔
OOP کے بارے میں سوالات
16. عمومی طور پر اور طریقہ کار کے پروگرامنگ کے مقابلے میں OOP کے کیا فوائد ہیں؟
ٹھیک ہے، OOP کے فوائد:-
پیچیدہ ایپلی کیشنز کو طریقہ کار پروگرامنگ کے مقابلے میں OOP کا استعمال کرتے ہوئے لکھنا آسان ہے کیونکہ ہر چیز کو چھوٹے ماڈیولز میں تقسیم کیا جاتا ہے — وہ اشیاء جو ایک دوسرے کے ساتھ تعامل کرتے ہیں — اور اس کے نتیجے میں، پروگرامنگ اشیاء کے درمیان تعلقات تک کم ہو جاتی ہے۔
-
OOP کے ساتھ لکھی گئی ایپلیکیشنز میں ترمیم کرنا بہت آسان ہے (جب ڈیزائن کے اصولوں کا صحیح طور پر مشاہدہ کیا جاتا ہے)۔
-
چونکہ ڈیٹا اور ڈیٹا آپریشنز دونوں ایک ہی ہستی کی تشکیل کرتے ہیں، اس لیے ان کو پوری ایپلی کیشن پر نہیں لگایا جاتا (جو کہ اکثر طریقہ کار پروگرامنگ میں ہوتا ہے)۔
-
انکیپسولیشن کا اصول صارف کے انتہائی اہم ڈیٹا کی حفاظت کرتا ہے۔
-
ایک ہی کوڈ کو مختلف ڈیٹا کے ساتھ دوبارہ استعمال کیا جا سکتا ہے کیونکہ کلاسز آپ کو بہت سی اشیاء بنانے دیتی ہیں، ہر ایک کی اپنی اقدار کے ساتھ۔
-
وراثت اور پولیمورفزم بھی آپ کو موجودہ کوڈ کو دوبارہ استعمال کرنے اور توسیع دینے دیتا ہے (اسی طرح کی فعالیت کو نقل کرنے کے بجائے)۔
-
کسی درخواست کو بڑھانا طریقہ کار کے مقابلے میں آسان ہے۔
-
OOP نقطہ نظر عمل درآمد کی تفصیلات کو ختم کرنا ممکن بناتا ہے۔
17. ہمیں بتائیں کہ OOP کے کیا نقصانات ہیں۔
بدقسمتی سے، وہ بھی موجود ہیں:-
OOP کو بہت سارے نظریاتی علم کی ضرورت ہوتی ہے جس میں مہارت حاصل کرنا ضروری ہے اس سے پہلے کہ آپ کچھ بھی لکھ سکیں۔
-
OOP خیالات کو سمجھنا اور عملی طور پر لاگو کرنا اتنا آسان نہیں ہے (آپ کو دل سے تھوڑا فلسفی بننے کی ضرورت ہے)۔
-
نظام کی بڑھتی ہوئی پیچیدگی کی وجہ سے OOP پروگرام کی کارکردگی کو قدرے کم کرتا ہے۔
-
OOP اپروچ کے لیے زیادہ میموری کی ضرورت ہوتی ہے کیونکہ ہر چیز کلاسز، انٹرفیس، طریقوں پر مشتمل ہوتی ہے، جو عام متغیرات سے کہیں زیادہ میموری لیتے ہیں۔
-
ابتدائی تجزیہ کے لیے درکار وقت ایک طریقہ کار سے زیادہ ہے۔
18. جامد پولیمورفزم بمقابلہ متحرک پولیمورفزم کیا ہے؟
پولیمورفزم ایک ہی کلاس یا انٹرفیس کی اشیاء کو مختلف طریقے سے برتاؤ کرنے کی اجازت دیتا ہے۔ پولیمورفزم کی دو قسمیں ہیں، جنہیں ابتدائی اور دیر سے بائنڈنگ بھی کہا جاتا ہے۔ جامد پولیمورفزم، یا ابتدائی پابند:- مرتب وقت پر ہوتا ہے (پروگرام کے لائف سائیکل کے شروع میں)؛
- فیصلہ کرتا ہے کہ مرتب وقت پر کون سا طریقہ کار انجام دینا ہے۔
- طریقہ اوورلوڈنگ جامد پولیمورفزم کی ایک مثال ہے۔
- ابتدائی پابندی میں نجی، جامد اور حتمی طریقے شامل ہیں؛
- وراثت ابتدائی پابندی میں شامل نہیں ہے؛
- جامد پولیمورفزم میں مخصوص اشیاء شامل نہیں ہوتی ہیں، بلکہ اس کلاس کی قسم کے بارے میں معلومات جو متغیر نام کے بائیں طرف ظاہر ہوتی ہے۔
- رن ٹائم پر ہوتا ہے (جب پروگرام چل رہا ہو)؛
- ڈائنامک پولیمورفزم فیصلہ کرتا ہے کہ رن ٹائم کے وقت طریقہ کار کو کون سا مخصوص عمل درآمد کرنا ہوگا۔
- طریقہ اوور رائیڈنگ ڈائنامک پولیمورفزم کی ایک مثال ہے۔
- لیٹ بائنڈنگ کا مطلب ہے کسی خاص چیز کو تفویض کرنا، اس کی قسم کا حوالہ، یا اس کی سپر کلاس؛
- وراثت کا تعلق متحرک پولیمورفزم سے ہے۔
GO TO FULL VERSION