Java paketlari
Manba:
Usemynotes Ushbu post sizga Java-dagi paketlarni yaxshiroq tushunishga, ularning maqsadi va ularni qanday amalga oshirishni tushunishga yordam beradi.
Java-da paketlar nima
Java-dagi paket - bu sinflar, interfeyslar va kichik paketlar guruhini birlashtirish usuli. Paketlar tegishli sinflar, interfeyslar, ro'yxatlar va boshqalar guruhlarini yaratish uchun ishlatiladi.
Subpaketlar boshqa paket ichida joylashgan paketlardir. Ular sukut bo'yicha import qilinmaydi, lekin agar kerak bo'lsa, ularni qo'lda import qilishingiz mumkin. Kirish spetsifikatsiyasi kichik paketning alohida a'zolariga taqdim etilmaydi; ular alohida paketlar sifatida ko'rib chiqiladi.
Java-da paketlarning ayrim turlari:
- java.lang - sukut bo'yicha Java bilan birga keladi.
- java.io - kirish/chiqarish bilan bog'liq sinflar, usullar va boshqa elementlarni o'z ichiga oladi.
Nima uchun paketlar kerak?
- Ismlar to'qnashmasligi uchun.
- Boshqariladigan kirishni ta'minlash uchun.
- Ma'lumotlarning inkapsulyatsiyasiga erishish uchun.
Java-da paketni qanday yaratish mumkin?
Kompyuter deb nomlangan paketni yaratamiz . Odatda paket nomi kichik harflar bilan yoziladi. Bu faqat sinf nomlari bilan nom ziddiyatlarini oldini olish uchun amalga oshiriladi.
Bundan tashqari, Pluggable deb nomlangan interfeys yaratamiz , u
kompyuter paketida joylashgan bo'ladi .
package computer;
interface Pluggable {
public void pluggedIn();
public void pluggedOut();
}
Endi biz yuqoridagi interfeysni amalga oshiradigan
PenDrive nomli sinfni yaratamiz .
package computer;
public class PenDrive implements Pluggable {
int storage = 64;
public void pluggedIn () {
System.out.println("Pen Drive is connected");
}
public void pluggedOut () {
System.out.println("Pen Drive is removed");
}
public int storage() {
return storage;
}
public static void main(String args[]) {
PenDrive p = new PenDrive ();
p.pluggedIn();
System.out.println("Pen Drive Storage: " + p.storage());
p.pluggedOut();
}
}
Java-da paketlar ierarxiyasini qanday yaratish mumkin?
Ierarxiyani shakllantirishda Java-dagi paketlar teskari tartibda nomlanadi. Bu ularni katalog yoki papkalarga juda o'xshash qiladi. Xuddi shaxsiy kompyuterda bo'lgani kabi, bitta papkada bir yoki bir nechta pastki papkalar bo'lishi mumkin, xuddi shu narsa Java paketlari uchun ham amal qiladi.
Keling, Asia.India.Kolkata nomli paketni ko'rib chiqaylik . Bularning barchasi mavjud papkalar, lekin agar siz geografiyani hisobga olsangiz, Kalkutta Hindistonda, Hindiston esa Osiyoda ekanligi aniq. Ierarxiyaning asosiy maqsadi sinflarni topishni osonlashtirishdir.
Java-da paketlar turlari
O'rnatilgan paketlar
O'rnatilgan paketlar Java API tarkibiga kiruvchi ko'p sonli o'rnatilgan sinflardan tashkil topgan paketlardir. Ushbu paketlarga quyidagilar kiradi:
- java.util - Bu to'plamda bog'langan ro'yxat, to'plamlar va boshqalar kabi ma'lumotlar tuzilmalarini amalga oshirish uchun foydalaniladigan cheklangan miqdordagi yordamchi sinflar mavjud. Shuningdek, u sana va vaqt operatsiyalarini va boshqa ko'p narsalarni qo'llab-quvvatlaydi.
- java.net - U tarmoq operatsiyalari uchun ishlatiladigan sinflarni o'z ichiga oladi.
Foydalanuvchi tomonidan belgilangan paketlar
Foydalanuvchi tomonidan belgilangan paketlar foydalanuvchi paketlari deb ataladi. Foydalanuvchi paketni qo'lda yaratishi va unda xohlagancha sinflarga ega bo'lishi mumkin.
Boshqa paketdan paketga qanday kirish mumkin?
Siz boshqa paketdagi paketga uchta oddiy usulda kirishingiz mumkin:
- Import bayonotida yulduzchadan foydalanish
Yulduzcha (
* ) Java-da “hamma narsani” ifodalash uchun ishlatiladi. Undan foydalanib, biz paketning pastki paketidagi hamma narsani import qilishimiz mumkin.
Misol: asboblar deb nomlangan paketni ko'rib chiqing . Agar biz ushbu paketdagi hamma narsani import qilmoqchi bo'lsak, import bayonotidan foydalanishimiz kerak:
import tools.*;
- Import paketidan foydalanish.ClassName ;
Paketdagi sinf nomini eslatib o'tish dasturingizga faqat kerakli sinflarni import qilishning samarali usuli hisoblanadi va shu bilan keraksiz sinflarni import qilishdan qochadi.
Misol: kitoblar deb nomlangan paketni ko'rib chiqing .
Agar biz undan faqat ma'lum bir sinf yoki interfeysni import qilmoqchi bo'lsak (biz Pages sinfini ko'rib chiqamiz ), u holda biz buni faqat quyidagi yordamida import qilishimiz mumkin:
import book.Pages;
- To'liq ismingizdan foydalanish
Java paketini yoki uning sinflarini to'liq malakali nomidan foydalanib, to'g'ridan-to'g'ri ishlatish usuli mavjud. Shunday qilib, siz paketni import qilishingiz shart emas va uni to'g'ridan-to'g'ri dasturda ishlatishingiz mumkin.
Misol:
java.awt.List aSimpleList = new java.awt.List();
Java-da standart paket hajmi
Odatiy bo'lib, Java
java.lang paketini import qiladi .
U String ,
Integer va boshqalar kabi oddiy Java dasturlarida keng qo'llaniladigan ko'plab sinflarga ega . Eng muhim sinflardan biri
Object klassi bo'lib, u o'z navbatida java.lang paketida ham mavjud . Ushbu paketning hajmi uning tarkibiy qismlariga asoslanadi: 8 ta interfeys, 37 ta sinf, 3 ta raqam, 27 ta istisno, 23 ta xato turi va 5 ta izoh turi.
Yangi boshlanuvchilar uchun Java-ning xavfsiz usullari
Manba:
O'rta Ushbu maqoladan foydalanib, siz Java-da ipni xavfsiz ishlash usullari bilan tanishishingiz mumkin. ![Kofe tanaffusi №165. Java tilidagi paketlar. Yangi boshlanuvchilar uchun ipdan xavfsiz usullar - 2]()
Men ko'plab kichik/o'rta Java dasturchilari haqiqiy loyihalarda ip-xavfsiz usullar qanday ishlashini noto'g'ri tushunishlarini aniqladim. Va biz odatda ko'p tarmoqli muhitda ishlayotganimiz sababli, ulardan to'g'ri foydalanish juda muhimdir. Tarmoq uchun xavfsiz usul - bu bir vaqtning o'zida bir nechta ish zarrachalaridan bir-birining ma'lumotlar holatiga ta'sir qilmasdan chaqirilishi mumkin bo'lgan usul. Ushbu kontseptsiyani etarli darajada tushunmaslik, topish va tuzatish qiyin bo'lgan xatolarga olib keladi. Bunday xatolarga yo'l qo'ymaslik uchun keling, misollarni ko'rib chiqaylik.
1-misol:
public static int countLetters(String input) {
int counter = 0;
for (Character c : input.toCharArray()) {
if (Character.isAlphabetic(c)) {
counter++;
}
}
return counter;
}
- CountLetters usuli statik, u int qiymatini qaytaradi va string parametrini kiritish sifatida qabul qiladi.
- Usul ichida ibtidoiy o'zgaruvchilar hisoblagichi yaratiladi, so'ngra tsikl kirish satrining belgilaridan o'tadi va har safar harf belgisiga duch kelganda o'zgaruvchi hisoblagichini oshiradi.
Ushbu usul ip xavfsizmi? Ko'pgina ishlab chiquvchilar "yo'q" deyishadi, chunki bu holda bizda o'sish operatsiyasi mavjud, bu ip xavfsiz emas. Keling, buni aniqlaylik. Java xotira modelida bizda stack va heap mavjud. Har bir ipning o'z stekiga ega va barcha iplar bir xil to'plamga ega. Shu munosabat bilan, stek ma'lumotlari har doim xavfsiz bo'ladi, lekin yig'ma ma'lumotlar bunday emas. Stack ibtidoiy va ob'ektga havolalarni saqlaydi. Uyumda ob'ektlarning o'zi mavjud. Bu shuni anglatadiki, ushbu kod misolida har bir ip
o'z o'zgaruvchan hisoblagichini stekda saqlaydi va boshqa ish zarrachalarining ma'lumotlariga hech qanday ta'sir ko'rsatmaydi, shuning uchun usul
xavfsizdir .
E'tibor bering, String kiritish qiymati ham ob'ektdir, lekin String va ibtidoiy o'ramlar ( Integer , Long , Double , Boolean va boshqalar) ip xavfsizdir, chunki ular o'zgarmasdir.
2-misol:
public static int countLetters2(String input) {
List<Character> listCounter = new ArrayList<>();
for (Character c : input.toCharArray()) {
if (Character.isAlphabetic(c)) {
listCounter.add(c);
}
}
return listCounter.size();
}
Bu kod birinchi misol bilan bir xil mantiqdan foydalangan, lekin ibtidoiy
int o'zgaruvchisi o'rniga List ob'ektidan foydalangan . Oldingi qismdan bilamizki, Java-dagi ob'ektlar uyada saqlanadi va
List ob'ektdir. Biz shuningdek, stek uydagi ob'ektlarga havolalarni saqlashini bilamiz. 2-misolda har bir ip yangi
ArrayList ob'ektini yaratadi : listCounter
o'zgaruvchisi o'z ob'ektiga havolani yig'ishda saqlaydi, shuning uchun boshqa hech qanday mavzu bu ob'ektni o'zgartira olmaydi.
List<Character> listCounter = new ArrayList<>();
Bu shuni anglatadiki, bu usul ip xavfsizdir.
3-misol:
public class CounterUtil {
List<Character> listCounter = new ArrayList<>();
public int countLetters3(String input) {
for (Character c : input.toCharArray()) {
if (Character.isAlphabetic(c)) {
listCounter.add(c);
}
}
return listCounter.size();
}
}
Ushbu misolda bizda
listCounter global o'zgaruvchisi bo'lgan
CounterUtil singleton (bu muhim) sinf mavjud . Bu o'zgaruvchi singleton misoli bilan bir vaqtda yaratiladi.
Bir nechta ish zarrachalari countChars3 usulini chaqirganda , ularning barchasi bir xil ob'ektga havolani yig'ishda saqlaydigan
listCounter global o'zgaruvchisidan foydalanadi va u yerdagi iplar bir-biriga ta'sir qiladi. Shuning uchun biz bu usul xavfsiz emas degan xulosaga kelishimiz mumkin. Va agar biz
List<Character> listCounter ni int counter ibtidoiy o'zgaruvchiga o'zgartirsak ham , u ip xavfsiz bo'lmaydi, chunki barcha iplar bir xil ibtidoiy o'zgaruvchidan foydalanadi.
Oxirgi misol:
public static int countLetters4(List<Character> inputList) {
List<Character> listCounter = new ArrayList<>();
for (Character c : inputList) {
if (Character.isAlphabetic(c)) {
listCounter.add(c);
}
}
return listCounter.size();
}
countLetters4 usuli
String parametri o'rniga belgilar ro'yxatini qabul qiladi . Bu erda biz ushbu usulning ip xavfsiz ekanligiga
kafolat bera olmaymiz . Nega? Chunki ishlab chiquvchilar bu usuldan qanday foydalanishiga ishonchimiz komil emas.
Tashqaridan kelgan boshqa oqim inputList -dagi ma'lumotlarni
counterLetters4 usulimiz bilan bir vaqtda o'zgartirsa , bu yakuniy natijaga ta'sir qilishi mumkin.
Xulosa
Biz faqat to'rtta misolni ko'rib chiqdik va ular Java loyihalarida ip xavfsizligining barcha jihatlarini qamrab olmaydi, lekin ular boshlash uchun yaxshi joy. Keyingi safar kodingizda usulni ko'rsangiz, o'zingizdan so'rang: "Ushbu usul xavfsizmi?" Va juda tez orada siz javobni aniq tushunasiz.
GO TO FULL VERSION