JavaRush /Java blogi /Random-UZ /Java'da Enum bo'yicha 15 dasturchi intervyu savollari (ja...
Treefeed
Daraja

Java'da Enum bo'yicha 15 dasturchi intervyu savollari (javoblari bilan!)

Guruhda nashr etilgan
Enumeration ( Enum ) Java 5 da joriy qilingan va shundan beri u Java dasturchilari orasida juda mashhur bo'ldi. Turli xil Java dasturlarida keng qo'llaniladi. Java'dagi Enum C yoki C++ ga qaraganda ancha ko'p qirrali bo'lgani uchun u ko'plab qiziqarli foydalanish holatlarini ham taqdim etadi, ulardan bir nechtasini Java'da Enumdan foydalanishning 10 usullari maqolasida ko'rgansiz . Ammo bu mashhurlikka qaramay, ko'pgina Java dasturchilari Enum tomonidan taqdim etilgan funksionallik va Java kodida Enum dan foydalanishning nozik jihatlari haqida hali ham bilishmaydi. Bu, masalan, Enum-ning Java-da interfeysni amalga oshirish qobiliyati yoki Nega biz Enum-dan tashqarida Enum-ni yarata olmaymiz , deb so'ragan bir nechta o'quvchilardan aniq bo'ldi, ular intervyuda bu haqda so'ralganligini ta'kidladilar. Bu bizni Java Enum-da tez-tez beriladigan savollar ro'yxatini tuzishga ilhomlantirdi , ular nafaqat intervyularda muvaffaqiyat qozonishingizga yordam beradi, balki o'rganish uchun yangi yo'llarni ham ochadi. Yuqorida aytib o'tilganidek, tez-tez intervyu savollari sizni mavzuga jiddiyroq qarashga majbur qiladi, bu yomon narsa emas va Enumning kuchi va foydaliligini hisobga olsak, enum ustasi bo'lish vaqti keldi. Quyida Enum ning turli funksiyalari va xususiyatlariga asoslangan savollar ro'yxati keltirilgan. Siz undan intervyu uchun tayyorgarlik materiali yoki shunchaki ro'yxatga olish uchun qo'llanma sifatida foydalanishingiz mumkin. Agar siz Java-da yangi bo'lsangiz, Enum haqida juda ko'p yangi va foydali narsalarni bilib olasiz. 1) Enum Java-da interfeysni amalga oshirishi mumkinmi? Ha, Enum interfeyslarni meros qilib olishi mumkin . Enum turi sinf va interfeysga o'xshash bo'lgani uchun u interfeysni meros qilib olishi mumkin. Bu ba'zi hollarda Enum-dan maxsus dastur sifatida foydalanishda ajoyib moslashuvchanlikni beradi. Mana, Enum dan foydalanishning yaxshi namunasi. 2) Enum sinfni meros qilib olishi (kengaytirishi) mumkinmi? Yo'q, qila olmaydi! Kutilmagan, chunki ilgari Enum turi Java-dagi sinf yoki interfeysga o'xshashligi aytilgan edi. Xo'sh, bu savol oldingi savoldan keyin so'ralishining asosiy sababidir. Enum java.lang.Enum mavhum sinfidan allaqachon meros bo'lganligi sababli , Java bir nechta sinf merosini qo'llab-quvvatlamasligi sababli, boshqa sinf meros qilib ololmasligi aniq. Java.lang.Enum dan meros bo'lib , barcha enumlar ordinal() , values() yoki valueOf() usullariga ega . 3) Ob'ekt namunalarisiz Enum qanday yaratiladi? Bu kompilyatsiya xatosisiz mumkinmi? Bu suhbatdoshlar yaxshi ko'radigan qiyin savollardan biridir . Enum ma'lum miqdordagi ob'ektlar to'plami sifatida ko'rilganligi sababli, haftaning kunlari yoki yil oylari kabi, Enumni hech narsasiz olish shubhali ko'rinadi. Lekin ha, siz misollarsiz Enum yaratishingiz mumkin , masalan, yordamchi dastur sinfini yaratish orqali. Bu Enum dan foydalanishning yana bir innovatsion usuli: 4) Enum uchun toString() usulini bekor qila olamizmi? Agar bekor qilmasak nima bo'ladi? Albatta, siz Enum ning toString() usulini bekor qilishingiz mumkin, chunki java.lang.Object ni meros qilib olgan va toString() usuli mavjud bo‘lgan har qanday sinfni bekor qilishingiz mumkin va agar yo‘q bo‘lsa ham, siz hech narsani yo‘qotmaysiz, chunki abstrakt Enum sinfining bazasi buni siz uchun qiladi va Enum misolining nomi bo'lgan nomni qaytaradi. Mana Enum sinfidagi toString() usuli uchun kod : nom kompilyator Enum sinfining oʻzida misol yaratishga javoban enum yaratish uchun kod ajratganda, shuningdek konstruktorda tartibni yaratganda koʻrsatiladi. java.lang.Enum klassi : Bu dasturdagi Enum deklaratsiyasiga javoban kompilyator tomonidan chaqiriladigan enum ni yaratish uchun yagona konstruktordir . 5) Enum dan tashqarida Enum ni yarata olamizmi? Nimaga yo'q? Enumni Enum chegarasidan tashqarida yarata olmaysiz, chunki Enumda umumiy yo'q. public enum MessageUtil{ ; // required to avoid compiler error, also signifies no instance public static boolean isValid() { throw new UnsupportedOperationException("Not supported yet."); } } public String toString() { return name; } protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } konstruktor va kompilyator sizga bunday konstruktorni kiritishingizga ruxsat bermaydi. Kompilyator Enum tipi deklaratsiyasiga javoban ko'pgina kodlarni ishlab chiqarganligi sababli, u Enum ichidagi umumiy konstruktorlarga ruxsat bermaydi va Enum misollarini ichki e'lon qilishga majbur qiladi. 6) Enum ichida konstruktorni ko'rsata olamizmi? Bu savol ko'pincha oldingi savolga javob beradi. Ha, mumkin, lekin esda tutingki, bu faqat shaxsiy yoki paketli xususiy konstruktorlar bilan mumkin. Enumda umumiy va himoyalangan konstruktorlarga ruxsat berilmaydi. Bu erda siz misolni ko'rishingiz mumkin . 7) Enumni == yoki equals() usuli yordamida solishtirish o'rtasidagi farq nima? Bu juda keng va qiyin masala bo'lib, bu erda batafsil yoritilgan . 8) Enumda ordinal() usuli nima qiladi? Ordinal() usuli Enum ichida Enum misollari tayinlangan tartibni qaytaradi. Masalan, DayOfWeek Enum-da siz kunlarni tartibda belgilashingiz mumkin: va agar DayOfWeek.MONDAY.ordinal() public enum DayOfWeek{ MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; } usulini chaqirsak , u 0 ni qaytaradi - bu birinchi instansiyani bildiradi. Bu usul narsalarning haqiqiy holatiga ko'ra tartibni ta'minlash uchun juda foydali: ya'ni SEShanba (seshanba) dushanba (dushanba) dan keyin va chorshanba (chorshanba) dan oldin kelishini bildiradi. Xuddi shunday, siz yil oylarini ko'rsatish uchun sanab o'tishingiz mumkin, bu erda fevral yanvardan keyin keladi, lekin martdan oldin keladi. Barcha moslashtirilgan sanablar bu usulni java.lang.Enum mavhum sinfidan meros qilib oladi va ular kompilyator tomonidan java.lang.Enum dagi himoyalangan konstruktorni chaqirish orqali o'rnatiladi , u nom va tartibni oladi. 9) Java-da TreeSet yoki TreeMap bilan Enum-dan foydalanish mumkinmi? Bu haqiqatan ham qiziqarli Enum savoli va odamlar o'zlarining bilim chuqurligini tekshirish uchun so'rashni yaxshi ko'radilar. Java.lang.Enum kodini ko'rib chiqmaguningizcha , Enum TreeSet va TreeMap kabi tartiblangan to'plamlarda foydalanish uchun asosiy talab bo'lgan taqqoslanadigan interfeysni meros qilib olishini bilmasligingiz mumkin . Enum sukut bo'yicha solishtiriladigan interfeysni meros qilib olganligi sababli, u TreeSet va TreeMap bilan ishlatilishi mumkin . 10) Enumdagi ordinal() va compareTo() o'rtasidagi farq nima? Bu to'g'ridan-to'g'ri oldingi savoldan kelib chiqadi: aslida, compareTo() usul tomonidan taqdim etilgan tartibni simulyatsiya qiladi ordinal() , bu Enumning tabiiy tartibidir. Muxtasar qilib aytganda, Enum taqqoslashlarni e'lon qilingan tartibda cheklaydi. Shuni ham yodda tutish kerakki, bu doimiylarni faqat bir xil turdagi boshqa konstantalar bilan solishtirish mumkin - har xil turdagi konstantalarni solishtirish kompilyator xatosiga olib kelishi mumkin. 11) Enum dan switch korpusida foydalanish mumkinmi? Ha sen qila olasan. Bundan tashqari, bu Enum-dan foydalanishning asosiy afzalliklaridan biridir. Enum misollari vaqtinchalik konstantaga kompilyatsiya qilinganligi sababli, ularni xavfsiz tarzda case va switch ichiga kiritishingiz mumkin . Mana hafta kunlari bilan kodga misol: public void developerState(DayOfWeek today){ switch(today){ case MONDAY: System.out.println("Hmmmmmmmm"); break; case TUESDAY: System.out.println("Hmmmm"); break; case FRIDAY : System.out.println("Yeahhhhhh"); break; } } Enum va Switch bir-birini yaxshi to‘ldiradi, ayniqsa Enum oz sonli barqaror konstantalarni o‘z ichiga olsa, masalan, haftaning yetti kuni, yilning 12 oyi va hokazo. Enum bilan swith case foydalanishning boshqa misollari . 12) Butun Enum misoli orqali qanday takrorlash mumkin? Agar siz java.lang.Enum ni ochgan bo'lsangiz , values() usuli barcha Enum konstantalari qatorini qaytarishini bilasiz . Har bir raqam java.lang.Enum ni meros qilib olganligi sababli , ular values() usuliga ega . Undan foydalanib, siz ma'lum bir turdagi ro'yxatning barcha konstantalarini takrorlashingiz mumkin. Buning misollarini foreach tsikli va values() usuli bilan ko'rib chiqing . 13) Enumni singleton sifatida ishlatishning qanday ijobiy va salbiy tomonlari bor? Enum singleton naqshini amalga oshirish uchun tezkor yorliqni taqdim etadi va u hatto Effektiv Java kitobida ham yoritilganligi sababli, bu mashhur tanlovdir. Bir qarashda, Enum singleton istiqbolli va juda qulay, masalan, u instantatsiyani boshqaradi, xavfsiz ketma-ketlashtiriladi va eng muhimi, Enum yordamida ip bilan xavfsiz singleton yaratish oson. O'zgaruvchilarning o'zgaruvchanligini ikki marta tekshirish haqida endi tashvishlanishingiz shart emas. Ushbu yondashuvdan foydalanishning ijobiy va salbiy tomonlari haqida ko'proq o'qing . 14) Int enumeration va String enumeration modellari o'rniga Enum dan foydalanishning qanday foydasi bor? Agar siz 5 yildan ortiq dasturlash bilan shug‘ullanayotgan bo‘lsangiz va hali ham JDK 1.3 yoki 1.4 da bo‘lsangiz, siz taniqli fiksatsiyalar to‘plamini ifodalash uchun umumiy statik yakuniy doimiy prefiksdan foydalanadigan String va int sanab chiqish naqshlari bilan tanishasiz. Hafta kunlari kabi narsalar soni . Bu erda juda ko'p muammolar mavjud: sizda Enum turidan mustaqillik yo'q, chunki haftaning kuni uchun mas'ul bo'lgan String o'zgaruvchisi har qanday ixtiyoriy qiymatni olishi mumkin. Xuddi shunday, sanab o'tiladigan int har qanday qiymatni qabul qilishi mumkin va kompilyator uni mamnuniyat bilan yutadi. Va foydalanish Enum , siz kompilyator siz uchun tekshiradigan turdagi xavfsizlikni olasiz. Effektiv Java-da ushbu mavzu bo'yicha qiziqarli fikrlar mavjud bo'lib, uni barcha Java dasturchilari uchun o'qish tavsiya etiladi. 15) Stringni Enum ga qanday aylantirish mumkin? Bu Java ilovalarini ishlab chiqishda String va Enum- dan foydalanishning mashhurligi tufayli har kuni paydo bo'ladigan savol . Enumni Stringga aylantirishning eng yaxshi usuli bu Enumning o'zida String argumentlarini qabul qiladigan va uni Enum sifatida qaytaradigan zavod usulini aniqlashdir . Shuningdek, siz ishni e'tiborsiz qoldirishni xohlashingiz mumkin. Bu erda qatorlarni sanab o'tishga misollar keltirilgan. Bu bizni Enum haqidagi 15 ta savol ( va javoblar ) ro'yxatining oxiriga olib keladi . Ammo unutmang: o'rganish uchun o'qish etarli emas, bu faqat birinchi qadamdir . Enumlardan foyda olish uchun loyihangizda Enum dan qayerda foydalanishingiz mumkinligini topishga harakat qiling - bu sizga haqiqiy tajriba beradi va bu tajriba bilan siz misollardan ko'ra ko'proq narsani o'rganasiz, chunki siz ko'proq hal qila oladigan ko'proq muammolarga duch kelasiz. murakkab va batafsil yo'llar.talablar. Enum haqidagi bu savollarga bilimingizni sinab ko'rish uchun e'tibor berishga arziydi, ayniqsa siz intervyuga shoshilayotgan bo'lsangiz va Enum olamiga batafsil sho'ng'ish uchun vaqtingiz yo'q.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION