
71. اگر ہم Enum کے toString() طریقہ کو اوور رائڈ نہیں کرتے ہیں تو کیا ہوگا؟
فرض کریں کہ ہمارے پاس درج ذیل enum ہے :public enum Role {
STUDENT,
TEACHER,
DIRECTOR,
SECURITY_GUARD;
}
آئیے کنسول پر اسٹوڈنٹ فیلڈ کو اس کے toString() طریقہ پر کال کرکے ڈسپلے کریں:
System.out.println(Role.STUDENT.toString());
نتیجے کے طور پر، ہمیں مندرجہ ذیل کنسول آؤٹ پٹ ملتا ہے:
72. کیا آپ Enum کے اندر کنسٹرکٹر کا اعلان کر سکتے ہیں؟
جی بلکل. کنسٹرکٹر وہ ہے جو enum کے اندرونی فیلڈز کی قدریں متعین کرتا ہے۔ مثال کے طور پر، آئیے ہر کردار کے لیے عمر کی حد کی نشاندہی کرنے کے لیے پچھلے enum ( ageFrom اور ageTo ) میں دو فیلڈز شامل کریں:public enum Role {
STUDENT(5,18),
TEACHER(20,60),
DIRECTOR(40,70),
SECURITY_GUARD(18,50);
int ageFrom;
int ageTo;
Role(int ageFrom, int ageTo) {
this.ageFrom = ageFrom;
this.ageTo = ageTo;
}
}
73. == اور برابر () میں کیا فرق ہے؟
یہ جاوا ڈویلپرز سے پوچھے جانے والے سب سے عام انٹرویو سوالات میں سے ایک ہے۔ شروع کرنے کے لیے، سادہ اقدار ( int , char , double ...) کا موازنہ کرتے وقت، ہم استعمال کرتے ہیں == ، کیونکہ ان متغیرات میں ٹھوس قدریں ہوتی ہیں جن کا براہ راست موازنہ کیا جا سکتا ہے۔ مزید یہ کہ قدیم متغیرات مکمل آبجیکٹ نہیں ہیں - وہ آبجیکٹ کلاس کے وارث نہیں ہوتے ہیں اور ان کے پاس برابر () طریقہ نہیں ہوتا ہے ۔ اگر ہم متغیرات کا موازنہ کرنے کے بارے میں بات کر رہے ہیں جو اشیاء کا حوالہ دیتے ہیں، تو ہمیں یہ جاننے کی ضرورت ہے کہ == صرف حوالہ جات کی قدر کا موازنہ کرتا ہے، یعنی آیا وہ ایک ہی چیز کا حوالہ دیتے ہیں یا نہیں۔ یہاں تک کہ اگر ایک آبجیکٹ میں موجود تمام ڈیٹا دوسرے میں موجود تمام ڈیٹا سے یکساں ہے، تو موازنہ کے لیے == استعمال کرنے سے منفی نتیجہ نکلے گا ( false )، کیونکہ وہ الگ الگ اشیاء ہیں۔ جیسا کہ آپ نے اندازہ لگایا ہوگا، ہم حوالہ متغیرات کا موازنہ کرنے کے لیے equals() طریقہ استعمال کرتے ہیں۔ یہ آبجیکٹ کلاس کے معیاری طریقوں میں سے ایک ہے، اور اشیاء کے مکمل موازنہ کے لیے ضروری ہے۔ لیکن مجھے ابھی یہ کہنا ضروری ہے کہ اس طریقہ کار کے صحیح طریقے سے کام کرنے کے لیے، اس بات کی نشاندہی کرنے کے لیے اسے اوور رائڈ کرنا چاہیے کہ اشیاء کا موازنہ کیسے کیا جانا چاہیے۔ اگر آپ طریقہ کو اوور رائڈ نہیں کرتے ہیں، تو آپ کو پہلے سے طے شدہ نفاذ ملے گا، جو استعمال کرکے اشیاء کا موازنہ کریں گے == ۔ IntelliJ IDEA میں، آپ IDEA شارٹ کٹ کا استعمال کرتے ہوئے اسے خود بخود اوور رائڈ کر سکتے ہیں: Alt+Insert ۔ ظاہر ہونے والی ونڈو میں، equals() اور hashCode() کو منتخب کریں ۔ پھر وہ فیلڈز منتخب کریں جن میں شامل ہونا چاہیے۔ Voila! طریقے خود بخود لاگو ہوتے ہیں۔ یہاں اس کی ایک مثال ہے کہ کس طرح خود بخود پیدا ہونے والا مساوی طریقہ دو فیلڈز - int age اور String name کے ساتھ سب سے آسان ممکنہ Cat کلاس کو تلاش کرتا ہے ۔@Override
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || this.getClass() != o.getClass()) return false;
final Cat cat = (Cat) o;
return this.age == cat.age &&
Objects.equals(this.name, cat.name);
}
جب بات آتی ہے enum ، تو اس میں کوئی عملی فرق نہیں ہے == اور equals() ۔ 


74. Enum کا ordinal() طریقہ کیا کرتا ہے؟
جب ہم اینوم فیلڈ پر int ordinal() طریقہ کو کال کرتے ہیں، تو ہمیں enum ویلیو کی فہرست میں فیلڈ کا صفر پر مبنی انڈیکس ملتا ہے۔ آئیے اس طریقہ کو رول اینوم میں ایک فیلڈ پر کہتے ہیں، جس پر ہم نے پہلے غور کیا تھا:System.out.println(Role.DIRECTOR.ordinal());
اس کے مطابق، کنسول دکھاتا ہے:
75. کیا جاوا میں Enum TreeSet یا TreeMap کے ساتھ استعمال کیا جا سکتا ہے؟
ہم Enum کی اقسام TreeSet اور TreeMap میں استعمال کر سکتے ہیں ۔ اور ہم یہ لکھ سکتے ہیں:TreeSet<Role> treeSet = new TreeSet<>();
treeSet.add(Role.SECURITY_GUARD);
treeSet.add(Role.DIRECTOR);
treeSet.add(Role.TEACHER);
treeSet.add(Role.STUDENT);
treeSet.forEach(System.out::println);
اور کنسول ظاہر کرے گا:
76. Enum کے ordinal() اور compareTo() طریقوں کا آپس میں کیا تعلق ہے؟
جیسا کہ پہلے ذکر کیا گیا ہے، ordinal() enum فیلڈز کی فہرست میں ایک فیلڈ کا انڈیکس لوٹاتا ہے۔ اس کے علاوہ، ہمارے پچھلے سوال پر غور کرتے ہوئے، آپ نے دیکھا کہ جب enum فیلڈز کو TreeSet (جو کہ ایک ترتیب شدہ سیٹ ہے) میں ڈالا جاتا ہے، تو وہ اس ترتیب کو اپناتے ہیں جس میں ان کا اعلان enum میں کیا جاتا ہے ۔ اور جیسا کہ ہم جانتے ہیں، TreeSet اور TreeMap اپنے موازنہ انٹرفیس کے compareTo() طریقہ کو کال کرکے آئٹمز کو ترتیب دیتے ہیں ۔ یہ ہمیں بتاتا ہے کہ Enum کلاس تقابلی انٹرفیس کو لاگو کرتی ہے، جس کا مطلب ہے کہ یہ compareTo() طریقہ کو نافذ کرتا ہے، جو ترتیب ترتیب کا تعین کرنے کے لیے اندرونی طور پر ordinal() طریقہ استعمال کرتا ہے۔ Enum کلاس میں جا کر ، ہم اپنے مفروضے کی تصدیق کر سکتے ہیں: اور یہاں خود طریقہ کا حصہ ہے: ordinal () طریقہ یہاں نہیں کہا جاتا ہے۔ اس کے بجائے، آرڈینل متغیر استعمال کیا جاتا ہے، جو شمار میں عنصر کا اشاریہ نمبر ہے۔ ordinal () طریقہ بذات خود آرڈینل متغیر کے لیے حاصل کرنے والے سے زیادہ کچھ نہیں ہے ۔


77. ایک مثال Enum لکھیں۔
اوپر زیر بحث سوالات میں، میں پہلے ہی enum s کی مثالیں دے چکا ہوں۔ مجھے یہاں کوڈ ڈپلیکیٹ کرنے کی کوئی وجہ نظر نہیں آتی۔ مثال کے طور پر، انوم میں کنسٹرکٹر کے حوالے سے سوال 72 دیکھیں۔78. کیا سوئچ کیس میں Enum استعمال کیا جا سکتا ہے؟
یہ ہو سکتا ہے اور ہونا چاہیے! اپنے تجربے کو دیکھتے ہوئے، میں نوٹ کروں گا کہ enum کے سب سے عام استعمال میں سے ایک منطقی تعمیرات جیسے سوئچ بیانات میں ہے۔ اس صورت میں، آپ تمام ممکنہ کیس فراہم کر سکتے ہیں — ایک بار جب آپ ہر اینوم فیلڈ کے لیے منطق لکھتے ہیں ، تو آپ کو پہلے سے طے شدہ شق کی بھی ضرورت نہیں ہوتی ! بہر حال، اگر آپ String یا عددی قدر استعمال کرتے ہیں، جیسے کہ int ، تو آپ کو ایک غیر متوقع قدر مل سکتی ہے، لیکن enum کے ساتھ یہ ناممکن ہے ۔ مندرجہ بالا مثال کے لیے سوئچ اسٹیٹمنٹ کیسا نظر آئے گا وہ یہ ہے :public void doSomething(Role role) {
switch (role) {
case STUDENT:
// some logic for STUDENT
break;
case TEACHER:
// some logic for TEACHER
break;
case DIRECTOR:
// some logic for DIRECTOR
break;
case SECURITY_GUARD:
// some logic for SECURITY_GUARD
break;
}
}
79. میں Enum کی تمام ممکنہ قدریں کیسے حاصل کروں؟
اگر آپ کو تمام ممکنہ enum اقدار حاصل کرنے کی ضرورت ہے تو، ایک values() طریقہ موجود ہے، جو enum کے لیے ان کی فطری ترتیب میں تمام ممکنہ قدروں کی ایک صف واپس کرتا ہے (یعنی اس ترتیب میں جس میں ان کی وضاحت کی گئی ہے enum ) ۔ مثال:Role[] roles = Role.values();
for (Role role : roles) {
System.out.println(role);
}
ہمارے پاس کنسول پر درج ذیل چیزیں ہوں گی۔
اسٹریم API
80. جاوا میں سٹریم کیا ہے؟
Java Stream API ڈیٹا سٹریم کے ساتھ تعامل کا ایک نسبتاً نیا طریقہ ہے، جو ہمیں بڑے ڈیٹا کو زیادہ آسانی سے اور مکمل طور پر پروسیس کرنے کی اجازت دیتا ہے، اور ساتھ ہی ساتھ کچھ تعداد میں اسٹریمز کے درمیان ڈیٹا کو متوازی طور پر پروسیس کرنے کی اجازت دیتا ہے، ممکنہ طور پر کارکردگی کو بڑھاتا ہے۔81. لین دین کی اہم خصوصیات کے نام بتائیں
یہاں موضوع Stream API ہے، لیکن سوال لین دین کے بارے میں ہے۔ ہمم... پہلے، آئیے سمجھیں کہ لین دین کیا ہے۔ ٹرانزیکشن ڈیٹا بیس پر ترتیب وار کارروائیوں کا ایک گروپ ہے ۔ یہ کام کی منطقی اکائی کی نمائندگی کرتا ہے۔ ایک ٹرانزیکشن کو دیگر ہم آہنگی لین دین سے آزادانہ طور پر یا تو مکمل طور پر اور کامیابی کے ساتھ انجام دیا جاسکتا ہے، اس طرح ڈیٹا کی سالمیت کو برقرار رکھا جاتا ہے، یا بالکل بھی نہیں کیا جاتا، ایسی صورت میں اس کا کوئی اثر نہیں ہوتا ہے۔ لین دین میں چار اہم خصوصیات ہیں، جنہیں ہم ACID کے مخفف کی بدولت آسانی سے یاد رکھ سکتے ہیں ۔ آئیے دیکھتے ہیں کہ اس مخفف کے ہر حرف کا کیا مطلب ہے: A کا مطلب Atomicity ہے ۔ یہ خاصیت اس بات کی ضمانت دیتی ہے کہ نظام میں کوئی بھی لین دین جزوی طور پر نہیں ہوتا ہے۔ یا تو اس کی تمام ذیلی کارروائیاں عمل میں لائی جائیں گی، یا ان میں سے کسی پر بھی عمل نہیں کیا جائے گا ( تمام یا کچھ بھی نہیں )۔ С کا مطلب مستقل مزاجی ہے ۔ یہ پراپرٹی اس بات کی ضمانت دیتی ہے کہ ہر کامیاب لین دین صرف درست نتائج کا ارتکاب کرے گا۔ دوسرے لفظوں میں، یہ اس بات کی ضمانت ہے کہ اگر لین دین کامیاب ہو جاتا ہے، تو مخصوص ڈیٹا کے لیے سسٹم کے تمام اصولوں کی پابندی کی جائے گی۔ اگر لین دین کامیاب نہیں ہوتا ہے، تو اس پر عمل نہیں کیا جائے گا اور سسٹم کا ڈیٹا اپنی سابقہ حالت میں واپس آجائے گا۔ I Isolation کا مطلب ہے ۔ اس خاصیت کا مطلب یہ ہے کہ جب کوئی لین دین ہوتا ہے تو ہم آہنگی کے لین دین سے اس کے نتائج کو متاثر نہیں کرنا چاہیے۔ یہ خاصیت وسائل پر مبنی ہے، لہذا، ایک اصول کے طور پر، یہ جزوی طور پر لاگو کیا جاتا ہے، مخصوص سطحوں کی تنہائی کی اجازت دیتا ہے جو مخصوص تنہائی کے مسائل کو حل کرتا ہے۔ ہم اگلے سوال میں اس پر مزید تفصیل سے بات کریں گے۔ D کا مطلب ہے پائیداری ۔ یہ پراپرٹی اس بات کی ضمانت دیتی ہے کہ اگر صارف کو تصدیق ملتی ہے کہ لین دین مکمل ہو گیا ہے، تو وہ اس بات کا یقین کر سکتا ہے کہ تبدیلیاں کسی ناکامی کی وجہ سے منسوخ نہیں ہوں گی۔ یعنی، آپ یقین کر سکتے ہیں کہ آپریٹنگ سسٹم کی کچھ ناکامی آپ کے ڈیٹا کو کچھ نہیں دے گی اگر آپ کو پہلے ہی تصدیق موصول ہو گئی ہے کہ آپ کا لین دین کامیابی سے مکمل ہو گیا ہے۔82. لین دین کی تنہائی کی سطحیں کیا ہیں؟
جیسا کہ میں نے پہلے کہا، جب ACID کی خصوصیات کی بات آتی ہے، تو تنہائی کو یقینی بنانا ایک وسائل پر مبنی عمل ہے۔ اس کے مطابق، اس پراپرٹی کو جزوی طور پر نافذ کیا گیا ہے۔ تنہائی کی مختلف سطحیں ہیں: سطح جتنی زیادہ ہوگی، کارکردگی پر اتنا ہی شدید اثر پڑے گا۔ اس سے پہلے کہ ہم لین دین کی تنہائی کی سطح پر جائیں، ہمیں مختلف مسائل پر غور کرنے کی ضرورت ہے جو کہ ناکافی لین دین کی تنہائی کی وجہ سے پیش آتی ہیں :-
فینٹم پڑھتا ہے : جب ایک ہی درخواست، ایک ہی لین دین میں ایک سے زیادہ مرتبہ کال کی جاتی ہے، تو دوسرے لین دین کے اندراج کی وجہ سے مختلف نتائج برآمد ہوتے ہیں۔
-
nonrepeatable reads : جب ایک ہی درخواست، ایک ہی لین دین میں ایک سے زیادہ مرتبہ کال کی جاتی ہے، تبدیلیوں (اپ ڈیٹس) اور کسی دوسرے لین دین کے ذریعے حذف ہونے کی وجہ سے مختلف ڈیٹا حاصل کرتا ہے۔
-
گندا پڑھنا : ابھی تک غیر ذمہ دار ڈیٹا کو پڑھنا جو کسی لین دین کے ذریعے شامل یا تبدیل کیا گیا ہے اور بعد میں اسے واپس کر دیا گیا ہے۔
-
گم شدہ اپڈیٹس : جب ایک ڈیٹا بلاک کو بیک وقت مختلف لین دین کے ذریعے تبدیل کیا جاتا ہے، اور آخری کو چھوڑ کر تمام تبدیلیاں ضائع ہوجاتی ہیں (ملٹی تھریڈنگ میں ریس کی حالت کی طرح)۔
تنہائی کی سطح | پریت پڑھتا ہے۔ | ناقابل تکرار پڑھنا | گندا پڑھتا ہے۔ | اپ ڈیٹ کھو گیا۔ |
---|---|---|---|---|
سیریلائزیبل | + | + | + | + |
دوبارہ پڑھنے کے قابل | - | + | + | + |
پرعزم پڑھیں | - | - | + | + |
بلاوجہ پڑھیں | - | - | - | + |
کوئی نہیں۔ | - | - | - | - |
83. ایک بیان اور تیار بیان میں کیا فرق ہے؟
یہاں ہم نے اچانک JDBC کی خصوصیات میں منتقلی کو تبدیل کر دیا ہے ۔ کسی بھی صورت میں، آئیے پہلے یہ معلوم کریں کہ بیان کیا ہے۔ یہ ایک ایسی شے ہے جو SQL سوالات کی تشکیل کے لیے استعمال ہوتی ہے۔ JDBC تین قسموں کا استعمال کرتا ہے: بیان ، تیار بیان ، اور CallableStatement ۔ ہم آج CallableStatement پر غور نہیں کریں گے ۔ اس کے بجائے، ہم بیان اور PreparedStatement کے درمیان فرق کے بارے میں بات کر رہے ہیں ۔-
بیان کا استعمال رن ٹائم ان پٹ پیرامیٹرز کے بغیر سادہ SQL سوالات کو انجام دینے کے لیے کیا جاتا ہے۔ PrepareStatement رن ٹائم پر ان پٹ پیرامیٹرز کو قبول کر سکتا ہے۔
-
PreparedStatement کے لیے پیرامیٹرز سیٹ کرنے کے لیے ، ان پٹ پیرامیٹرز کو درخواست میں سوالیہ نشان کے طور پر لکھا جاتا ہے، اس لیے انہیں مختلف سیٹرز، جیسے setDouble() , setFloat() , setInt() , setTime() کا استعمال کرتے ہوئے کچھ قدر سے تبدیل کیا جا سکتا ہے ۔ اس کا مطلب ہے کہ آپ درخواست میں غلط قسم کا ڈیٹا داخل نہیں کریں گے۔
-
PreparedStatement پہلے سے مرتب کیا گیا ہے اور کیشنگ کا استعمال کرتا ہے، لہذا اسے اسٹیٹمنٹ آبجیکٹ سے کی گئی درخواست کے مقابلے میں قدرے تیزی سے عمل میں لایا جا سکتا ہے ۔ نتیجے کے طور پر، کارکردگی کو بہتر بنانے کے لیے ایس کیو ایل سٹیٹمنٹس جو کثرت سے عمل میں آتے ہیں کو PreparedStatement آبجیکٹ کے طور پر بنایا جاتا ہے۔
-
اسٹیٹمنٹ ایس کیو ایل انجیکشن کے لیے خطرناک ہے، لیکن PreparedStatement انہیں روکتا ہے۔
GO TO FULL VERSION