Java bir kund



Download 1,09 Mb.
bet22/24
Sana30.09.2022
Hajmi1,09 Mb.
#850991
1   ...   16   17   18   19   20   21   22   23   24
Bog'liq
Java быстрый старт (1)

C:\\Users\\\\Documents\\myFile.txt

bu yerda sizning foydalanuvchi nomingiz. Yo'l oldidan qo'shaloq teskari chiziq \ bo'lishi kerak.


Agar siz faqat bitta belgi \ ta'minlasangiz, kompilyator uni xizmatlar ketma-ketligining boshlanishi deb hisoblaydi va \U, \D va hokazolarni xizmat ketma-ketligi sifatida izohlaydi va bu xatolikka olib keladi.
Dasturni ishga tushirishga harakat qiling. Matn faylining mazmuni ekranda ko'rsatiladi. Unchalik qiyin emas, to'g'rimi?
Biroq, Java-da fayllarni o'qishning osonroq yo'li mavjud. Men oldingi bo'limga materialni qo'shdim, chunki eski usuldan foydalanadigan ko'plab eski kodlar mavjud. Agar siz Java 7 va undan yuqori versiyalari bilan ishlayotgan bo'lsangiz , " resurslar bilan sinab ko'rish" deb nomlanuvchi sintaksisdan foydalanishingiz kerak. Buyruq avtomatik ravishda BufferedReader obyektini yopadi, shuning uchun siz close() usulini aniq chaqirishingiz shart emas . Ushbu usulni sinab ko'rish uchun oldingi main() usulidagi kodni quyidagi bilan almashtiring:
198 10-bob. Fayl operatsiyalari

ip chizig'i;

harakat qilib ko'ring (BufferedReader o'quvchi = yangi BufferedReader (yangi


FileReader("myFile.txt")))
{
line = reader.readLine(); while (satr!= null)
{
System.out.println(satr); line = reader.readLine();
}
}
catch (IOException e)
{
System.out.println(e.getMessage());
}

Iltimos, diqqat qiling: buyruq


BufferedReader o'quvchi = yangi BufferedReader (yangi
FileReader("myFile.txt"))

try kalit so'zidan keyin bir juft qavs ichiga ko'chirildi . Ushbu sintaksis yordamida BufferedReader obyektini aniq yopishingiz shart emas . Agar kerak bo'lmasa, Java avtomatik ravishda ob'ektni yopadi. Kod sezilarli darajada qisqaroq va xavfsizroq bo'ladi, chunki u tasodifan ob'ektni yopishni unutib qo'yish xavfini yo'q qiladi . Yangi dasturni ishga tushirishga harakat qiling


- u avvalgi versiya bilan bir xil ishlaydi.



    1. MATN FAYLGA YOZING

Endi matn fayliga ma'lumotlarni qanday yozishni ko'rib
chiqamiz . Faylga yozishning faylga yozish bilan umumiy tomonlari bor.
niem.

    1. Matn fayliga yozish 199


Matn fayliga yozish uchun BufferedWriter va FileWriter sinflaridan foydalaniladi . Quyidagi parcha bu qanday
amalga oshirilganligini ko'rsatadi. Kodni main() usulida almashtiring
quyidagicha:
String text = "Salom dunyo";
harakat qilib ko'ring (BufferedWriter writer = new BufferedWriter(yangi FileWriter("myFile2.txt", rost)))
{
yozuvchi.yozmoq(matn);
writer.newLine();
}
catch (IOException e)
{
System.out.println(e.getMessage());
}

Ushbu kod fayldan o'qish uchun yozilgan narsaga juda o'xshaydi . Asosiy farq shundaki, u BufferedWriter va FileWriter obyektidan foydalanadi.


Bundan tashqari, FileWriter obyekti yaratilganda ikkita argument uzatiladi , faylga yo'l va true qiymati.


Bu kabi FileWriter ob'ektini yaratganingizda , dastur agar u mavjud bo'lmasa , loyiha papkasida myFile2.txt faylini yaratadi. Agar fayl mavjud bo'lsa, dastur yozilayotgan ma'lumotlarni asl faylga qo'shib qo'yadi (chunki ikkinchi argumentda "true" berilgan).


Buning o'rniga fayldagi barcha mavjud ma'lumotlar almashtirilishi kerak bo'lsa, FileWriter ob'ektini yaratish kerak

Shunday qilib:


yangi FileWriter("myFile2.txt", noto'g'ri)


200 10-bob Fayl operatsiyalari

yoki shunga o'xshash:
yangi FileWriter("myFile2.txt")

Agar ikkinchi argument ko'rsatilmagan bo'lsa, standart dastur mavjud ma'lumotlarni qayta yozadi.


Keyin, FileWriter ob'ekti yaratilgandan so'ng , yangi BufferedWriter ob'ektini yaratish uchun BufferedWriter konstruktor argumentiga o'tkaziladi. Keyin write() usullari
va newLine() faylga ma'lumotlarni yozish uchun ishlatiladi. write() usuli faylga matn yozadi . newLine() usuli kursorni yangi qatorga olib boradi.
Ushbu kodni sinab ko'ring. Agar fayl myFile2.txt
hali mavjud emas , loyiha papkasida yangi fayl yaratiladi. Yaratilgan faylni ikki marta bosing; unda "Salom dunyo" matni yozilganligini ko'rasiz .
Dasturni qayta ishga tushiring. Faylda ikkinchi qator "Salom dunyo" paydo bo'ladi.
Agar siz yangi ma'lumotlarni qo'shishni xohlamasangiz , buyruqni almashtiring
harakat qilib ko'ring (BufferedWriter writer = new BufferedWriter(yangi FileWriter("myFile2.txt", rost)))
ustida

harakat qilib ko'ring (BufferedWriter writer = new BufferedWriter(yangi FileWriter("myFile2.txt")))


Dasturni ikki marta ishga tushiring va nima bo'lishini ko'ring . Dasturni ikkinchi ishga tushirgandan so'ng, faylda faqat bitta qator "Salom dunyo" bo'ladi. bu



    1. Fayl nomini o'zgartirish va o'chirish 201


chunki oldingi "Salom dunyo" qatori ustiga yozilgan.

Yuqoridagi misol BufferedWriter obyektini yaratish uchun " resurslar bilan sinab ko'ring " sintaksisidan foydalangan . Shunday qilib, BufferedWriter obyektini aniq yopishingiz shart emas . Agar siz Java 7 dan oldingi versiyadan foydalanayotgan bo'lsangiz , BufferedWriter obyektini yopishingiz kerak bo'ladi


yakuniy blokda . Bu xuddi bobning birinchi misolidagi
kabi amalga oshiriladi. Qanday davom etishingiz haqida shubhangiz bo'lsa , misolga qarang.
10.3. FAYLLARNING NOMINI QAYTARISH VA O‘CHIRISh

Endi siz fayllarga ma'lumotlarni o'qish va yozishni bilasiz , biz Java-da fayllar nomini o'zgartirish va o'chirishga o'tamiz. Fayl nomini o'zgartirish va o'chirish


operatsiyalari File sinfidan ikkita tayyor usul bilan amalga oshiriladi.
Fayl nomini o'zgartirish uchun ikkita fayl ob'ektini yaratishingiz kerak . Misol uchun, agar siz myFile.txt faylining nomini
myNewFile.txt ga o'zgartirmoqchi bo'lsangiz , quyida ko'rsatilganidek , ikkita fayl nomi uchun ikkita Fayl ob'ektini yarating :
Fayl f = yangi fayl (“myFile.txt”); File nf = new File("myNewFile.txt");
Shundan so'ng, faylning nomi buyruq bilan o'zgartiriladi

f.renameTo(nf);


202 10-bob Fayl operatsiyalari

renameTo () usuli fayl nomi muvaffaqiyatli o'zgartirilgan bo'lsa, rost , muvaffaqiyatsiz bo'lsa, noto'g'ri qaytaradi .
Agar siz faylni o'chirmoqchi bo'lsangiz, delete() usulidan foydalaning:
nf.delete();
Agar fayl muvaffaqiyatli o'chirilgan bo'lsa, usul haqiqatni qaytaradi . Aks holda, false qaytariladi.
Ushbu ikki usul keyinchalik yakuniy loyihada qo'llaniladi.
Machine Translated by Google


o'n bir


JAVA-ning ilg'or XUSUSIYATLARI


Tabriklaymiz! Yakuniy qoralama oldidan oxirgi bobga keldingiz. Ushbu bobda Java ning ba'zi ilg'or xususiyatlari, ya'ni generiklar, lambda ifodalari va funktsional interfeyslar haqida qisqacha ma'lumot beriladi.


11.1. UMUMIYLASHMALAR


Keling, umumlashma yoki generiklardan boshlaylik.


Aslida, siz 9-bobda LinkedList va ArrayList -dan foydalanganingizda allaqachon generiklardan foydalangansiz . Eslatib o‘tamiz , 9-bobda ArrayList Integer


obyektlari to‘plami quyidagi buyruq bilan e’lon qilinishini bilib oldingiz :
ArrayList myArrayList = new ArrayList();

9-bobda aytib o'tilganidek, burchakli qavslar ichidagi butun son < > ArrayListda Integer obyektlari mavjudligini bildiradi .


Boshqa tomondan, agar siz ArrayList ni e'lon qilmoqchi bo'lsangiz
String ob'ektlari bilan belgidan foydalaning
ArrayList myArrayList = new ArrayList();

Bu umumlashmalarning mohiyatidir. Generics sizga sinflar yaratishga imkon beradi (masalan, ArrayList klassi)


11.1. Umumlashtirish 205
ishchi ma'lumotlar turi burchakli qavs ichidagi parametr bilan ko'rsatilgan interfeyslar va usullar.
Ushbu sxema qanday ishlashini tushunish uchun keling, o'z umumiy sinfimizni yozamiz. Oddiy darsdan boshlaylik.
NetBeans-ni ishga tushiring va nomli yangi loyiha yarating
umumiy demo.

Yaratilgan kodni quyidagi bilan almashtiring:


umumiy demo paketi; umumiy sinf GenericsDemo {

umumiy statik void main(String[] args) {


MyGenericsClass g = new MyGenericsClass();


g.setMyVar(6); g.printValue();


}
}

sinf MyGenericsClass{


xususiy integer myVar;


void setMyVar (Integer i ){ myVar = i;


}

void printValue(){


System.out.println("myVar qiymati " myVar); +
}
}

Ushbu kod MyGenericsClass nomli sinfni yaratadi . Sinfda shaxsiy maydon (myVar) va ikkita usul mavjud


206 11-bob Java yaxshilanishlari

myVar qiymatini mos ravishda o'rnatadigan va chop etadigan setMyVar() va printValue() .
main() usulida MyGenericsClass namunasi yaratiladi. Keyin myVar -ga 6 qiymati tayinlanadi va bu qiymat printValue() usuli bilan chop etiladi. Agar siz ushbu dasturni ishga tushirsangiz, hamma narsa yaxshi ishlaydi va siz quyidagi natijaga erishasiz:
myVar qiymati 6 ga teng

Lekin tasavvur qiling-a, myVar -ga 6.1 qiymati tayinlanishi kerak . Chiziqni almashtirishga harakat qiling


g.setMyVar(6);

ustida

g.setMyVar(6.1);

va dasturni qayta ishga tushiring. Nima bo'lyapti? Siz xato xabarini oldingiz, to'g'rimi? Gap shundaki, myVar o'zgaruvchisi MyGenericsClass da turi bilan e'lon qilingan.


Butun son. 6.1 qiymati Integer turiga kirmaganligi
sababli xatolik yuz beradi.
Ammo sinf va usul Integer va Double bilan ishlashini xohlasangiz nima bo'ladi ? Bunday holda, umumlashtirishlardan foydalanish kerak. Buning uchun MyGenericsClass -da
ikkita o'zgartirish kiritish kerak.
Birinchidan, sinf deklaratsiyasi shaklga tushiriladi
sinf MyGenericsClass

T turi parametri deyiladi. Boshqacha qilib aytganda, bu ishlash uchun ma'lumotlar turini belgilaydigan parametrdir.


11.1. Umumlashtirish 207
sinfni eritadi. An'anaviy ravishda, tip parametrini ifodalash uchun katta T harfi ishlatiladi.
ro'yxatdan o'tish.

Keyin myGenericsClass -dagi barcha Integer kalit so'zlari T bilan almashtirilishi kerak.


Boshqacha aytganda, e'lon
xususiy integer myVar;

ga aylantirildi


shaxsiy T myVar;
va e'lon

void setMyVar (Integer i)


ga aylantirildi


bekor setMyVar(Ti)

Dasturni qayta ishga tushirib ko'ring. Nima bo'ladi?


Endi dastur ishlaydi, shunday emasmi? Aslida, myVar
-ga string belgilanishi mumkin va dastur hali ham ishlaydi. Chiziqni almashtirishga harakat qiling
g.setMyVar(6.1);
ip
g.setMyVar("Java");
va dasturni qayta ishga tushiring. U ishlaydi!
Ushbu misol umumlashmalarning mohiyatini ko'rsatadi. Ular sizga har xil turdagi ma'lumotlar bilan avtomatik ravishda ishlaydigan bitta sinf, interfeys yoki usul yaratish imkonini beradi.
208 11-bob Java Kengaytirilgan funksiyalari

Hammasi oddiy, to'g'rimi?
Biroq, bu umumlashmalarning yagona afzalligi emas. Ular, shuningdek, turdagi tekshirishni ham mumkin.
Yuqoridagi misoldagi MyGenericsClass generic Integer, Double va String turlari bilan ishlashini ko'rdingiz . Aslida, u har qanday mos yozuvlar turi bilan ishlaydi. Ushbu umumiylik kodni yanada
moslashuvchan qilishiga qaramasdan, u xatolarga olib kelishi mu
Tasavvur qiling, myVar o'zgaruvchisi sinfdagi o'quvchilar sonini saqlash uchun ishlatiladi . Agar sinfda 10 nafar o'quvchi bo'lsa va biz buyruqni bajaramiz
g.setMyVar(10);

hammasi yaxshi bo'ladi. Ammo deylik, siz xato qildingiz va buyruq yozdingiz


g.setMyVar(10.2);

Kompilyator xatoni aniqlay olmaydi, chunki setMyVar() umumiy usuldir. Bu katta dasturda aniqlash juda qiyin bo'lgan mantiqiy xatoga olib keladi . Java ushbu turdagi muammoni hal qilish imkonini beradi. Buyruq sifatida g ni e'lon qilish o'rniga


MyGenericsClass g = new MyGenericsClass();


aniqroq deklaratsiyadan foydalanish tavsiya etiladi
Leni:

MyGenericsClass g = new MyGenericsClass();



    1. Umumlashtirish 209

Deklaratsiyaga ni qo'shish orqali kompilyator MyGenericsClass ning T tip parametri g bilan ishlaganda Integer bilan almashtirilishi kerakligini biladi.
Ammo agar biz belgidan foydalansak
g.setMyVar(10.2);

xato xabarini olasiz.


Muxtasar qilib aytganda, generiklar har xil turdagi ma'lumotlarda ishlaydigan sinflar, interfeyslar va usullarni yozish mexanizmini ta'minlaydi. Shunday qilib , siz ishlashni xohlagan har bir ma'lumot turi uchun yangi sinf yozishingiz shart emas .
Bundan tashqari, ob'ektni yaratishda siz qaysi turdagi ma'lumotlar bilan ishlashni belgilashingiz mumkin. Bu kompilyatorga noto'g'ri ob'ekt turi bilan ishlashda yuzaga kelishi mumkin bo'lgan xatolarni aniqlash imkonini beradi.

11.1.1. CHEKLANGAN TURLAR


Oldingi bo'limda men umumlashtirishlar qanday ishlashini ko'rsatdim . MyGenericClass -dagi T tip parametri har qanday ma'lumot turini qabul qilishi mumkin, agar u mos yozuvlar turi bo'lsa (generiklar ibtidoiy turlar bilan ishlamaydi).
Ushbu bo'limda siz umumiy turdagi parametrni qanday aniqroq qilishni o'rganasiz . Ba'zi hollarda ma'lumotlar turlarini cheklash foydali bo'lishi mumkin
turi parametrida o'tkazilishi kerak.
210 11-bob Java yaxshilanishlari

Masalan, siz faqat raqamlar bilan ishlaydigan umumiy sinf yaratishingiz mumkin. U o'z ichiga olishi mumkin dy sonlarning yig'indisini va o'rtachasini hisoblash uchun. Bunday hollarda siz cheklangan foydalanishingiz mumkin
sintaksisi kengaytirilgan bo'limdan foydalanadigan turdagi parametr .
Misol uchun, agar siz formada turdagi parametrni ko'rsatsangiz



T ga faqat A ning kichik turlari bo'lgan ma'lumotlar turlari o'tkazilishi mumkin.


Barcha Java raqamli sinflari (masalan, Integer va Double) Number sinfidan kelib chiqadi. Agar sinf faqat raqamli ma'lumotlar turlari bilan ishlashini istasangiz, uni shunday deb e'lon qiling
sinf MyGenericsClass2
{

}


Agar hozir MyGenerics -ni yaratishga harakat qiling Class2 quyidagi buyruq bilan:
MyGenericsClass2 g2 = new MyGenericsClass2();

siz xatoga duch kelasiz, chunki String raqamdan kelib chiqadigan sinf emas .


Boshqa tomondan, buyruqlar
MyGenericsClass2 g3 = new MyGenericsClass2(); MyGenericsClass2 g4 = yangi MyGenericsClass2();

an'anaviy tarzda o'tadi, chunki Integer va Double ikkala raqamning pastki sinflaridir .


Ushbu bo'limda umumlashtirishlar haqida qisqacha ma'lumot berilgan . To'liq munozara butunlikni talab qiladi


boblar va bu mavzu kitob doirasidan tashqarida.

Keling, funktsional interfeyslar va lambda ifodalariga o'tamiz.





    1. FUNKSIONAL INTERFEYSLAR VA LAMBDA FOTOLARI

Funktsional interfeyslar va lambda iboralari tushunchalari umumiy jihatlarga ega. Funktsional interfeys tushunchasidan boshlaylik .

Download 1,09 Mb.

Do'stlaringiz bilan baham:
1   ...   16   17   18   19   20   21   22   23   24




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish