JavaRush /Java Blogu /Random-AZ /Java Tam Sinif Bələdçisi

Java Tam Sinif Bələdçisi

Qrupda dərc edilmişdir
Bu yazıda Integer sinfi haqqında danışacağıq. Bu sualları nəzərdən keçirək:
  • sarğı sinifləri nədir;
  • primitivlərin avtomatik qablaşdırılması/açılması;
  • Integer sinfinin işi, onun metodları və sabitləri.
Java Tam Ədədi Sinfi Dərsliyi - 1

Primitiv tiplərin sarğı sinifləri

Bildiyiniz kimi, Java-da iki bloka bölünə bilən müxtəlif məlumat növləri var:
  • primitiv;
  • istinad.
Java-da bir neçə primitiv məlumat növləri var:
  • tam ədədlər - bayt, qısa, int, uzun;
  • üzən nöqtə nömrələri (real) - float, double;
  • məntiqi məlumat növü - boolean;
  • xarakter məlumat növü - char.
Hər bir ibtidai məlumat tipinin öz sarğı sinifi var. İbtidai kiçik qardaşını Java obyektinə saran istinad məlumat növü. Aşağıda ibtidai məlumat növləri və onlara uyğun sarğı sinifləri verilmişdir:
Primitiv tip Sinif sarğısı
bayt bayt
qısa Qısa
int Tam
uzun Uzun
sal Sal
ikiqat İkiqat
boolean Boolean
char Xarakter
Praktik mənada primitivlər və onların sarğı sinifləri çox şeyə malikdir. Əksər əməliyyatlar eyni şəkildə həyata keçirilir. Bununla belə, sarğı sinifləri primitivlərə xas olmayan bir sıra xüsusiyyətlərə malikdir. Birincisi, siniflər var: sarğı sinifləri ilə işləyərkən biz obyektlərlə işləyirik. İkincisi (aşağıdakı hər şey birinci bənddən irəli gəlir), bu obyektlər sıfır ola bilər. Üçüncüsü, sarğı sinifləri müəyyən bir məlumat növü ilə işləməyi asanlaşdıran bir sıra sabitlər və metodlar təqdim edir. Bu yazıda Integer sinfi ilə işləməyə daha yaxından nəzər salacağıq.

Tam ədəd

Integer sinfi int primitiv tipli sarğı sinifidir. Bu sinif int tipli tək bir sahəni ehtiva edir. Sarmalayıcı sinif kimi Integer int-lərlə işləmək üçün müxtəlif üsullar, həmçinin int-i String və String-i int-ə çevirmək üçün bir sıra üsullar təqdim edir. Aşağıda siniflə işləməyin müxtəlif nümunələrinə baxacağıq. Yaradılışdan başlayaq. Ən çox istifadə edilən (və istifadəsi ən asan) aşağıdakı yaratma variantıdır:
Integer a = 3;
Yəni, bu halda Tam dəyişənin inisializasiyası int dəyişəninin işə salınmasına bənzəyir. Bundan əlavə, Tam dəyişən int dəyişəninin dəyəri ilə işə salına bilər:
int i = 5;
Integer x = i;
System.out.println(x); // 5
Yuxarıdakı halda, avtomatik qablaşdırma gizli şəkildə baş verir. Bu barədə aşağıda daha ətraflı danışacağıq. Yuxarıda sadalanan başlatma seçimlərinə əlavə olaraq, konstruktor və yeni açar sözdən istifadə edərək, tam dəyişən digər obyektlər kimi yaradıla bilər:
Integer x = new Integer(25);
System.out.println(x);
Bununla belə, yazmaq və oxumaq daha çox vaxt tələb edir, buna görə də bu seçim ən az yayılmışdır. Siz int dəyişənləri ilə edə biləcəyiniz hər şeyi Tam dəyişənlərlə edə bilərsiniz. Onlar ola bilər:
qatlayın

Integer a = 6;
Integer b = 2;
Integer c = a + b;
System.out.println(c); // 8
Çıxar

Integer a = 6;
Integer b = 2;
Integer c = a - b;
System.out.println(c); // 4
Çoxalmaq

Integer a = 6;
Integer b = 2;
Integer c = a * b;
System.out.println(c); // 12
Bölmək

Integer a = 6;
Integer b = 2;
Integer c = a / b;
System.out.println(c); // 3
Artırma

Integer a = 6;
a++;
++a;
System.out.println(a); // 8
Azaltmaq

Integer a = 6;
a--;
--a;
System.out.println(a); // 4
Bununla belə, bütün bunlara baxmayaraq, diqqətli olmalısınız və Integer-in istinad məlumat tipi olduğunu və bu tip dəyişənin null ola biləcəyini xatırlamalısınız. Bu halda (əgər dəyişən sıfırdırsa), arifmetik əməliyyatlardan (və nullun yaxşı nəticə vermədiyi hər hansı digər) imtina etmək daha yaxşıdır. Budur bir nümunə:
Integer a = null;
Integer b = a + 1; // Здесь мы упадем с "Exception in thread "main" java.lang.NullPointerException"
System.out.println(b);
Əksər müqayisə əməliyyatları int primitiv tipində olduğu kimi həyata keçirilir:
Integer a = 1;
Integer b = 2;

System.out.println(a > b);
System.out.println(a >= b);
System.out.println(a < b);
System.out.println(a <= b);
Çıxış:

false
false
true
true
İki Tam dəyişənin müqayisəsi əməliyyatı diqqəti çəkir. Buradakı məqam budur ki, Tam bir istinad məlumat növüdür və onun dəyişənləri dəyərlərin (obyektlərin) özlərini deyil, dəyərlərə istinadları saxlayır. Bu faktın təzahürlərini aşağıdakı kod fraqmentinin icrası zamanı müşahidə etmək olar:
Integer a = 1;
Integer b = 1;
Integer c = new Integer(1);

System.out.println(a == b); // true
System.out.println(a == c); // false
Birinci bərabərliyin nəticəsi doğru, ikincisi isə yanlış olacaq. Bu ona görə baş verir ki, birinci halda biz eyni obyektə istinadları saxlayan iki dəyişəni (“a” və “b”) müqayisə edirik. İkinci halda, iki fərqli obyektə istinad edən iki dəyişəni müqayisə edirik ("c" dəyişənini yaratarkən yeni bir obyekt yaratdıq). Başqa bir maraqlı misal verək:
Integer a = 1;
Integer b = 1;

Integer x = 2020;
Integer y = 2020;

System.out.println(a == b); // true
System.out.println(x == y); // false
Gördüyümüz kimi, birinci müqayisənin nəticəsi doğru, ikincinin nəticəsi isə yanlışdır. Bütün bunlar keşləmə ilə bağlıdır. -128 ilə 127 daxil olmaqla bütün tam ədədlər (bu dəyərlər fərdiləşdirilə bilər) yaddaşda saxlanılır. Beləliklə, biz yeni dəyişən yaratdıqda və ona -128 ilə 127 arasında tam dəyər təyin etdikdə, biz yeni obyekt yaratmırıq, əksinə dəyişənə keş yaddaşda artıq yaradılmış obyektə istinad təyin edirik. İndi bu həqiqəti bildiyimiz üçün yuxarıdakı misal o qədər də mistik görünmür. a və b dəyişənləri eyni obyektə - keşdən olan obyektə istinad edir. Və x və y dəyişənlərinin inisializasiyası zamanı biz hər dəfə yeni obyekt yaratdıq və bu dəyişənlər müxtəlif obyektlərə istinadları saxladı. Və bildiyiniz kimi, == operatoru dəyişənlərin dəyərlərini müqayisə edir, istinad dəyişənlərinin dəyərləri isə istinadlardır. İki Tam dəyişən arasında bərabərliyi dəqiq yoxlamaq üçün (nə qədər mənasız səslənsə də) bərabər metoddan istifadə etməlisiniz. Yuxarıdakı nümunəni yenidən yazaq:
Integer a = 1;
Integer b = 1;

Integer x = 2020;
Integer y = 2020;

System.out.println(a.equals(b)); // true
System.out.println(x.equals(y)); // true

Tam ədədin avtomatik qablaşdırılması və açılması

Avtomatik qablaşdırma və qablaşdırma nədir? Yeni Tam dəyişənlər yaratarkən aşağıdakı konstruksiyadan istifadə etdik:
Integer a = 2020;
Bu yolla biz yeni açar operatorundan istifadə etmədən yeni obyekt yaratdıq. Bu, primitiv tipli int-in avtomatik qablaşdırma mexanizmi sayəsində mümkündür. Əks prosedur, Tamsaylı istinad dəyişəninin dəyərinə primitiv int dəyişəni təyin edərkən baş verir:
Integer a = 2020;
int x = a;
Bu halda, görünür, biz primitiv dəyişənə istinad təyin etmişik (yəni obyektə istinad “a” dəyişəninin qiymətidir). Amma əslində, avtomatik qablaşdırma mexanizmi sayəsində 2020 dəyəri “x” dəyişəninə yazılmışdır.Avtomatik qablaşdırma/açma Java-da çox yayılmış bir hadisədir. Çox vaxt bu, öz-özünə olur, bəzən hətta proqramçının xəbəri olmadan. Ancaq hələ də bu fenomen haqqında bilmək lazımdır. Javarush haqqında bu mövzuda maraqlı məqaləmiz var .

Tam sinif sabitləri

Integer sinfi tam ədədlərlə işləmək üçün müxtəlif sabitlər və metodlar təqdim edir. Bu bölmədə praktikada onlardan bəzilərini daha yaxından nəzərdən keçirəcəyik. Sabitlərdən başlayaq. Aşağıdakı cədvəl bütün sinif sabitlərini göstərir:
Kostanta Təsvir
ÖLÇÜ İkirəqəmli say sistemində int tipinin tutduğu bitlərin sayı
BAYT İkirəqəmli say sistemində int tipinin tutduğu baytların sayı
MAX_VALUE int tipinin saxlaya biləcəyi maksimum dəyər
MIN_VALUE int tipinin saxlaya biləcəyi minimum dəyər
TİP int növündən Class tipli obyekti qaytarır
Aşağıdakı kodu işlətməklə bütün bu sabitlərin dəyərlərinə baxaq:
public static void main(String[] args) {
        System.out.println(Integer.SIZE);
        System.out.println(Integer.BYTES);
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.TYPE);
}
Nəticədə aşağıdakı nəticəni alırıq:

32
4
2147483647
-2147483648
int

Integer sinfinin metodları

İndi Integer sinfinin ən çox istifadə olunan metodlarına qısa nəzər salaq. Beləliklə, "yuxarı" olanlara nömrəni sətirdən çevirmək və ya sətri nömrədən çevirmək üsulları başçılıq edir. Bir sətri nömrəyə çevirməklə başlayaq. Bu məqsədlər üçün parseInt metodu istifadə olunur , imza aşağıdadır:
  • 
    static int parseInt(String s)
Bu üsul String-i int-ə çevirir. Bu metodun necə işlədiyini nümayiş etdirək:
int i = Integer.parseInt("10");
System.out.println(i); // 10
Dönüşüm mümkün deyilsə - məsələn, biz parseInt metoduna sözü ötürdük - NumberFormatException atılacaq. parseInt(String s) metodunun həddən artıq yüklənmiş qardaşı var:
  • 
    static int parseInt(String s, int radix)
Bu üsul s parametrini int-ə çevirir. Radix parametri s hərfində olan ədədin ilkin olaraq hansı say sistemində yazıldığını, int-ə çevrilməli olduğunu göstərir. Aşağıdakı nümunələr:
System.out.println(Integer.parseInt("0011", 2)); // 3
System.out.println(Integer.parseInt("10", 8));   // 8
System.out.println(Integer.parseInt("F", 16));   // 15
parseInt metodları int primitiv məlumat növünü qaytarır. Bu metodların analoqu var - the valueOf metodu . Bu metodun bəzi variasiyaları sadəcə olaraq daxili olaraq parseInt çağırır. parseInt-dən fərq ondadır ki, valueOf nəticəsi int deyil, Tam ədəd olacaqdır. Bu metodun bütün variantlarını və onun necə işlədiyinə dair bir nümunəni aşağıda nəzərdən keçirək:
  • static Integer valueOf(int i) - dəyəri i olan Tam ədədi qaytarır;
  • static Integer valueOf(String s) - parseInt(String s) ilə oxşardır, lakin nəticə Tam ədəd olacaq;
  • static Integer valueOf(String s, int radix) - parseInt(String s, int radix) ilə oxşardır, lakin nəticə Tam ədəd olacaq.
Nümunələr:
int a = 5;
Integer x = Integer.valueOf(a);
Integer y = Integer.valueOf("20");
Integer z = Integer.valueOf("20", 8);

System.out.println(x); // 5
System.out.println(y); // 20
System.out.println(z); // 16
Stringi int/Integer-ə çevirməyə imkan verən üsullara baxdıq. Əks prosedur toString metodlarından istifadə etməklə həyata keçirilir . İstənilən Integer obyektində toString metodunu çağırıb onun sətir təsvirini əldə edə bilərsiniz:
Integer x = 5;
System.out.println(x.toString()); // 5
Bununla belə, toString metodunun tez-tez obyektlər üzərində gizli çağırılması səbəbindən (məsələn, obyekt çap üçün konsola göndərilərkən) bu üsul tərtibatçılar tərəfindən nadir hallarda açıq şəkildə istifadə olunur. Həmçinin int parametrini götürən və onu sətir təsvirinə çevirən statik toString metodu da var. Misal üçün:
System.out.println(Integer.toString(5)); // 5
Bununla belə, qeyri-statik toString metodu kimi, statik metoddan açıq şəkildə istifadə etmək nadirdir. Daha maraqlısı 2 tam parametr qəbul edən toString statik metodudur:
  • statik String toString(int i, int radix) - i-ni radix say sistemində sətir təsvirinə çevirəcək.
Misal:
System.out.println(Integer.toString(5, 2)); // 101
Integer sinfində iki ədədin maksimum/minimumunu tapmaq üçün bir neçə üsul var:
  • statik int max(int ​​a, int b) ötürülən dəyişənlər arasında ən böyük dəyəri qaytaracaq;
  • statik int min(int a, int b) ötürülən dəyişənlər arasında ən kiçik dəyəri qaytaracaq.
Nümunələr:
int x = 4;
int y = 40;

System.out.println(Integer.max(x,y)); // 40
System.out.println(Integer.min(x,y)); // 4

Nəticə

Bu yazıda Integer sinfinə baxdıq. Bunun hansı sinif olduğunu və sarğı siniflərinin nə olduğunu danışdıq. Biz dərsə praktiki baxımdan baxdıq. Müqayisə əməliyyatları da daxil olmaqla hesab əməliyyatlarının nümunələrinə baxdıq. Biz iki Tam dəyişənin müqayisəsinin incəliklərinə nəzər saldıq və keşlənmiş obyektlər anlayışını araşdırdıq. Primitiv məlumat növlərinin avtomatik qablaşdırılması/açılması fenomenini də qeyd etdik. Bundan əlavə, Integer sinfinin bəzi metodlarına, eləcə də bəzi sabitlərə baxa bildik. Ədədlərin bir say sistemindən digərinə çevrilməsinə dair nümunələr verdilər.

Ev tapşırığı

  1. Integer sinfinin başqa hansı üsullarının olduğunu öyrənin (onları rəsmi sənədlərlə veb saytında öyrənə bilərsiniz ), tədqiq etdiyiniz metodlardan hansının (məqalədə verilmişlər istisna olmaqla) sizin fikrinizcə daha faydalı olduğunu şərhlərdə yazın ( ən çox istifadə edəcəksiniz). Həm də fikrinizin səbəblərini göstərin.

    PS Burada düzgün cavablar yoxdur, lakin bu fəaliyyət sizə sinfi daha yaxşı öyrənməyə imkan verəcək.

  2. Materialı birləşdirmək üçün kiçik sadə problemi həll edin.

    İki nömrəmiz var:

    1100001001 - ikilik say sistemində
    33332 - kvinar say sistemində

    Yalnız Integer sinfinin metodlarından istifadə edərək, verilmiş iki ədəd arasında maksimumu təyin etmək və sonra üçlü say sistemində maksimum və minimum qiymət arasındakı fərqi göstərmək lazımdır.

  3. Maksimum mümkün Tam Ədədi səkkizlik say sisteminə çevirin və nəticədə çıxan ədəddəki rəqəmlərin sayını göstərin (rəqəmi proqramla hesablayın).

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION