1. Primtiv tiplərin siyahısı
Java-da 8 əsas primtiv tip var. Bunlara primtiv deyirlər, çünki bu tiplərin dəyərləri obyekt deyillər və birbaşa dəyişənlərdə saxlanılır.
Bu tiplər barədə qısa informasiya verən cədvəl aşağıdadır:
Tip | Ölçü, bayt |
Dəyərlər aralığı | Susmaya görə dəyər | Təsviri |
---|---|---|---|---|
byte |
1 | -128 .. 127 | 0 |
Ən kiçik tam ədəd — bir bayt |
short |
2 | -32,768 .. 32,767 | 0 |
Qısa tam ədəd, iki bayt |
int |
4 | -2*109 .. 2*109 | 0 |
Tam ədəd, 4 bayt |
long |
8 | -9*1018 .. 9*1018 | 0L |
Uzun tam ədəd, 8 bayt |
float |
4 | -1038 .. 1038 | 0.0f |
Ondalık, 4 bayt |
double |
8 | -10308 .. 10308 | 0.0d |
Ondalık, ikiqat uzun, 8 bayt |
boolean |
1 | true , false |
false |
Məntiqi tip (yalnız true & false ) |
char |
2 | 0 .. 65,535 | '\u0000' |
Simvollar, 2 bayt, hər şey 0-dan böyük |
Bu arada, vacib detal. Əgər sinif dəyişəni (sinif sahəsi) və ya statik sinif dəyişəni elan etdinizsə və ona heç bir dəyər təyin etmədinizsə, o, susmaya görə dəyər ilə inizializasiya olunur. Belə dəyərlərin siyahısı cədvəldə verilib.
Metodların lokal dəyişənləri susmaya görə dəyərə sahib deyil, və əgər belə bir dəyişənə heç bir dəyər təyin etməsəniz, o, inicializasiya edilməmiş hesab olunur və dəyərindən istifadə etmək olmaz.
Amma gəlin yenidən primtiv tiplərə qayıdaq və bunları daha ətraflı nəzərdən keçirək
2. Tam tiplər
Java dilində düz 4 tam tip var: byte
, short
, int
və long
. Onlar ölçüləri və saxlaya biləcəkləri dəyərlərin diapazonu ilə fərqlənirlər.
int
tipi
Ən çox istifadə olunan tip int
tipidir. Onun adı Integer (tam) sözündən gəlir. Koddakı bütün tam ədədi ədədli dəyərlər int
tipində olurlar (əgər ədədin sonunda L
, F
və ya D
hərfləri göstərilməyibsə).
Bu tipdə dəyişənlərin dəyəri -2,147,483,648
-dən +2,147,483,647
-ə qədər qəbul edə bilər.
Bu kifayət qədər böyükdür və demək olar ki, bütün hallarda kifayət edir. Demək olar ki, bütün funksiyalar hansı ki, ədəd qaytarır, int
tipində ədəd qaytarırlar.
Nümunələr:
Kod | İzah |
---|---|
|
length() metodu sətirin uzunluğunu qaytarır |
|
length sahəsi massiv uzunluğunu özündə saxlayır. |
short
tipi
short
tipi öz adını short int
sözündən alıb. Ona hələ də qısa tam deyilir. int
tipindən fərqli olaraq, onun uzunluğu cəmi iki baytdır və mümkün dəyərlərin diapazonu -32,768
-dən +32,767
-ə qədərdir.
Yəni hətta bu tipdə milyon saxlamaq mümkün deyil. Hətta 50 min də. Bu, Java-dakı ən az istifadə olunan tam ədədi tipdir. Əsasən bu tip, yaddaşdan qənaət etmək istəyəndə istifadə olunur.
Məsələn, sizdə elə bir vəziyyət ola bilər ki, işlədiyiniz dəyərlərin 30 min keçməyəcəyi əvvəlcədən məlumdur və belə dəyərlər milyonlarla vardır.
Məsələn, siz ultra-yüksək dəqiqlikli şəkilləri işləyən bir proqram yazırsınız: bir rəngə 10
bit düşür. Amma şəkildə bir milyona yaxın piksel var. Burada artıq fərq edir, siz int
tipindən istifadə edirsiniz, yoxsa short
tipindən.
long
tipi
Bu tip öz adını long int
-dən götürüb — ona hələ də uzun tam deyilir. int
tipindən fərqli olaraq, onun sadəcə nəhəng dəyərlər diapazonu vardır: -9*1018
-dən +9*1018
-ə qədərdir.
Bəs niyə bu əsas tam tip deyil?
Hamısı Java-nın 90-cı illərin ortalarında yarandığı ilə əlaqədardır, həmin dövrdə əksər kompüterlər 32-bitlik idi. Bu da proseslərin əsasən 32-bitlik ədədlərlə işləmək üçün uyğunlaşdığı mənasına gəlirdi. 64-bitlik tam ədədlərlə işləmək prosessorlar üçün mümkün idi, amma belə ədədlərlə əməliyyatlar daha ləng olurdu.
Buna görə də proqramçılar ağıllı qərar verdilər və standart tam ədədi tip kimi int
tipini seçdilər, amma long
tipini yalnız onsuz keçinmək çətin olduğu hallarda istifadə etdilər.
byte
tipi
Bu, Java-da ən kiçik tam ədədi tipdir, lakin heç də ən az istifadə olunan deyil. Onun adı byte
sözü ilə üst-üstə düşür — Java-da minimal müraciət edilə bilən yaddaş hüceyrəsi.
byte
tipinin mümkün dəyərləri çox böyük deyil: -128
-dən +127
-ə qədərdir. Amma bu, onun üstünlüyü deyil. byte
tipi əsasən yaddaşda böyük anonim məlumat bloklarını saxlamaq lazım olduqda istifadə olunur. byte
tipli massiv bu məqsədlər üçün sadəcə mükəmməldir.
Məsələn, siz hansısa bir faylı harasa köçürməlisiniz.
Faylın məzmununu emal etməyə ehtiyacınız yoxdur: sadəcə yaddaş bölgəsi (buffer) yaratmaq istəyirsiniz, faylın məzmununu oraya köçürmək və sonra bu məlumatları başqa fayla yazmaq. Bu məqsəd üçün byte
tipli massiv tam yararlıdır.
Üstəlik, massiv tipində dəyişəndə yalnız yaddaş sahəsinə keçid saxlanır. Bu dəyəri hər hansı bir metoda verdikdə yalnız yaddaşda olan ünvan ötürüləcək, yaddaş sahəsinin özü isə kopyalanmayacaq.
byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
int size = sourceFile.read(buffer); // fayldan məlumatları buferə oxuyuruq
destFile.write(buffer, 0, size); // buferdən fayla məlumatları yazırıq
// əgər bufer tam dolmayıbsa, köçürmə dayandırılır
if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();
3. Onluq vergüllü tiplər
Sadə tiplərin arasında həmçinin iki onluq vergüllü tip var. Amma bu tam dəqiq ad deyil. Rəsmi olaraq onlar üzən nöqtəli ədədlər — floating point numbers adlanır. Adı standartdan gəlir: burada tam və kəsr hissələri nöqtə (vergül deyil) ayırır.
Hər ölkədə ədədlərin yazılması üçün öz standartları var (təəccüb!).
Çoxumuz minlikləri nöqtə ilə, kəsr hissələrini isə vergül ilə bölməyə vərdiş etmişik: məsələn, bir milyon tam və 153 mində
belə yazarıq: 1.000.000,153
. Amma ABŞ-da, harada ki Java yaradılıb, fərqli standart istifadə olunur: 1,000,000.153
Java-da iki üzən nöqtəli sadə tip var: double
və float
.
Əvvəllər dediyimiz kimi, bu tiplər içində xüsusi bir şəkildə təşkil olunmuşdur: əslində bu tiplərə aid olan hər bir dəyişəndə bir rəqəm yox, iki rəqəm saxlanılır:
Məsələn, 987654.321
kəsr ədədini belə təsvir etmək olar: 0.987654321*106
. Buna görə yaddaşda bu, iki ədəd kimi saxlanılır: 987654321
(mantissa — ədədin əsas hissəsi) və 6
(eksponent — onluq qüvvət).
float
tipi
float
tipinin adı floating point number ifadəsindən gəlir. Bu tipin ölçüsü kiçikdir — cəmi 4 bayt (32 bit), baxmayaraq ki, dəyəri -3.4*1038
-dən 3.4*1038
-ə qədər saxlayır. Mantissaya 24 bit, eksponentaya isə 8 bit ayrılır. Bu tip cəmi 8 mənalı rəqəm saxlaya bilir.
Bu yanaşma ədədin ölçüsünü artırmağa imkan verir, məsələn, int
ilə müqayisədə daha böyük rəqəmlər saxlayır, amma dəqiqlikdən imtina edirik. Mantissanın saxlanması üçün yaddaşın bir hissəsi götürülür, buna görə belə ədədlər cəmi 6-7 rəqəmi saxlayır, digər rəqəmlər isə atılır.
Nümunə:
Kod | Dəyişənin dəyəri |
---|---|
|
123.45679 |
|
12346.0 |
|
-1.2345679 |
Gördüyünüz kimi, bu tipin əsas çatışmazlığı — çox az mənalı rəqəm saxlamaq qabiliyyəti və səkkizinci rəqəmdən sonra dəqiqliyin itirilməsidir. Buna görə float
tipi Java proqramçılar arasında çox da populyar deyil.
double
tipi
double
tipi üzən nöqtə ilə standart tipdir. Adı double floating point ifadəsindən gəlir. Bəzən ona ikisəviyyəli dəqiqliklə üzən nöqtəli ədəd deyirlər. Bütün onluq ədəd literalları avtomatik olaraq double
tipinə aid olur.
Bu tip 8 bayt yaddaş (64 bit) tutur və -1.7*10308
-dən 1.7*10308
-ə qədər dəyər saxlayır. Əsas məqam ondadır ki, bu tipin mantissasına 53 bit, qalan 11 bit isə eksponentaya ayrılır.
Bu, 15-17 mənalı rəqəm saxlamağa imkan verir.
Nümunə:
Kod | Dəyişənin dəyəri |
---|---|
|
1234567890.1234567 |
|
1234567890.1234512 |
|
1234567890.1357913 |
Bu dəqiqlik, xüsusilə float
ilə müqayisədə, əsasdır: üzən nöqtəli ədədlər ilə əməliyyatların 99%-i double
tipi ilə həyata keçirilir.
Eksponent üçün 11
bit ayrılır ki, bu da onluq qüvvətləri -323
-dən +308
-ə qədər saxlamağa imkan verir (ikilik qüvvətləri isə -1024
-dən +1023
-ə qədər). double
tipi asanlıqla yüz sıfırdan sonra nöqtəli ədəd saxlaya bilir:
Kod | Dəyişənin dəyəri |
---|---|
|
600.0 |
4. Sonsuzluq
Floating-point (üzən vergül) ədədləri daha bir maraqlı xassəyə malikdir: onlar xüsusi bir dəyəri - sonsuzluğu saxlamağa imkan verir. Həm də müsbət sonsuzluq və mənfi sonsuzluq ola bilər.
Nümunələr:
Kod | Qeyd |
---|---|
|
|
|
|
|
|
Əgər sonsuzluğu bir ədədə vurursansa, nəticə yenə sonsuzluq olacaq. Əgər sonsuzluğa bir ədəd əlavə edirsənsə, nəticə yenə də sonsuzluq olacaq. Çox rahatdır.
Sayı deyil (NaN
)
Sonsuzluqla bağlı əməliyyatların hamısı sonsuzluq verir. Ümumiyyətlə, doğrudur, amma hamısı yox.
Floating-point ədədləri daha bir xüsusi dəyəri saxlayır — NaN
. Bu, Not a Number (sayı deyil) ifadəsindən götürülüb.
Riyaziyyatda, əgər sonsuzluğu sonsuzluğa bölsək, qeyri-müəyyənlik yaranmalıdır.
Amma Java-da əgər sonsuzluğu sonsuzluğa bölsək, nəticə NaN
olacaq.
Nümunələr:
Kod | Qeyd |
---|---|
|
|
|
|
|
|
NaN ilə aparılan istənilən əməliyyat NaN verir.
5. char
tipi
Java-da primitiv tiplər arasında daha bir tip var ki xüsusi diqqətə layiqdir — bu char
tipidir. Adı Character sözündən irəli gəlir və bu tip simvolları saxlamaq üçün istifadə olunur.
Simvollar isə məhz sətirləri təşkil edən elementlərdir: hər bir sətir simvollar massivindən ibarətdir.
Amma daha maraqlısı budur ki, char
tipi həm də rəqəm tipidir! Başqa sözlə, bu tip iki məqsədlidir.
Əslində isə char
tipi simvolları deyil, Unicode kodlaşdırmasından olan simvol kodlarını saxlayır. Hər bir simvolla müəyyən bir rəqəm — simvolun rəqəm kodu uyğun gəlir.
char
tipində olan hər dəyişən yaddaşda iki bayt yer tutur (elə short
kimi). Amma fərqli olaraq short
tipindən, tam ədəd tipi olan char
işarəsizdir və 0
-dan 65,535
-ə qədər olan dəyərləri saxlaya bilər.
char
tipi — hibrid bir tipdir. Onun dəyərləri həm ədəd (toplama və vurma əməliyyatlarını yerinə yetirmək olar), həm də simvol kimi şərh edilə bilər. Belə edilməsinin səbəbi odur ki, simvollar vizual təqdimata malik olsa da, kompüter üçün onlar ilk növbədə sadəcə rəqəmlərdir. Və onlarla rəqəm kimi işləmək çox daha rahatdır.
Unicode
Unicode — bu, dünya üzrə bütün simvolları əhatə edən xüsusi bir cədvəl (kodlaşdırma)dir. Və hər bir simvolun öz nömrəsi var. Təxminən belə görünür:
char
tipli dəyişənə müxtəlif yollarla dəyər mənimsətmək olar.
Kod | İzah |
---|---|
|
a dəyişəni latın hərfi A saxlayacaq. |
|
a dəyişəni latın hərfi A saxlayacaq. Onun kodu məhz 65 -dir. |
|
a dəyişəni latın hərfi A saxlayacaq.Onun kodu məhz 65 -dir ki, bu da onaltılıq sistemdə 41 -ə bərabərdir. |
|
a dəyişəni latın hərfi A saxlayacaq.Onun kodu məhz 65 -dir ki, bu da onaltılıq sistemdə 41 -ə bərabərdir.İki əlavə sıfır heç nəyi dəyişmir. |
|
a dəyişəni latın hərfi A saxlayacaq.Koduna görə simvolu təyin etmənin başqa bir yolu. |
Ən çox sadəcə simvolu dırnaq içində göstərirlər (cədvəlin birinci sətrində olduğu kimi). Amma sonuncu üsul da populyardır. Bu üsulun üstünlüyü odur ki, onu sətirlərdə də istifadə etmək olar.
Dediyimiz kimi, char
tipi həm də tam ədəd tipi olduğu üçün bu cür də yazmaq olar:
Kod | Ekran çıxışı |
---|---|
|
Ekranda latın hərfi B göstəriləcək.Çünki: A – 65 B – 66 C – 67 |
char
tipi ilə iş
Hər char
simvolu əslində ilk növbədə rəqəmdir (simvolun kodu), daha sonra isə simvoldur. Simvolun kodunu bildikdə, onu proqramda əldə etmək həmişə mümkündür. Misal:
Kod | Ekran çıxışı |
---|---|
|
|
Standart kodlar
Ən tanınmış simvol kodları bunlardır:
Simvollar | Kodlar |
---|---|
0 , 1 , 2 , ... 9 |
48 , 49 , 50 , ... 57 |
a , b , c , ... z |
97 , 98 , 99 , ... 122 |
A , B , C , ... Z |
65 , 66 , 67 , ... 90 |
6. boolean
tipi
Və nəhayət, sonuncu primitiv tip — boolean
tipidir.
Artıq bildiyiniz kimi, bu, sadəcə iki dəyər ala bilər: true
və false
.
Əslində, bu tip barədə artıq biləcəyiniz hər şeyi bilirsiniz.
GO TO FULL VERSION