71. اگر ہم Enum کے لیے toString() طریقہ کو اوور رائڈ نہیں کرتے ہیں تو کیا ہوگا؟
ہم کہتے ہیں کہ ہمارے پاس درج ذیل اینوم ہے :public enum Role {
STUDENT,
TEACHER,
DIRECTOR,
SECURITY_GUARD;
}
آئیے طالب علم کو toString() پر کال کرکے کنسول میں ڈسپلے کریں :
System.out.println(Role.STUDENT.toString());
کنسول میں نتیجہ:
72. کیا 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 ...) کا موازنہ کرتے ہیں تو ہم اسے == کا استعمال کرتے ہوئے کرتے ہیں ، کیونکہ متغیر میں مخصوص قدریں ہوتی ہیں اور ہم ان کا موازنہ کر سکتے ہیں۔ اور پرائمیٹو متغیر مکمل آبجیکٹ نہیں ہیں - وہ آبجیکٹ سے وراثت میں نہیں آتے ہیں اور ان کے پاس equals() طریقہ نہیں ہے ۔ جب ہم متغیرات کا موازنہ کرنے کے بارے میں بات کرتے ہیں جو اشیاء کا حوالہ دیتے ہیں، == صرف حوالہ جات کی قدر کا موازنہ کریں گے - چاہے وہ ایک ہی چیز کا حوالہ دیتے ہیں یا نہیں۔ اور یہاں تک کہ اگر ایک شے دوسرے سے مماثل ہے تو، == کے ذریعے موازنہ منفی نتیجہ دے گا ( 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);
}
اگر ہم == اور enums کے برابر کے درمیان فرق کے بارے میں بات کریں تو اس میں زیادہ کچھ نہیں ہے۔ بہر حال، enum مستقل کو ذخیرہ کرتا ہے، اور یہاں تک کہ جب بھی == کا استعمال کرتے ہوئے ملتی جلتی قدروں کا موازنہ کریں، تو ہمیں true موصول ہوگا ، کیونکہ حوالہ جات ہمیشہ ایک ہی اشیاء کے ہوں گے۔ ٹھیک ہے، برابر کا استعمال کرتے وقت ، ہم فعالیت کو بھی درست طریقے سے دیکھیں گے، خاص طور پر اگر آپ enum کے لیے equals طریقہ کی باڈی میں جائیں تو آپ دیکھیں گے کہ Enum کلاس میں طریقہ کار کا نفاذ کچھ یوں ہے: یعنی، اندر - حوالہ کے لحاظ سے اچھا پرانا موازنہ! خلاصہ کرنے کے لیے: enum کے لیے == اور برابر دونوں کا موازنہ درست ہے۔
74. ordinal() طریقہ Enum میں کیا کرتا ہے؟
جب کسی enum عنصر پر int ordinal() میتھڈ کو کال کرتے ہیں ، تو ہم شماروں کی عمومی سیریز میں اس قدر کے صفر سے آرڈینل نمبر حاصل کریں گے۔ آئیے اس طریقہ کار کو پچھلے بحث شدہ اینوم کے ایک عنصر پر استعمال کریں - کردار :System.out.println(Role.DIRECTOR.ordinal());
اس کے مطابق، کنسول ظاہر کرے گا:
75. کیا جاوا میں TreeSet یا TreeMap کے ساتھ Enum کا استعمال ممکن ہے؟
TreeSet اور TreeMap میں enum اقسام کا استعمال قابل قبول ہے۔ اور ہم لکھ سکتے ہیں: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() عام گنتی کی فہرست میں کسی قدر کا آرڈینل نمبر لوٹاتا ہے۔ اس کے علاوہ، پچھلے سوال کے تجزیے میں، آپ نے دیکھا کہ شماریات کے عناصر، ایک بار، مثال کے طور پر، TreeSet (ترتیب شدہ سیٹ) میں وہ ترتیب لیتے ہیں جس میں ان کا اعلان enum میں کیا جاتا ہے ۔ اور جیسا کہ ہم جانتے ہیں، TreeSet اور TreeMap عناصر کو موازنہ انٹرفیس کے compareTo() طریقہ کو کال کرکے ترتیب دیتے ہیں ۔ اس سے ہم یہ فرض کر سکتے ہیں کہ Enum کلاس CompareTo() طریقہ کار میں تقابلی انٹرفیس کو نافذ کرتی ہے ، جس کے اندر ordinal() کو ترتیب ترتیب دینے کے لیے استعمال کیا جاتا ہے۔ Enum کلاس میں داخل ہونے کے بعد ، ہمیں اس کی تصدیق نظر آتی ہے: اور خود طریقہ کا باڈی: ordinal() طریقہ یہاں نہیں کہا جاتا ہے۔ اس کے بجائے، آرڈینل متغیر استعمال کیا جاتا ہے - شمار میں عنصر کی آرڈینل نمبر۔ ordinal() طریقہ بذات خود آرڈینل متغیر کے لیے حاصل کرنے والے سے زیادہ کچھ نہیں ہے ۔77. ایک مثال EnumM لکھیں۔
اوپر زیر بحث سوالات میں، میں نے پہلے ہی enums کی مثالیں دی ہیں اور مجھے کوڈ کو ڈپلیکیٹ کرنے کا کوئی فائدہ نظر نہیں آتا (مثال کے طور پر، enum میں کنسٹرکٹر کے بارے میں سوال نمبر 72)۔78. کیا سوئچ کیس میں Enum کا استعمال ممکن ہے؟
یہ ممکن اور ضروری ہے! اپنی مشق پر نظر ڈالتے ہوئے، میں نوٹ کرتا ہوں کہ enum کو استعمال کرنے کے لیے سب سے عام جگہوں میں سے ایک منطقی تعمیرات ہیں جیسے switch ۔ اس صورت میں، آپ کیس کے تمام ممکنہ تغیرات فراہم کر سکتے ہیں ، اور تمام enum اقدار کے لیے منطق لکھنے کے بعد - اور پہلے سے طے شدہ آپریٹر کا استعمال ضروری بھی نہیں ہو سکتا! سب کے بعد، اگر آپ String یا عددی قدر استعمال کرتے ہیں، مثال کے طور پر، int قسم کی ، تو آپ کو ایک غیر متوقع قدر موصول ہو سکتی ہے، جو کہ enum کا استعمال کرتے ہوئے ناممکن ہے ۔ پہلے زیر بحث مثال کے لیے ایک سوئچ کیسا نظر آئے گا :public void doSomething(Role role) {
switch (role) {
case STUDENT:
// некая логика для STUDENT
break;
case TEACHER:
// некая логика для TEACHER
break;
case DIRECTOR:
// некая логика для DIRECTOR
break;
case SECURITY_GUARD:
// некая логика для SECURITY_GUARD
break;
}
}
79. ایک Enum مثال میں تمام دستیاب اقدار کو کیسے حاصل کیا جائے؟
اگر آپ کو enum کی تمام مثالیں حاصل کرنے کی ضرورت ہے تو، ایک values() طریقہ موجود ہے جو قدرتی ترتیب میں کسی خاص enum کی تمام دستیاب اقدار کی ایک صف کو لوٹاتا ہے (جس ترتیب میں وہ enum میں بیان کیے گئے تھے )۔ مثال:Role[] roles = Role.values();
for (Role role : roles) {
System.out.println(role);
}
کنسول درج ذیل آؤٹ پٹ دکھائے گا:
اسٹریم API
80. جاوا میں سٹریم کیا ہے؟
جاوا اسٹریم ڈیٹا اسٹریم کے ساتھ تعامل کا ایک نسبتاً نیا طریقہ ہے، جس کے نتیجے میں آپ بڑے ڈیٹا کو زیادہ آسانی سے اور درست طریقے سے پروسیس کرنے کے ساتھ ساتھ ایک خاص تعداد کے تھریڈز کے درمیان ڈیٹا پروسیسنگ کو متوازی بنانے کی اجازت دیتا ہے، جس سے استعمال میں کارکردگی کو فروغ مل سکتا ہے۔ فعالیت اس موضوع پر مختصراً زیادہ گہرائی میں بات نہیں کی جا سکتی، اس لیے میں یہاں ایک مضمون کا لنک چھوڑ دوں گا جو آپ کو اس موضوع میں غوطہ لگانے میں مدد دے سکتا ہے۔81. لین دین کی بنیادی خصوصیات کیا ہیں؟
موضوع کو Stream API کہا جاتا ہے، لیکن سوال لین دین کے بارے میں ہے۔ ہمم... پہلے، آئیے یہ معلوم کریں کہ لین دین کیا ہے۔ ٹرانزیکشن ترتیب وار ڈیٹا بیس آپریشنز کا ایک گروپ ہے جو ڈیٹا کے ساتھ کام کرنے کی منطقی اکائی کی نمائندگی کرتا ہے۔ ایک ٹرانزیکشن کو مکمل طور پر اور کامیابی سے مکمل کیا جا سکتا ہے، ڈیٹا کی سالمیت کو برقرار رکھتے ہوئے اور متوازی طور پر چلنے والے دیگر لین دین سے آزادانہ طور پر، یا اسے بالکل بھی مکمل نہیں کیا جا سکتا، ایسی صورت میں اس کا کوئی اثر نہیں ہوتا ہے۔ لہذا، لین دین میں چار اہم خصوصیات ہیں، جنہیں مختصراً ACID کہا جاتا ہے ۔ آئیے دیکھتے ہیں کہ اس مخفف کا ہر حرف کس طرح ظاہر ہوتا ہے: A - Atomicity - atomicity - یہ خاصیت اس بات کی ضمانت دیتی ہے کہ سسٹم میں کوئی بھی لین دین جزوی طور پر ریکارڈ نہیں کیا جائے گا۔ یا تو اس کے تمام ذیلی آپریشن کیے جائیں گے، یا کوئی بھی انجام نہیں دیا جائے گا ( تمام یا کچھ بھی نہیں )۔ C - مستقل مزاجی - مستقل مزاجی ایک خاصیت ہے جو اس بات کو یقینی بناتی ہے کہ ہر کامیاب لین دین صرف درست نتائج کو ریکارڈ کرتا ہے۔ یعنی یہ اس بات کی گارنٹی ہے کہ کامیاب ٹرانزیکشن کی صورت میں سسٹم کی جانب سے مخصوص ڈیٹا پر عائد کردہ تمام قواعد و ضوابط کو پورا کیا جائے گا، بصورت دیگر لین دین مکمل نہیں ہوگا اور سسٹم میں موجود ڈیٹا اپنے سابقہ پر واپس آجائے گا۔ حالت. I - Isolation - isolation ایک خاصیت ہے جو کہتی ہے کہ لین دین کے عمل کے دوران، متوازی لین دین سے اس کے نتائج کو متاثر نہیں کرنا چاہیے۔ یہ خاصیت وسائل سے بھرپور ہے، اس لیے اسے عام طور پر کچھ مخصوص سطحوں کی موصلیت کی اجازت دے کر لاگو کیا جاتا ہے جو موصلیت کے کچھ مسائل حل کرتے ہیں۔ ہم اگلے سوال میں اس پر مزید تفصیل سے بات کریں گے۔ D - پائیداری - یہ خاصیت اس بات کو یقینی بناتی ہے کہ اگر صارف کو سسٹم سے تصدیق موصول ہوئی ہے کہ لین دین مکمل ہو گیا ہے، تو وہ اس بات کا یقین کر سکتا ہے کہ اس نے جو تبدیلیاں کی ہیں وہ کسی ناکامی کی وجہ سے منسوخ نہیں ہوں گی۔ یعنی، آپ اس بات کا یقین کر سکتے ہیں کہ آپریٹنگ سسٹم کی کسی قسم کی ناکامی آپ کے ڈیٹا کو کچھ نہیں دے گی اگر آپ کو پہلے ہی اپنے لین دین کی کامیاب تکمیل کی تصدیق مل چکی ہے۔82. لین دین کی تنہائی کی سطحیں کیا ہیں؟
جیسا کہ میں نے پہلے کہا، ACID تنہائی فراہم کرنا ایک وسائل پر مبنی عمل ہے۔ لہذا ، یہ پراپرٹی جزوی طور پر مطمئن ہے۔ تنہائی کی مختلف سطحیں ہیں، اور سطح جتنی زیادہ ہوگی، پیداواری صلاحیت پر اتنا ہی زیادہ اثر پڑے گا۔ لین دین کی تنہائی کی سطح پر جانے سے پہلے، ہمیں ناکافی لین دین کی تنہائی کے مختلف مسائل کو دیکھنے کی ضرورت ہے :-
فینٹم ریڈنگ - جب ایک ہی ٹرانزیکشن کے اندر ایک ہی نمونہ (ایک ہی سوال) کو بار بار کال کیا جاتا ہے، تو موصول ہونے والے ڈیٹا میں فرق ہوتا ہے، جو کسی دوسرے لین دین کے ذریعے ڈیٹا داخل کرنے کی وجہ سے ہوتا ہے۔
-
غیر دہرائی جانے والی پڑھائی - جب ایک ہی لین دین کے اندر ایک ہی نمونہ (ایک ہی سوال) کو بار بار کال کیا جاتا ہے، تو موصول ہونے والے ڈیٹا میں فرق ہوتا ہے، جو کسی دوسرے لین دین کے ذریعے ڈیٹا کے تبدیلیوں (اپ ڈیٹ) اور حذف ہونے کی وجہ سے ہوتا ہے۔
-
گندا پڑھنا - ایک ٹرانزیکشن کے ذریعہ ڈیٹا کو شامل یا تبدیل کرنے کا عمل جس کی بعد میں تصدیق نہیں ہوتی ہے (رول بیک)، یعنی غلط ڈیٹا پڑھنا؛
-
گمشدہ اپ ڈیٹ - جب مختلف لین دین ایک ہی وقت میں ایک ہی ڈیٹا کو تبدیل کرتے ہیں، تو آخری کو چھوڑ کر تمام تبدیلیاں ضائع ہو جاتی ہیں (ملٹی تھریڈ والے ماحول میں "ریس کنڈیشن" کے مسئلے کی یاد دلاتے ہیں)۔
تنہائی کی سطح | پریت پڑھنا | غیر بار بار پڑھنا | گندا پڑھنا | اپ ڈیٹ کھو گیا۔ |
---|---|---|---|---|
سیریلائزیبل | + | + | + | + |
دوبارہ پڑھنے کے قابل | - | + | + | + |
پرعزم پڑھیں | - | - | + | + |
بلاوجہ پڑھیں | - | - | - | + |
کوئی نہیں۔ | - | - | - | - |
83. سٹیٹمنٹ اور PreparedStatement میں کیا فرق ہے؟
اور یہاں JDBC ٹیکنالوجی کی خصوصیات میں بہت ہموار منتقلی نہیں ہے ۔ تو، پہلے، آئیے یہ معلوم کریں کہ بیان دراصل کیا ہے ۔ یہ ایک ایسی شے ہے جو SQL سوالات پیدا کرنے کے لیے استعمال ہوتی ہے۔ جے ڈی بی سی تین اقسام کا استعمال کرتا ہے - بیان ، تیار بیان اور کال ایبل اسٹیٹمنٹ ۔ ہم آج CallableStatement کو نہیں دیکھیں گے : آئیے بیان اور PreparedStatement کے درمیان فرق کے بارے میں بات کرتے ہیں ۔-
اسٹیٹمنٹ کا استعمال سادہ SQL استفسارات کو بغیر آنے والے، متحرک طور پر داخل کردہ پیرامیٹرز کے انجام دینے کے لیے کیا جاتا ہے۔ PrepareStatement کا استعمال ان پٹ پیرامیٹرز کو متحرک طور پر داخل کرنے کی صلاحیت کے ساتھ کیا جاتا ہے۔
-
PreparedStatement میں پیرامیٹرز سیٹ کرنے کے لیے ، درخواست میں ان پٹ پیرامیٹرز کو سوالیہ نشانات کے طور پر لکھا جاتا ہے، تاکہ مختلف سیٹرز، جیسے setDouble() , setFloat() , setInt() , setTime() استعمال کرنے کے بجائے ایک قدر ڈالی جا سکے ۔ . نتیجے کے طور پر، آپ اپنے استفسار میں غلط قسم کا ڈیٹا داخل نہیں کریں گے۔
-
PreparedStatement "پہلے سے مرتب شدہ" ہے اور کیشنگ کا استعمال کرتا ہے، لہذا اس کا عمل اسٹیٹمنٹ آبجیکٹ سے استفسار کرنے سے قدرے تیز ہو سکتا ہے ۔ نتیجے کے طور پر، کارکردگی کو بہتر بنانے کے لیے ایس کیو ایل کے سوالات جو کثرت سے عمل میں آتے ہیں انہیں PreparedStatement آبجیکٹ کے طور پر لکھا جاتا ہے ۔
-
اسٹیٹمنٹ ایس کیو ایل انجیکشنز کے لیے خطرناک ہے، جبکہ پریپرڈ اسٹیٹمنٹ انہیں روکتا ہے۔ اس مضمون میں جاوا سیکیورٹی میں ایس کیو ایل انجیکشنز اور دیگر بہترین طریقوں کو ختم کرنے کے بارے میں مزید پڑھیں ۔
GO TO FULL VERSION