JavaRush /Java Blog /Random-TK /Gaplamak, gaplamak we gaplamak

Gaplamak, gaplamak we gaplamak

Toparda çap edildi
Salam! Siz başlangyç görnüşleri bilen eýýäm tanyş we olar bilen köp işlediňiz. Gaplamak, gaplamak we gaplamak - 1Programmirlemekde we esasanam Java-da ilkinjileriň köp artykmaçlygy bar: az ýat tutýarlar we şeýlelik bilen programmanyň netijeliligini ýokarlandyrýarlar we aç-açan gymmatlyklara bölünýärler. Şeýle-de bolsa, Java-y öwrenmek prosesinde, “ Java-da hemme zat bir zat ” diýen mantra ýaly birnäçe gezek gaýtaladyk. Emma ilkinjiler bu sözleriň gönüden-göni ret edilmegidir. Olar obýekt däl. Diýmek, “hemme zat bir zat” ýörelgesi ýalanmy? Aslynda beýle däl. Java-da her bir başlangyç görnüşde ekiz dogany, örtük synpy ( Wrapper) bar. Örtük näme? Örtük, içindäki başlangyç gymmaty saklaýan ýörite synpdyr. Thisöne bu synp bolansoň, öz mysallaryny döredip biler. Hakyky obýekt bolmak bilen birlikde zerur başlangyç gymmatlyklary içerde saklarlar. Örtük synplarynyň atlary degişli primitivleriň atlaryna gaty meňzeýär ýa-da olar bilen düýbünden gabat gelýär. Şonuň üçin olary ýatlamak gaty aňsat bolar.
Ilkinji maglumatlaryň görnüşleri üçin ýazyjy synplar
Ilkinji maglumatlaryň görnüşleri Wrapper sapaklary
int Bitewi
gysga Gysga
uzyn Uzyn
baýt Baýt
ýüzmek Float
goşa Iki gezek
char Nyşan
boolean Boolean
Wrapper synp obýektleri edil beýleki ýaly döredilýär:
public static void main(String[] args) {

   Integer i = new Integer(682);

   Double d = new Double(2.33);

   Boolean b = new Boolean(false);
}
Wrapper sapaklary, başlangyç görnüşleriň bar bolan kemçiliklerini azaltmaga mümkinçilik berýär. Iň göze görnüp duran zat, ilkinjileriň usullary ýok . Mysal üçin, olaryň usuly ýok , şonuň üçin sanlary setire toString()öwrüp bilmersiňiz . intAöne örtük synpy bilen Integerbu aňsat.
public static void main(String[] args) {

   Integer i = new Integer(432);

   String s = i.toString();
}
Ters öwrülişikde kynçylyklar hem bolar. Elbetde, bir san bar diýip bilýän setirimiz bar diýeliň. Şeýle-de bolsa, ýönekeý görnüş bolan ýagdaýynda, intbu belgini setirden alyp, hakykatda bir sana öwrüp bilmeris. Emma sapak sapaklarynyň kömegi bilen indi bu mümkinçiligimiz bar.
public static void main(String[] args) {

   String s = "1166628";

   Integer i = Integer.parseInt(s);

   System.out.println(i);
}
Çykyş: 1166628 Bir setirden üstünlikli çykardyk we salgylanma üýtgeýjisine belledik Integer i. .Eri gelende aýtsak, baglanyşyklar hakda. Parametrleriň dürli usullar bilen usullara geçirilýändigini eýýäm bilýärsiňiz: başlangyçlar bahadan, obýektler bolsa salgylanma arkaly geçirilýär. Double/FloatUsullaryňyzy döredeniňizde bu bilimleri ulanyp bilersiňiz: usulyňyz, mysal üçin, fraksiýa sanlary bilen işleýän bolsa, ýöne salgylanmadan geçmegiň logikasy gerek bolsa, ýerine parametrleri parametrlere geçirip bilersiňiz double/float. Mundan başga-da, usullardan başga-da, örtük synplarynda ulanmak üçin amatly statiki meýdanlar bar. Mysal üçin, indi bir mesele bilen ýüzbe-ýüz bolmagyňyzy göz öňüne getiriň: mümkin bolan iň köp san konsola int, soňra bolsa mümkin bolan iň az belgini çap ediň. Wezipe başlangyç ýaly bolup görünýär, ýöne şonda-da, Google-dan peýdalanyp bilmersiňiz. Örtük sapaklary aşakdaky “gündelik meseleleri” çözmäge aňsatlyk bilen mümkinçilik berýär:
public class Main {
   public static void main(String[] args) {

       System.out.println(Integer.MAX_VALUE);
       System.out.println(Integer.MIN_VALUE);
   }
}
Şeýle meýdanlar has çynlakaý meselelerden daşlaşmaga mümkinçilik berýär. 2147483647 belgisini çap etmek işinde (bu MAX_VALUE takyk) ýalňyş ýazmak geň däldir :) Mundan başga-da, öňki leksiýalaryň birinde eýýäm örtük synplarynyň obýektleriniň ünsüni çekdik. üýtgewsizdir .
public static void main(String[] args) {

   Integer a = new Integer(0);
   Integer b = new Integer(0);

   b = a;
   a = 1;
   System.out.println(b);
}
Çykyş: 0 Ilki salgylanmanyň görkezen obýekti аýagdaýyny üýtgetmedi, ýogsam bahasy bhem üýtgärdi. Edil bolşy ýaly String, örtük obýektiniň ýagdaýyny üýtgetmegiň ýerine, ýatda düýbünden täze bir zat döredilýär. Näme üçin “Java” döredijileri ahyrky görnüşde dilde saklamagy karar etdiler? Hemme zat obýekt bolmaly we bizde eýýäm primitiwleriň aňladýan zatlaryny aňlatmak üçin ulanyp boljak sapak sapaklary bar, näme üçin olary diňe dilde goýup, ilkinjileri aýyrmaly däl? Jogap ýönekeý - ýerine ýetiriş. Ilkinji görnüşlere başlangyç diýilýär, sebäbi obýektleriň köp “agyr” aýratynlyklaryndan mahrum. Hawa, bir obýektiň köp amatly usullary bar, ýöne olara hemişe zerurlyk ýok. Käwagt diňe 33, ýa-da 2.62, ýa-da bahasy truegerek false. Obýektleriň ähli artykmaçlyklary ähmiýetsiz we programmanyň işlemegi üçin zerur bolmadyk ýagdaýlarda, ilkinjiler has gowy iş eder.

Awto-gaplamak / awtomatik gaplamak

Java-da primitiwleriň we olaryň deri sapaklarynyň aýratynlyklaryndan biri awtoboksirlemek / awtobokslamakdyr. Gaplamak, gaplamak we gaplamak - 2 Geliň bu düşünjä düşüneliň. Siziň we öňem öwrenişimiz ýaly, Java obýekte gönükdirilen dil. Bu Java-da ýazylan ähli programmalaryň obýektlerden ybaratdygyny aňladýar. Ilkinjiler obýekt däl. Şeýle-de bolsa, örtük synpynyň üýtgeýjisine başlangyç görnüşiň bahasy bellenilip bilner. Bu prosese awtobokslamak diýilýär . Edil şonuň ýaly, başlangyç görnüşiň üýtgeýjisine örtük synpynyň obýekti berlip bilner. Bu prosese awto-boks diýilýär . Mysal üçin:
public class Main {
   public static void main(String[] args) {
       int x = 7;
       Integer y = 111;
       x = y; // auto unpacking
       y = x * 123; // autopacking
   }
}
5-nji setirde, örtük synpynyň obýekti bolan başlangyç x bahasyny y belläris Integer. Görşüňiz ýaly, munuň üçin goşmaça hereketler gerek däl: düzüji muny bilýär intwe Integeraslynda şol bir zady . Bu awtomatiki usulda açylýar. 6-njy setirde awtobokslamak bilen hem edil şonuň ýaly zat bolýar: y obýekti başlangyçlaryň bahasyna aňsatlyk bilen berilýär (x * 123). Bu awtomatiki ýüklemegiň mysaly. Şonuň üçin “awto” sözi goşulýar: örtük synplarynyň obýektlerine başlangyç salgylanmalary bellemek üçin (we tersine) hiç zat etmegiň zerurlygy ýok, hemme zat awtomatiki bolýar . Amatly, şeýlemi? :) Awto-gaplamak / awtomatik gaplamagyň başga bir amatlylygy, usullaryň işleýşinde ýüze çykýar. Hakykat, usul parametrleriniň awtomatiki usulda we awtomatiki usulda ýüklenmegine degişlidir . Mysal üçin, olaryň biri giriş hökmünde iki zady alsa Integer, adaty primitivleri ol ýerden aňsatlyk bilen geçirip bileris int!
public class Main {
   public static void main(String[] args) {

       printNumber(7);//regular int, even without a variable
   }

   public static void printNumber(Integer i) {
       System.out.println("You entered a number" + i);
   }
}
Çykyş: 7-nji belgini girizdiňiz .
public class Main {
   public static void main(String[] args) {

       printNumber(new Integer(632));
   }

   public static void printNumber(int i) {
       System.out.println("You entered a number" + i);
   }
}
Rememberatda saklamaly möhüm bir zat: awtobokslamak we gutulmak massiwlerde işlemeýär !
public class Main {
   public static void main(String[] args) {

       int[] i = {1,2,3,4,5};

       printArray(i);//error, won't compile!
   }

   public static void printArray(Integer[] arr) {
       System.out.println(Arrays.toString(arr));
   }
}
Ilkinjileriň bir toparyny giriş hökmünde kabul edýän usula geçirmäge synanyşmak, düzme ýalňyşlygyna sebäp bolar. Ahyrynda, ýene bir gezek primitiwleri we örtükleri gysgaça deňeşdireliň :
  • öndürijilik artykmaçlygyna eýe
Wrappers:
  • Sanlar, nyşanlar we hakyky / ýalan bahalar bu düşünjeden çykmaz ýaly, “hemme zat bir zat” ýörelgesini bozmazlyga mümkinçilik berýär.
  • Amatly usullary we meýdanlary üpjün edip, bu gymmatlyklar bilen işlemek ukybyny giňeldiň
  • Käbir usul diňe obýektler bilen işläp bilse zerur
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION