جاوا انٽرويو: OOP بابت سوال
1. جاوا جون خاصيتون ڇا آهن؟
جواب:-
OOP تصورات:
- اعتراض جو رخ
- وراثت
- encapsulation
- پوليمورفيزم
- خلاصو
-
ڪراس پليٽ فارم: هڪ جاوا پروگرام ڪنهن به پليٽ فارم تي بغير ڪنهن تبديلي جي هلائي سگهجي ٿو. يقينن، اهو هڪ نصب ٿيل JVM (جاوا ورچوئل مشين) جي ضرورت آهي.
-
اعلي ڪارڪردگي: Just-In-Time (JIT) مرتب ڪندڙ اعلي ڪارڪردگي کي ممڪن بڻائي ٿو. JIT مرتب ڪندڙ بائيٽ ڪوڊ کي مشين ڪوڊ ۾ تبديل ڪري ٿو ۽ پوءِ JVM عمل شروع ڪري ٿو.
- ملٽي ٿريڊنگ: JVM عمل جو هڪ ٿريڊ ٺاهي ٿو جنهن کي
main thread
. هڪ پروگرامر ٿريڊ ڪلاس مان حاصل ڪري ياRunnable
انٽرفيس کي لاڳو ڪندي ڪيترن ئي موضوعن کي ٺاهي سگھي ٿو.
2. وراثت ڇا آهي؟
وراثت جو مطلب آهي ته هڪ طبقو ٻئي طبقي کي ورثي ۾ ڏئي سگهي ٿو (استعمال ڪندي لفظ استعمال ڪندي ). ان جو مطلب آهي ته توهان ٻيهر استعمال ڪري سگهو ٿا ڪوڊ ان ڪلاس مان جيڪو توهان ورثي ۾ حاصل ڪيو آهي. موجوده طبقي کي سڏيو ويندو آهيsuperclass
۽ نئون ٺهيل طبقو آهي subclass
. ماڻهو پڻ چوندا آهن اصطلاح استعمال ڪريو والدين ۽ child
.
public class Animal {
private int age;
}
public class Dog extends Animal {
}
ڪٿي Animal
آهي parent
۽ Dog
آهي child
.
3. encapsulation ڇا آهي؟
اهو سوال اڪثر پڇيو ويندو آهي انٽرويو ۾ جاوا ڊولپر جي پوزيشن لاءِ. Encapsulation عمل کي لڪائي رهيو آهي رسائي تبديل ڪندڙ، حاصل ڪندڙ، ۽ سيٽرز استعمال ڪندي. اهو ڪيو ويو آهي ٻاهرين رسائي کي روڪڻ لاءِ جتي به ڊولپر سمجهن ٿا ته اهو ضروري آهي. حقيقي زندگي مان هڪ سادي مثال ڪار آهي. اسان کي انجڻ جي آپريشن تائين ڪا به سڌي رسائي نه آهي. اسان کي صرف اهو ڪرڻو آهي ته چاٻي کي انجڻ ۾ وجهي ۽ انجڻ کي ڦيرايو. اهي عمل جيڪي هود هيٺ ٿين ٿا، اسان جو ڪو به ڪاروبار ناهي. ان کان علاوه، جيڪڏهن اسان انجڻ جي سرگرمي ۾ مداخلت ڪندا هئاسين، اهو هڪ غير متوقع صورتحال پيدا ڪري سگهي ٿو، ممڪن طور تي ڪار کي نقصان پهچائي ۽ نتيجي ۾ جسماني نقصان. بلڪل ائين ئي پروگرامنگ ۾ ٿئي ٿو. اهو وڪيپيڊيا تي چڱي طرح بيان ڪيو ويو آهي . CodeGym تي encapsulation بابت پڻ هڪ مضمون آهي .4. پوليمورفيزم ڇا آهي؟
پوليمورفيزم (Polymorphism) ھڪ پروگرام جي صلاحيت آھي جنھن کي ھڪڙي ئي انٽرفيس سان ھڪڙي طريقي سان علاج ڪرڻ جي قابل آھي، بغير ڪنھن شئي جي مخصوص قسم جي ڄاڻ جي. جيئن چوڻي آهي، "هڪ انٽرفيس - ڪيترائي عمل". پوليمورفيزم سان، توهان مختلف قسمن جي شين کي گڏ ڪري ۽ استعمال ڪري سگهو ٿا گڏيل رويي جي بنياد تي. مثال طور، اسان وٽ ھڪڙو جانور طبقو آھي جنھن جا ٻه اولاد آھن: ڪتو ۽ ٻلي. عام جانورن جي طبقن ۾ هڪ رويي آهي جيڪو سڀني سان حصيداري ڪري ٿو، آواز ٺاهڻ جي صلاحيت. اسان پوليمورفڪ صلاحيتون استعمال ڪندا آهيون جڏهن اسان کي هر شي کي گڏ ڪرڻ جي ضرورت آهي جيڪا جانورن جي طبقي کي ورثي ۾ ملي ٿي ۽ "ميڪ آواز" طريقي سان عمل ڪريو. هتي اهو ڪيئن ڏسڻ ۾ اچي ٿو:List<Animal> animals = Arrays.asList(new Cat(), new Dog(), new Cat());
animals.forEach(animal -> animal.makeSound());
ٻين لفظن ۾، پوليمورفيزم مددگار آهي. ۽ اهو پڻ پوليمورفڪ (اوور لوڊ ٿيل) طريقن تي لاڳو ٿئي ٿو. پوليمورفيزم ڪيئن استعمال ڪجي
جاوا نحو بابت انٽرويو سوال
5. جاوا ۾ تعمير ڪندڙ ڇا آهي؟
تعمير ڪندڙ ھيٺيون خاصيتون آھن:- جڏهن هڪ نئون اعتراض ٺاهيو ويندو آهي، پروگرام ان کي ٺاهڻ لاء مناسب تعمير ڪندڙ استعمال ڪندو آهي.
- ھڪڙي ٺاھيندڙ ھڪڙي طريقي وانگر آھي. ان جي مخصوص خصوصيت ان حقيقت ۾ آهي ته واپسي جي ڪا به قيمت نه آهي (بشمول باطل) ۽ اهو نالو ڪلاس جي نالي سان ساڳيو آهي.
- جيڪڏهن ڪو تعمير ڪندڙ واضح طور تي پيدا نه ڪيو ويو آهي، هڪ خالي تعمير ڪندڙ خودڪار طور تي ٺاهي وئي آهي.
- ھڪڙي ٺاھيندڙ کي ختم ڪري سگھجي ٿو.
- جيڪڏھن توھان ھڪڙي ٺاھيندڙ جو اعلان ڪريو پيراميٽرن سان پر ھڪڙي ھڪڙي جي ضرورت آھي بغير پيراميٽر جي، پوء توھان ان کي الڳ الڳ ٺاھيو، ڇو ته اھو خودڪار طور تي ٺاھيو نه ويندو.
6. ڪهڙن ٻن طبقن کي وراثت ۾ اعتراض نه آهي؟
چال سوالن سان بيوقوف نه ٿيو - اهڙا ڪي به طبقا نه آهن. سڀ طبقن کي وراثت ۾ اعتراض طبقي يا ته سڌو يا ابن ڏاڏن جي ذريعي!7. مقامي متغير ڇا آهي؟
هي هڪ ٻيو مشهور انٽرويو سوال آهي جاوا ڊولپرز لاءِ. مقامي متغير ھڪڙو متغير آھي جيڪو ھڪڙي طريقي جي اندر بيان ڪيو ويو آھي ۽ موجود آھي جيستائين طريقي سان عمل ڪيو وڃي. جيئن ئي عمل ختم ٿئي ٿو، مقامي متغير موجود ٿيڻ بند ٿي وڃي ٿو. هتي هڪ پروگرام آهي جيڪو استعمال ڪري ٿو مقامي متغير نالي helloMessage main() طريقي ۾:public static void main(String[] args) {
String helloMessage;
helloMessage = "Hello, World!";
System.out.println(helloMessage);
}
8. هڪ مثال متغير ڇا آهي؟
هڪ مثال متغير هڪ متغير آهي جيڪو هڪ طبقي اندر اعلان ڪيو ويو آهي. اهو موجود آهي جيستائين هڪ شئي موجود آهي. مثال طور، اسان وٽ هڪ بي ڪلاس آهي، جنهن ۾ ٻه مثالي متغير آهن - نيڪار لوڊ ۽ ميڪس نيڪٽر لوڊ:public class Bee {
/**
* Current nectar load
*/
private double nectarLoad;
/**
* Maximum nectar that can the bee can collect.
*/
private double maxNectarLoad = 20.0;
...
}
9. رسائي تبديل ڪندڙ ڇا آهن؟
Access modifiers ڪلاسن، طريقن ۽ متغيرن تائين رسائي کي ترتيب ڏيڻ لاءِ هڪ ميکانيزم آهن. ھيٺ ڏنل تبديليون موجود آھن، پھچ وڌائڻ جي ترتيب ۾ درج ٿيل آھن:private
- هي رسائي موڊيفائر استعمال ڪيو ويندو آهي طريقن، شعبن ۽ تعمير ڪندڙن تي. رسائي ان طبقي تائين محدود آهي جنهن ۾ اهي اعلان ڪيا ويا آهن.package-private (default)
- هي ڪلاسن لاءِ ڊفالٽ رسائي جي سطح آهي. رسائي مخصوص پيڪيج تائين محدود آهي جنهن ۾ هڪ طبقي، طريقو، متغير، يا تعمير ڪندڙ جو اعلان ڪيو ويو آهي.protected
- هي رسائي موڊيفائر ساڳي رسائي جي سطح پيش ڪري ٿو جيئنpackage-private
ڪلاسن لاءِ رسائي جي اضافي سان جيڪي وراثت واري طبقي سان گڏ هجنprotected
.public
- هي رسائي جي سطح پڻ استعمال ڪئي وئي آهي ڪلاسن لاءِ. ھن رسائي جي سطح جو مطلب آھي اتي پوري رسائي آھي پوري اپليڪيشن ۾.
10. طريقه اوور رائڊنگ ڇا آهي؟
اسان طريقن کي ختم ڪريون ٿا جڏهن ٻار ڪلاس پنهنجي والدين طبقي جي رويي کي تبديل ڪرڻ چاهي ٿو. جيڪڏهن اسان کي اهو ڪرڻ جي ضرورت آهي جيڪا والدين جي طريقي ۾ آهي، اسان استعمال ڪري سگهون ٿا super.methodName() ٻار ۾، جيڪو والدين جي طريقي تي عمل ڪندو. اسان ان کان پوء اسان جي اضافي منطق شامل ڪري سگهون ٿا. ضرورتن جو مشاهدو ڪيو وڃي:- دستخط جو طريقو ساڳيو هجڻ گهرجي
- واپسي جو قدر ساڳيو هجڻ گهرجي
11. طريقا دستخط ڇا آهن؟
هڪ طريقو دستخط طريقو جو نالو ۽ دليلن جو ميلاپ آهي جيڪو طريقو وٺندو آهي. طريقو دستخط هڪ طريقو جي منفرد سڃاڻپ ڪندڙ آهي جڏهن طريقن کي اوورلوڊ ڪيو وڃي.12. اوور لوڊ ڪرڻ جو طريقو ڇا آهي؟
طريقو اوور لوڊ ڪرڻ پوليمورفيزم جي هڪ خاصيت آهي جنهن ۾ اسان ڪيترن ئي طريقن کي ٺاهڻ لاءِ طريقي جي دستخط کي تبديل ڪندا آهيون جيڪي ساڳيو عمل انجام ڏين ٿا:- ساڳيو نالو
- مختلف دليل
- واپسي جا مختلف قسم ٿي سگهن ٿا
ArrayList
طبقي جو add()
طريقو اوورلوڊ ٿي سگهي ٿو، اسان کي مختلف طريقن سان شامل ڪرڻ جي اجازت ڏئي ٿي ان پٽ جي دليلن جي بنياد تي:
add(Object o)
- اهو طريقو صرف هڪ اعتراض شامل ڪري ٿوadd(int index, Object o)
- هي طريقو هڪ خاص انڊيڪس تي اعتراض شامل ڪري ٿوadd(Collection<Object> c)
- هي طريقو شيون جي فهرست شامل ڪري ٿوadd(int index, Collection<Object> c)
- هي طريقو هڪ مخصوص انڊيڪس کان شروع ٿيندڙ شين جي فهرست شامل ڪري ٿو.
13. هڪ انٽرفيس ڇا آهي؟
جاوا ڪيترن ئي ورثي جي حمايت نٿو ڪري. ان حد کي ختم ڪرڻ لاءِ، انٽرفيس شامل ڪيا ويا int he form that we know and love ؛) هڪ ڊگهي وقت تائين، انٽرفيسز ۾ صرف طريقا هئا بغير ڪنهن عمل جي. ان جواب جي سلسلي ۾ اچو ته انهن جي باري ۾ ڳالهايون. مثال طور:
public interface Animal {
void makeSound();
void eat();
void sleep();
}
ڪجھ تفصيل هن ريت آهن:
- انٽرفيس ۾ سڀ طريقا عوامي ۽ خلاصا آھن
- سڀئي متغير عوامي جامد فائنل آهن
- ڪلاس انٽرفيس کي ورثي ۾ نه ٿا ملن (يعني اسين extensions لفظ استعمال نٿا ڪريون). ان جي بدران، طبقن انهن کي لاڳو ڪن ٿا (يعني اسين استعمال ڪندا آهيون لاڳو ڪيل لفظ). ان کان علاوه، توھان لاڳو ڪري سگھوٿا گھڻا انٽرفيس جيئن توھان چاھيو.
- ڪلاس جيڪي هڪ انٽرفيس کي لاڳو ڪن ٿا انهن کي لازمي طور تي انهن سڀني طريقن جو نفاذ مهيا ڪرڻ گهرجي جيڪي انٽرفيس ۾ آهن.
public class Cat implements Animal {
public void makeSound() {
// Method implementation
}
public void eat() {
// Implementation
}
public void sleep() {
// Implementation
}
}
14. هڪ انٽرفيس ۾ ڊفالٽ طريقو ڇا آهي؟
هاڻي اچو ته ڊفالٽ طريقن بابت ڳالهايون. اهي ڇا لاء آهن؟ اهي ڪنهن لاءِ آهن؟ اهي طريقا شامل ڪيا ويا "ٻنهي هٿن" جي خدمت ڪرڻ لاء. مان ڪهڙي ڳالهه ڪري رهيو آهيان؟ خير، هڪ طرف، نئين ڪارڪردگي شامل ڪرڻ جي ضرورت هئي: lambdas ۽ اسٽريم API. ٻئي طرف، اهو ضروري هو ته برقرار رکڻ لاء جاوا ڇا مشهور آهي - پوئتي مطابقت. هن کي ڪرڻ لاء، انٽرنيٽ کي ڪجهه نئين تيار ڪيل حل جي ضرورت آهي. هي ڪيئن ڊفالٽ طريقا اسان وٽ آيا. هڪ ڊفالٽ طريقو هڪ انٽرفيس ۾ لاڳو ڪيل طريقو آهي،default
لفظ سان نشان لڳل آهي. stream()
مثال طور، انٽرفيس ۾ معروف طريقو Collection
. مون کي يقين ڪر، هي انٽرفيس ايترو سادو ناهي جيترو اهو لڳي ٿو. forEach()
يا انٽرفيس ۾ پڻ ساڳيو مشهور طريقو Iterable
. اهو پڻ موجود نه هو جيستائين ڊفالٽ طريقا شامل ڪيا ويا. رستي جي ذريعي، توهان ان بابت پڻ پڙهي سگهو ٿا CodeGym هتي
.
15. پوءِ ڪيئن اسان ٻه هڪجهڙا ڊفالٽ طريقا ورثي ۾ حاصل ڪريون؟
اڳئين جواب جي باري ۾ ڇا هڪ ڊفالٽ طريقو آهي ٻيو سوال. جيڪڏهن توهان انٽرفيس ۾ طريقا لاڳو ڪري سگهو ٿا، پوء نظرياتي طور تي توهان ساڳئي طريقي سان ٻه انٽرفيس لاڳو ڪري سگهو ٿا. اسان اهو ڪيئن ٿا ڪريون؟ هتي هڪ ئي طريقي سان ٻه مختلف انٽرفيس آهن:interface A {
default void foo() {
System.out.println("Foo A");
}
}
interface B {
default void foo() {
System.out.println("Foo B");
}
}
۽ اسان وٽ ھڪڙو طبقو آھي جيڪو انھن ٻن انٽرفيس کي لاڳو ڪري ٿو. پر صرف اسان انٽرفيس اي يا بي ۾ هڪ مخصوص طريقو ڪيئن چونڊيو ٿا؟ هيٺ ڏنل خاص تعمير هن کي اجازت ڏئي ٿو A.super.foo()
:
public class C implements A, B {
public void fooA() {
A.super.foo();
}
public void fooB() {
B.super.foo();
}
}
ان ڪري، طريقو انٽرفيس جو fooA()
ڊفالٽ طريقو استعمال ڪندو ، جڏهن ته طريقو انٽرفيس جو طريقو استعمال ڪندو . foo()
A
fooB()
foo()
B
16. تجريدي طريقا ۽ ڪلاس ڇا آهن؟
جاوا ۾،abstract
هڪ محفوظ لفظ آهي. اهو تجريدي طبقن ۽ طريقن کي ظاهر ڪرڻ لاء استعمال ڪيو ويندو آهي. پهرين، اسان کي تعريف جي ضرورت آهي. هڪ خلاصو طريقو هڪ طريقو آهي جنهن کي abstract
لفظ استعمال ڪندي اعلان ڪيو ويو آهي بغير ڪنهن خلاصي طبقي ۾ عمل درآمد. اهو آهي، اهو هڪ طريقو آهي جيئن هڪ انٽرفيس ۾، پر هڪ لفظ جي اضافي سان، مثال طور:
public abstract void foo();
خلاصو طبقو ھڪڙو طبقو آھي جيڪو abstract
لفظ سان نشان لڳل آھي:
public abstract class A {
}
هڪ خلاصو ڪلاس ۾ ڪيترائي خاصيتون آهن:
- توهان هڪ تجريدي طبقي جو اعتراض ٺاهي نٿا سگهو
- ان جا تجريدي طريقا ٿي سگهن ٿا
- ان ۾ شايد تجريدي طريقا به نه هجن
17. String، StringBuilder ۽ StringBuffer جي وچ ۾ ڇا فرق آھي؟
String
قدر هڪ مستقل اسٽرنگ پول ۾ محفوظ ٿيل آهن. جيئن ئي هڪ تار ٺهيل آهي، اهو هن تلاء ۾ ظاهر ٿئي ٿو. ۽ توهان ان کي ختم نه ٿا ڪري سگهو. مثال طور:
String name = "book";
متغير مسلسل اسٽرنگ پول ڏانھن اشارو ڪندو نالو متغير کي مختلف قدر تي سيٽ ڪندي، اسان وٽ آھي:
name = "pen";
مسلسل اسٽرنگ پول ھن طرح ڏسڻ ۾ اچي ٿو: ٻين لفظن ۾، ٻئي قدر اتي رھندا آھن. اسٽرنگ بفر:
String
قدر هڪ اسٽيڪ ۾ محفوظ ٿيل آهن. جيڪڏهن هڪ قدر بدلجي وڃي ته پوءِ نئين قيمت پراڻي کي بدلائي ويندي.String Buffer
هم وقت سازي آهي ۽ تنهن ڪري ٿريڊ محفوظ آهي.- سلسلي جي حفاظت جي ڪري، ان جي ڪارڪردگي خراب آهي.
StringBuffer name = “book”;
جيئن ئي نالي جي قيمت تبديل ٿيندي آهي، اسٽيڪ ۾ قيمت تبديل ٿي ويندي آهي: StringBuilder بلڪل ساڳيو آهي StringBuffer
، صرف اهو موضوع محفوظ ناهي. نتيجي طور، اهو واضح طور تي تيز آهي StringBuffer
.
18. هڪ خلاصي طبقي ۽ هڪ انٽرفيس جي وچ ۾ ڇا فرق آهي؟
خلاصو طبقو:- خلاصو طبقن وٽ ڊفالٽ ٺاھيندڙ آھي. اهو هر وقت سڏيو ويندو آهي جڏهن خلاصو طبقي جو اولاد پيدا ٿئي ٿو.
- اهي ٻئي تجريدي طريقا ۽ غير تجريدي طريقا شامل ڪري سگھن ٿا. عام طور تي، هڪ تجريدي طبقي کي تجريدي طريقن جي ضرورت ناهي.
- ھڪڙو طبقو جيڪو ھڪڙو خلاصو وراثت ۾ حاصل ڪري ٿو ھڪڙي کي صرف تجريدي طريقن کي لاڳو ڪرڻ گھرجي.
- هڪ خلاصي طبقي ۾ مثالي متغير ٿي سگھي ٿو (ڏسو سوال #5).
- هڪ انٽرفيس جو ڪو به تعمير ڪندڙ نه آهي ۽ ان کي شروع نه ٿو ڪري سگهجي.
- صرف تجريدي طريقا شامل ڪري سگھجن ٿا (سواءِ ڊفالٽ طريقن جي).
- ڪلاس جيڪي انٽرفيس کي لاڳو ڪن ٿا انهن کي لازمي طور تي سڀني طريقن کي لاڳو ڪرڻ گهرجي (سواءِ ڊفالٽ طريقن جي).
- انٽرفيس صرف مستقل ٿي سگھي ٿو.
19. ايٽ (1) صف ۾ هڪ عنصر تائين رسائي ڇو آهي؟
اهو سوال لفظي طور تي منهنجي آخري انٽرويو ۾ پڇيو ويو. جيئن مون بعد ۾ سکيو، هن سوال جو مقصد اهو ڏسڻ آهي ته ماڻهو ڪيئن سوچيندو آهي. واضح طور تي، هن علم ۾ ٿورو عملي قدر آهي. رڳو ڄاڻڻ ئي ڪافي آهي. پهرين، اسان کي واضح ڪرڻ جي ضرورت آهي ته O (1) هڪ "مسلسل وقت" الگورتھم جي وقت جي پيچيدگي لاء اشارو آهي . ٻين لفظن ۾، هي نامزدگي تيز ترين عمل جي وقت کي اشارو ڪري ٿو. هن سوال جو جواب ڏيڻ لاء، اسان کي غور ڪرڻو پوندو ته اسان arrays بابت ڇا ڄاڻون ٿا. هڪ صف ٺاهڻ لاءint
، اسان کي هيٺين لکڻ گهرجي:
int[] intArray = new int[100];
هن نحو مان ڪيترائي نتيجا ڪڍي سگهجن ٿا:
- جڏهن هڪ صف جو اعلان ڪيو ويندو آهي، ان جو قسم معلوم ٿيندو آهي. جيڪڏهن قسم معلوم ٿئي ٿو، پوء صف ۾ هر سيل جي سائيز معلوم ٿئي ٿي.
- سڄي صف جي سائيز معلوم ٿئي ٿي.
پوءِ اسان ڪيئن پهچون ٿا O(1) تي جڏهن هڪ ArrayList ۾ شيون پهچون؟
اهو سوال فوري طور تي پوئين هڪ جي پٺيان آهي. حقيقت اها آهي ته جڏهن هڪ صف سان ڪم ڪري رهيا آهيون جيڪا پرائمري رکي ٿي، اسان اڳ ۾ ڄاڻون ٿا (تخليق جي وقت) عنصر جي قسم جي سائيز. پر اسان ڇا ڪريون جيڪڏهن اسان وٽ هن قسم جي وراثت واري درجه بندي آهي ۽ اسان قسم A جي عناصرن لاءِ هڪ مجموعو ٺاهڻ چاهيون ٿا ۽ مختلف لاڳو ڪرڻ (B، C، ۽ D) شامل ڪرڻ چاهيون ٿا:List<A> list = new ArrayList();
list.add(new B());
list.add(new C());
list.add(new D());
list.add(new B());
هن صورتحال ۾، اسان ڪيئن حساب ڪريون ٿا هر سيل جي سائيز؟ آخرڪار، هر شئي مختلف هوندي، ممڪن آهي ته مختلف اضافي شعبن سان. ڇا ڪجي؟ هتي سوال هڪ انداز ۾ پيش ڪيو ويو آهي جيڪو توهان کي پريشان ڪرڻ جو مطلب آهي. اسان ڄاڻون ٿا ته مجموعو سڌو سنئون شيون ذخيرو نٿو ڪري. اهو صرف شين جي حوالي سان ذخيرو ڪري ٿو. ۽ سڀ حوالا ساڳيا سائيز آهن، ۽ اهو ڄاڻايل آهي. نتيجي طور، اسان هتي پتي کي ساڳئي طريقي سان حساب ڪندا آهيون جيئن پوئين سوال ۾.
21. آٽو باڪسنگ ۽ انباڪسنگ
تاريخي پس منظر: آٽو باڪسنگ ۽ انباڪسنگ JDK 5 ۾ ڪجھ مکيه جدتون آھن. آٽو باڪسنگ ھڪڙي قسم جي ھڪڙي قسم جي ھڪڙي ھڪڙي لاڳاپيل لفافي طبقي ۾ خودڪار تبديليءَ جو عمل آھي. انباڪسنگ آٽو باڪسنگ جي بلڪل ابتڙ آهي. اهو هڪ لفافي طبقي کي ابتدائي ۾ تبديل ڪرڻ جو عمل آهي. پر جيڪڏهن هڪ لفافي جي قيمت آهيnull
، ته پوء ان باڪسنگ دوران هڪ NullPointerException
اڇلائي ويندي.
پرائمري ۽ انهن سان لاڳاپيل لفافي
ابتدائي | ڪپڙا ڪلاس |
---|---|
بولين | بوليان |
int | عدد |
بائيٽ | بائيٽ |
چار | ڪردار |
فلوٽ | فلوٽ |
ڊگهو | ڊگھو |
مختصر | ننڍو |
ٻيڻو | ٻيڻو |
// آٽو باڪسنگ ٿئي ٿي:
-
جڏهن هڪ ريپر ڪلاس جي حوالي سان هڪ ابتدائي تفويض ڪندي:
جاوا 5 کان اڳ:
// Manual boxing (the way it was BEFORE Java 5). public void boxingBeforeJava5() { Boolean booleanBox = new Boolean(true); Integer intBox = new Integer(3); // And so on for other types } After Java 5: // Automatic boxing (the way it became in Java 5). public void boxingJava5() { Boolean booleanBox = true; Integer intBox = 3; // And so on for other types }
-
جڏهن هڪ ابتدائي طريقي سان هڪ دليل جي طور تي منظور ڪيو ويو آهي جيڪو هڪ لفافي جي توقع رکي ٿو:
public void exampleOfAutoboxing() { long age = 3; setAge(age); } public void setAge(Long age) { this.age = age; }
// انباڪسنگ ٿئي ٿي:
-
جڏهن اسان هڪ ريپر ڪلاس جو مثال تفويض ڪريون ٿا هڪ ابتدائي متغير ڏانهن:
// BEFORE Java 5: int intValue = new Integer(4).intValue(); double doubleValue = new Double(2.3).doubleValue(); char c = new Character((char) 3).charValue(); boolean b = Boolean.TRUE.booleanValue(); // And after JDK 5: int intValue = new Integer(4); double doubleValue = new Double(2.3); char c = new Character((char) 3); boolean b = Boolean.TRUE;
-
رياضي جي عملن دوران. آپريشن صرف ابتدائي قسمن تي لاڳو ٿئي ٿو، تنهنڪري ابتدائي طور تي غير باڪسنگ ضروري آهي.
// BEFORE Java 5: Integer integerBox1 = new Integer(1); Integer integerBox2 = new Integer(2); // A comparison used to require this: integerBox1.intValue() > integerBox2.intValue() // In Java 5 integerBox1 > integerBox2
-
جڏهن هڪ ريپر ڪلاس جو هڪ مثال هڪ طريقي سان گذري ٿو جيڪو لاڳاپيل پرائمري وٺندو آهي:
public void exampleOfAutoboxing() { Long age = new Long(3); setAge(age); } public void setAge(long age) { this.age = age; }
22. آخري لفظ ڇا آهي ۽ ڪٿي استعمال ٿيندو آهي؟
لفظfinal
متغير، طريقن ۽ طبقن تي استعمال ڪري سگھجي ٿو.
- حتمي متغير جو قدر تبديل نه ٿو ڪري سگھجي ان جي شروعات کان پوءِ.
- هڪ فائنل ڪلاس جراثيم کان پاڪ آهي :) ان ۾ ٻار نٿا ٿي سگهن.
- هڪ آخري طريقو اولاد طرفان ختم نٿو ڪري سگهجي.
آخري متغير
جاوا اسان کي ٻه طريقا ڏئي ٿو هڪ متغير جو اعلان ڪرڻ ۽ ان کي هڪ قدر تفويض ڪرڻ:- توهان هڪ متغير جو اعلان ڪري سگهو ٿا ۽ ان کي بعد ۾ شروع ڪري سگهو ٿا.
- توھان ھڪڙي متغير جو اعلان ڪري سگھو ٿا ۽ ھڪڙي قيمت کي فوري طور تي تفويض ڪري سگھو ٿا.
public class FinalExample {
// A static final variable that is immediately initialized:
final static String FINAL_EXAMPLE_NAME = "I'm likely the final one";
// A final variable that is not initialized, but will only work if you
// initialize it in the constructor:
final long creationTime;
public FinalExample() {
this.creationTime = System.currentTimeMillis();
}
public static void main(String[] args) {
FinalExample finalExample = new FinalExample();
System.out.println(finalExample.creationTime);
// The final FinalExample.FINAL_EXAMPLE_NAME field cannot be accessed
// FinalExample.FINAL_EXAMPLE_NAME = "Not you're not!";
// The final Config.creationTime field cannot be accessed
// finalExample.creationTime = 1L;
}
}
ڇا هڪ فائنل متغير کي مسلسل سمجهي سگهجي ٿو؟
جيئن ته اسان فائنل متغيرن کي نئين قيمتون تفويض نٿا ڪري سگھون، اهو لڳي ٿو ته اهي مسلسل متغير آهن. پر صرف پهرين نظر ۾: جيڪڏهن متغير جي ڊيٽا جو قسم آهيimmutable
، پوء، ها، اهو هڪ مستقل آهي. پر جيڪڏهن ڊيٽا جو قسم آهي mutable
، اهو آهي، تبديل ٿيندڙ، پوء اهو ممڪن ٿيندو ته طريقن ۽ متغيرن کي استعمال ڪرڻ لاء هڪ final
متغير جي حوالي ڪيل اعتراض جي قدر کي تبديل ڪرڻ لاء. ان ڪري، ان کي مستقل نٿو چئي سگهجي. هيٺ ڏنل مثال ڏيکاري ٿو ته ڪي حتمي متغير حقيقت ۾ مستقل آهن، جڏهن ته ٻيا نه آهن، ڇاڪاڻ ته اهي تبديل ٿي سگهن ٿيون.
public class FinalExample {
// Immutable final variables
final static String FINAL_EXAMPLE_NAME = "I'm likely the final one";
final static Integer FINAL_EXAMPLE_COUNT = 10;
// Mutable final variables
final List<String> addresses = new ArrayList();
final StringBuilder finalStringBuilder = new StringBuilder("Constant?");
}
مقامي فائنل متغير
جڏهن هڪfinal
variable هڪ طريقي سان ٺاهي وئي آهي، ان کي هڪ local final
متغير سڏيو ويندو آهي:
public class FinalExample {
public static void main(String[] args) {
// You can do this
final int minAgeForDriveCar = 18;
// Or you can do this, in a for-each loop:
for (final String arg : args) {
System.out.println(arg);
}
}
}
اسان آخري لفظ استعمال ڪري سگھون ٿا لوپ لاءِ وڌايل ۾، ڇاڪاڻ ته لوپ جي هر ورجائي کان پوءِ هڪ نئون متغير پيدا ٿيندو آهي. ذهن ۾ رکو ته اهو لوپ لاء عام تي لاڳو نٿو ٿئي، تنهنڪري اسان کي هڪ مرتب وقت جي غلطي ملندي.
// The final local j variable cannot be assigned
for (final int i = 0; i < args.length; i ++) {
System.out.println(args[i]);
}
فائنل ڪلاس
هڪ طبقي جو اعلان ڪيو ويو تهfinal
وڌايو نه ٿو سگهجي. ان کي وڌيڪ آسانيءَ سان سمجهايو ته ٻيو ڪو به طبقو ان جو وارث نٿو ٿي سگهي. final
JDK ۾ هڪ طبقي جو هڪ بهترين مثال اسٽرنگ آهي. هڪ ناقابل قابل ڪلاس ٺاهڻ لاء پهريون قدم ان کي نشان لڳائڻ آهي final
، اهڙيء طرح ان کي وڌائڻ کان روڪيو وڃي ٿو:
public final class FinalExample {
}
// Compilation error!
class WantsToInheritFinalClass extends FinalExample {
}
آخري طريقا
جڏهن هڪ طريقو حتمي طور تي نشان لڳايو ويو آهي، ان کي آخري طريقو سڏيو ويندو آهي (معني، صحيح؟). ٻار جي طبقي ۾ آخري طريقو ختم نه ٿو ڪري سگھجي. اتفاق سان، Object class's wait() and notify() طريقا حتمي آهن، تنهنڪري اسان وٽ انهن کي اوور رائڊ ڪرڻ جي صلاحيت نه آهي.public class FinalExample {
public final String generateAddress() {
return "Some address";
}
}
class ChildOfFinalExample extends FinalExample {
// Compilation error!
@Override
public String generateAddress() {
return "My OWN Address";
}
}
جاوا ۾ فائنل ڪيئن ۽ ڪٿي استعمال ڪجي
- ڪجھ ڪلاس-سطح جي مستقلن جي وضاحت ڪرڻ لاءِ آخري لفظ استعمال ڪريو؛
- انھن شين لاءِ فائنل متغير ٺاھيو جيڪي توھان نٿا چاھيو تبديل ٿيڻ. مثال طور، اعتراض جي مخصوص ملڪيت جيڪي اسان لاگنگ جي مقصدن لاء استعمال ڪري سگهون ٿا.
- جيڪڏهن توهان نٿا چاهيو ته هڪ ڪلاس وڌايو وڃي، پوء ان کي حتمي طور نشان لڳايو.
- جيڪڏهن توهان کي هڪ ناقابل قابل ڪلاس ٺاهڻ جي ضرورت آهي، توهان کي ان کي حتمي بڻائڻ جي ضرورت آهي.
- جيڪڏھن توھان چاھيو ٿا ته ھڪڙي طريقي جي عمل کي ان جي اولاد ۾ تبديل نه ٿئي، پوء ھن طريقي کي نشان لڳايو
final
. اهو يقين ڪرڻ لاء تمام ضروري آهي ته عمل درآمد تبديل نه ٿئي.
23. بدلائيندڙ ۽ غير تبديل ٿيندڙ قسم ڇا آهن؟
تبديل ٿيندڙ
تبديل ٿيندڙ شيون اهي شيون آهن جن جي حالت ۽ متغيرات ٺاهڻ کان پوء تبديل ٿي سگهن ٿيون. تبديل ٿيندڙ طبقن جا مثال شامل آهن StringBuilder ۽ StringBuffer. مثال:public class MutableExample {
private String address;
public MutableExample(String address) {
this.address = address;
}
public String getAddress() {
return address;
}
// This setter can change the name field
public void setAddress(String address) {
this.address = address;
}
public static void main(String[] args) {
MutableExample obj = new MutableExample("First address");
System.out.println(obj.getAddress());
// We are updating the name field, so this is a mutable object
obj.setAddress("Updated address");
System.out.println(obj.getAddress());
}
}
ناقابل بدلائي
تبديل نه ٿيندڙ شيون اهي شيون آهن جن جي حالت ۽ متغيرات کي تبديل نه ٿي ڪري سگھجي اعتراض پيدا ٿيڻ کان پوء. HashMap لاءِ هڪ عظيم ڪنجي ، ڇا توهان نٿا سوچيو؟ :) مثال طور، String، Integer، Double، وغيره. مثال:// We'll make this class final so no one can change it
public final class ImmutableExample {
private String address;
ImmutableExample(String address) {
this.address = address;
}
public String getAddress() {
return address;
}
// We remove the setter
public static void main(String[] args) {
ImmutableExample obj = new ImmutableExample("Old address");
System.out.println(obj.getAddress());
// There is no way to change this field, so it is an immutable object
// obj.setName("new address");
// System.out.println(obj.getName());
}
}
ايندڙ حصي ۾، اسان مجموعن بابت سوالن ۽ جوابن تي غور ڪنداسين. منهنجو پروفائل GitHub
مٿان 50 جاب انٽرويو جا سوال ۽ جواب جاوا ڪور لاءِ. حصو 2
GO TO FULL VERSION