JavaRush /Java Blog /Random-TK /Kofe arakesmesi # 165. Java-da paketler. Täze başlanlar ü...

Kofe arakesmesi # 165. Java-da paketler. Täze başlanlar üçin ygtybarly usullar

Toparda çap edildi

Java paketleri

Çeşme: Usemynotes Bu ýazgy, Java-daky paketlere has gowy düşünmäge, maksadyna we olary nädip durmuşa geçirmelidigine düşünmäge kömek eder. Kofe arakesmesi # 165.  Java-da paketler.  Täze başlanlar üçin sapakdan ygtybarly usullar - 1

Java-da paketler näme

Java-daky paket, synplaryň, interfeýsleriň we kiçi bukjalaryň toparyny birleşdirmegiň usulydyr. Paketler baglanyşykly synplaryň, interfeýsleriň, sanalmagyň we ş.m. toparlaryny döretmek üçin ulanylýar. Subpackages başga bukjanyň içindäki paketlerdir. Dymmaklyk bilen import edilmeýär, ýöne zerur bolsa el bilen import edip bilersiňiz. Giriş spesifikasiýasy kiçi bukjanyň aýry-aýry agzalaryna berilmeýär, aýratyn paketler hökmünde seredilýär.

Java-da paketleriň käbir görnüşleri:

  • java.lang - adaty ýagdaýda Java bilen birikdirilýär.
  • java.io - giriş / çykyş bilen baglanyşykly synplary, usullary we beýleki elementleri öz içine alýar.

Näme üçin paketler gerek?

  • Adyň gapma-garşylyklaryndan gaça durmak üçin.
  • Dolandyryş ygtyýaryny üpjün etmek.
  • Maglumatlaryň jemlenmegine ýetmek.

Java-da bukjany nädip döretmeli?

Kompýuter diýilýän bukjany döredeliň . Adatça bukjanyň ady kiçi harplar bilen ýazylýar. Bu diňe synp atlary bilen at gapma-garşylygynyň öňüni almak üçin edilýär. Şeýle hem, kompýuter paketinde ýerleşjek “Pluggable” atly interfeýs dörederis .
package computer;

interface Pluggable {
   public void pluggedIn();
   public void pluggedOut();
}
Indi ýokardaky interfeýsi durmuşa geçirjek PenDrive atly synp dörederis .
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 paket iýerarhiýasyny nädip döretmeli?

Iýerarhiýa döredilende, Java-daky paketler ters tertipde atlandyrylýar. Bu olary kataloglara ýa-da bukjalara gaty meňzeýär. Şahsy kompýuterdäki ýaly, bir bukjada bir ýa-da birnäçe bukjany saklap bilýän ýaly, Java-daky paketlere-de degişlidir. Aziýa.India.Kolkata atly bukja seredeliň . Bularyň hemmesi bar bolan bukjalar, ýöne geografiýany göz öňünde tutsaň, Kalkutta Hindistanda, Hindistan Aziýada. Iýerarhiýanyň esasy maksady sapaklary tapmagy aňsatlaşdyrmak.

Java-da paketleriň görnüşleri

Gurlan paketler

Gurlan paketler, Java API-iň bir bölegi bolan köp sanly gurlan synplardan ybarat paketlerdir. Bu paketler şulary öz içine alýar:
  • java.util - Bu paketde baglanyşyk sanawy, toplumlar we ş.m. ýaly maglumat gurluşlaryny durmuşa geçirmek üçin ulanylýan köp sanly peýdaly synplar bar. Şeýle hem, sene we wagt amallaryny we başga-da köp zady goldaýar.
  • java.net - Tor amallary üçin ulanylýan sapaklary öz içine alýar.

Ulanyjy kesgitlän paketler

Ulanyjy tarapyndan kesgitlenen paketlere ulanyjy paketleri diýilýär. Ulanyjy el bilen bukjany döredip we isleýşi ýaly köp sapak alyp biler.

Başga bir paketden nädip paket almaly?

Bir paketden başga bir paketden üç sany ýönekeý usul bilen girip bilersiňiz:
  • Import beýanynda ýyldyz belgisini ulanmak
Teryldyzjyk ( * ) nyşany Java-da “hemme zady” aňlatmak üçin ulanylýar. Ony ulanyp, bukjanyň kiçi bukjasynyň içindäki zatlary import edip bileris. Mysal: Gurallar atly bukjany gözden geçiriň . Bu bukjanyň içindäki zatlaryň hemmesini import etmek islesek, import beýanyny ulanmalydyrys:
import tools.*;
  • Import paketini ulanmak.ClassName ;
Bukjada synpyň adyny ýatlamak, diňe programmaňyza zerur sapaklary import etmegiň täsirli usuly bolup, zerur däl synplary import etmegiň öňüni alýar. Mysal: Kitaplar atly bukjany gözden geçiriň . Diňe belli bir synpy ýa-da interfeýsi import etmek islesek ( Sahypalar synpyna serederis ), diňe şony ulanyp import edip bileris:
import book.Pages;
  • Doly adyňyzy ulanmak
Java paketini ýa-da synplaryny doly hünärli adyny ulanyp gönüden-göni ulanmagyň usuly bar. Şeýlelik bilen bukjany import etmeli däl we göni programmada ulanyp bilersiňiz. Mysal:
java.awt.List aSimpleList = new java.awt.List();

Java-da deslapky partiýa ululygy

Düzgüne görä, Java java.lang paketini import edýär . Onda String , Integer we başgalar ýaly ýönekeý Java programmalarynda köplenç ulanylýan köp synp bar . Iň möhüm sapaklaryň biri obýekt synpydyr, bu hem öz gezeginde java.lang paketinde bolýar . Bu bukjanyň göwrümi onuň böleklerine esaslanýar: 8 interfeýs, 37 synp, 3 san, 27 kadadan çykma, 23 ýalňyş görnüşi we 5 düşündiriş görnüşi.

Täze başlanlar üçin sapakly Java usullary

Çeşme: Orta Bu makalany ulanyp, Java-da sapak howpsuz usullarynyň işleýşi barada öwrenip bilersiňiz. Kofe arakesmesi # 165.  Java-da paketler.  Täze başlanlar üçin ygtybarly usullar - 2Köp kiçi / orta Java döredijileriň sapaklarda howpsuz usullaryň hakyky taslamalarda nähili işlemelidigine ýalňyş düşünýändiklerine göz ýetirdim. Adatça köp sapakly gurşawda işleýändigimiz sebäpli, olary dogry ulanmak gaty möhümdir. Bir sapakdan ygtybarly usul, bir-biriniň maglumat ýagdaýyna täsir etmezden bir wagtda birnäçe sapakdan çagyrylyp bilinýän usuldyr. Bu düşünjä ýeterlik düşünmezlik, tapmak we düzetmek kyn bolan kemçiliklere sebäp bolýar. Şeýle ýalňyşlyklardan gaça durmak üçin mysallara seredeliň.

Mysal # 1:

public static int countLetters(String input) {
    int counter = 0;

    for (Character c : input.toCharArray()) {
        if (Character.isAlphabetic(c)) {
            counter++;
        }
    }

    return counter;
}
  • “CountLetters” usuly statikdir, int bahasyny yzyna gaýtaryp berýär we giriş parametrini giriş hökmünde kabul edýär.
  • Usulyň içinde başlangyç üýtgeýän hasaplaýjy döredilýär, soňra aýlaw giriş setiriniň nyşanlaryndan aýlanýar we her gezek harp nyşany ýüze çykanda üýtgeýän hasaplaýjyny köpeldýär.
Bu usul sapak ygtybarlymy? Köp işläp düzüjiler ýok diýýärler, sebäbi bu ýagdaýda sapak ygtybarly däl artdyrmak amaly bar. Geliň muny anyklalyň. Java ýat modelinde bizde üýşmek we üýşmek bar. Her sapagyň öz bölegi bar we ähli sapaklar birmeňzeş üýşýär. Bu nukdaýnazardan seredeniňde maglumatlar elmydama sapak howpsuz, ýöne üýşmek maglumatlary beýle däl. Stakada başlangyç we obýekt salgylanmalary saklanýar. Toprakda obýektleriň özleri bar. Diýmek, bu kod mysalynda her sapak öz üýtgeýän hasaplaýjysyny stakada saklaýar we beýleki sapaklaryň maglumatlaryna hiç hili täsir etmeýär, şonuň üçin usul sapak howpsuzdyr . Giriş setiriniň bahasynyň hem bir obýektdigine üns beriň, ýöne setir we başlangyç örtükler ( Integer , Long , Double , Boolean we ş.m.) üýtgewsiz bolany üçin sapak howpsuzdyr.

Mysal # 2:

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 kody ilkinji mysal bilen birmeňzeş logika ulandy, ýöne başlangyç int üýtgeýjiniň ýerine Sanaw obýektini ulandy . Öňki bölümden Java-daky obýektleriň üýşmeleňde saklanýandygyny we Sanawyň obýektdigini bilýäris. Şeýle hem, üýşmeleňdäki üýşmeleňlere salgylanmalary saklaýandygyny bilýäris. Mysal üçin # 2, her sapak täze ArrayList obýektini döredýär : we listCounter üýtgeýjisi öz obýektine salgylanmany üýşmeleňde saklaýar, şonuň üçin başga bir sapak şol obýekti üýtgedip bilmez.
List<Character> listCounter = new ArrayList<>();
Bu, bu usulyň howpsuzdygyny aňladýar.

Mysal # 3:

public class CounterUtil { // singleton

    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();
    }
}
Bu mysalda, global üýtgeýän sanawCounter bilen ýeke-täk (bu möhüm) CounterUtil synpymyz bar . Bu üýtgeýji, singleton mysaly bilen bir wagtda döredilýär. Birnäçe sapak “CountChars3” usuly diýlende , hemmesi birmeňzeş obýekt sanawyny üýşmeleňde saklaýan şol bir global üýtgeýän sanawCounter-i ulanýarlar we ol ýerdäki sapaklar biri-birine täsir eder. Şonuň üçin bu usulyň howpsuz däldigi barada netije çykaryp bileris. Sanawy <Character> listCounter-i başlangyç üýtgeýän int hasaplaýjysyna üýtgedenimizde-de , sapak ygtybarly bolmaz, sebäbi ähli sapaklar birmeňzeş üýtgeýjini ulanar.

Iň soňky mysal:

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” usuly String parametriniň ýerine nyşanlaryň sanawyny kabul edýär . Bu ýerde bu usulyň howpsuzdygyna kepil geçip bilmeris . Näme üçin? Sebäbi döredijileriň bu usuly nähili ulanjakdygyna ynamymyz ýok. Daşardan başga bir sapak, girişListdäki maglumatlary garşydaşLetters4 usulymyz bilen bir wagtda üýtgetse , soňky netijä täsir edip biler.

Netije

Diňe dört mysala göz aýladyk we olar Java taslamalarynda sapak howpsuzlygynyň ähli taraplaryny öz içine almaýar, ýöne başlamak üçin gowy ýer. Indiki gezek koduňyzda bir usul göreniňizde, özüňize: "Bu usul sapak ygtybarlymy?" Soonakyn wagtda jogaba aýdyň düşünersiňiz.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION