Java >> Java tutorial >  >> Tag >> package

Pakker i Java – typer, fordele og teknikker til at få adgang til pakker

Der er mapper eller mapper på vores computere til klassificering og tilgængelighed af forskellige filer, og i Java har vi pakker til det samme. I Java ligner pakker mapper, som hovedsageligt bruges til at organisere klasser og grænseflader.

Pakker hjælper os med at skrive bedre og håndterbar kode ved at forhindre navnekonflikter. Java giver nogle indbyggede pakker, som vi kan bruge, men vi kan også oprette vores egne (brugerdefinerede) pakker.

I denne artikel skal vi diskutere alt om pakker i Java sammen med deres syntakser og eksempler. Fremover i denne artikel skal vi lære –

  1. Pakker i Java
  2. Fordele ved at bruge pakker i Java
  3. Pakkertyper i Java
  4. Oprettelse af en pakke i Java
  5. Eksempel på Java-pakker
  6. Konventioner for pakkenavne
  7. Kompilering af en Java-pakke
  8. Udførelse af Java-pakkeprogram
  9. Adgang til en Java-pakke
  10. Underpakker i Java
  11. Vigtige punkter i Java-pakken
  12. Opdeling af klasser i pakker

Før du starter med pakker i Java, anbefales det stærkt, at du tager en hurtig revision på Java-grænsefladen med Techvidvan.

Hold dig opdateret med de nyeste teknologitrends, Deltag i TechVidvan på Telegram

Pakker i Java

En pakke er en samling af lignende typer Java-entiteter såsom klasser, grænseflader, underklasser, undtagelser, fejl og enums. En pakke kan også indeholde underpakker.

Fordele ved at bruge pakker i Java

Der er flere fordele ved at bruge Java-pakker, nogle af dem er som følger –

  • Gør nem søgning eller lokalisering af klasser og grænseflader.
  • Undgå navnekonflikter. For eksempel kan der være to klasser med navnet Student i to pakker, university.csdept.Student og college.itdept.Student
  • Implementer dataindkapsling (eller dataskjulning).
  • Giv kontrolleret adgang:De beskyttede adgangsspecifikationer og standard har adgangskontrol på pakkeniveau. Et medlem, der er erklæret som beskyttet, er tilgængeligt for klasser inden for den samme pakke og dens underklasser. Et medlem uden nogen adgangsspecifikation, der er standardspecifikation, er kun tilgængelig for klasser i den samme pakke.
  • Genbrug klasserne i andre programmers pakker.
  • Sammenlign klasserne i andre pakker unikt.

Bliv klogere på Access Specifiers i Java, som du ikke kendte til.

Vi har bare lagt lignende klasser i de samme pakker. Derefter importerer vi simpelthen klasserne fra eksisterende pakker gennem importerklæringen og bruger dem i vores program. En pakke giver adgang til nogle klasser, og andre opbevares til interne formål.

Bemærk:

  • Pakkenavne er punktseparerede, f.eks. java.lang.String
  • Pakker undgår navneområdekollision:En pakke kan ikke indeholde to klasser med de samme navne, men to forskellige pakker kan have en klasse med det samme navn.
  • Det nøjagtige navn på klassen identificeres af strukturen af ​​dens pakke.

Pakkertyper i Java

De kan opdeles i to kategorier:

  1. Java API-pakker eller indbyggede pakker og
  2. Brugerdefinerede pakker.

1. Java API-pakker eller indbyggede pakker

Java giver et stort antal klasser grupperet i forskellige pakker baseret på en bestemt funktionalitet.

Eksempler:

java.lang: Den indeholder klasser for primitive typer, strenge, matematiske funktioner, tråde og undtagelser.

java.util: Den indeholder klasser såsom vektorer, hashtabeller, datoer, kalendere osv.

java.io: Den har stream-klasser til input/output.

java.awt: Klasser til implementering af grafisk brugergrænseflade – vinduer, knapper, menuer osv.

java.net: Klasser til netværk

java. Applet: Klasser til oprettelse og implementering af applets

2. Brugerdefinerede pakker

Som navnet antyder, er disse pakker defineret af brugeren. Vi opretter en mappe, hvis navn skal være det samme som navnet på pakken. Så opretter vi en klasse inde i mappen.

Oprettelse af en pakke i Java

For at oprette en pakke vælger vi et pakkenavn og for at inkludere klasser, grænseflader, opregninger osv. inde i pakken, skriver vi pakken med dens navn øverst i hver kildefil.

Der kan kun være én pakkesætning i hver filtype. Hvis vi ikke skriver klasse, grænseflader inde i nogen pakke, vil de blive placeret i den aktuelle standardpakke.

Eksempel på Java-pakke

Vi kan oprette en Java-klasse inde i en pakke ved hjælp af enpakke søgeord.

package com.techvidvan.packagedemo; //package
class Example
{
      public static void main(String args[])
      {
            System.out.println("Welcome to Techvidvan’s Java Tutorial");
      }
}

Output:

Velkommen til Techvidvans Java Tutorial

Hvordan fungerer pakker i Java?

Navnene på pakker og mappestrukturen er tæt forbundet med hinanden.

For eksempel, hvis et pakkenavn er university.engineering.csedept, så er der tre mapper - university, engineering og csedept, sådan at csedept er til stede i engineering og engineering er til stede på universitetet.

Pakkeuniversitetet kan betragtes som en pakke på topniveau, mens ingeniørvidenskab er en underpakke af universitetet, og CSE-afdelingen er en underpakke af ingeniørvidenskab.

Pakkenavnekonventioner

Pakkenavne følger den omvendte rækkefølge af domænenavne, det vil sige org.techvidvan.tutorials. For eksempel på et universitet er den anbefalede konvention university.engineering.mech eller university.tech.it eller university.arts.history osv.

I følgende pakke:

java.util.Vector

  • java er en pakke på øverste niveau
  • til er en underpakke
  • og vektor er en klasse, som er til stede i underpakken util.

Kompilering af en Java-pakke

Hvis du bruger en IDE (Integrated Development Environment), skal du følge syntaksen nedenfor for at kompilere pakken:

javac -d directory javaFileName

For eksempel

javac -d . Example.java

-d angiver destinationen, hvor den genererede klassefil skal findes. Du kan bruge et hvilket som helst mappenavn som /home (i tilfælde af Linux), C:/mappenavn (i tilfælde af Windows), osv. Hvis du ønsker, at pakken skal være til stede i den samme mappe, kan du bruge prikken ( . )

Udførelse af Java-pakkeprogram

Du skal bruge et fuldt kvalificeret navn f.eks. com.techvidvan.MyClass etc for at køre klassen.

Sådan kompileres:

javac -d . MyClass.java

Her -d repræsenterer destinationen. . repræsenterer den aktuelle mappe.

Sådan kører du:

java com.techvidvan.MyClass

Adgang til pakker eller klasser fra en anden pakke

Hvis vi vil have adgang til alle klasser og grænseflader i en eksisterende pakke, bruger vi import udmelding. Vi kan gøre det på tre forskellige måder:

  • importpakke.*;
  • importer pakke.klassenavn;
  • fuldt kvalificeret navn.

1. Ved at bruge * efter importerklæringen kan vi få adgang til alle pakkens klasser, men ikke underpakkerne.

Syntaks:

For at importere alle klasserne:

import packageName.*;

Kode til at illustrere ovenstående koncept:

package com.techvidvan.packagedemo; //package
class MyClass
{
        public void printName(String name)
        {
                System.out.println(name);
        }
}
package com.techvidvan.packagedemo1;
import com.techvidvan.packagedemo.*;		//importing all the classes

public class MyClass1
{
  public static void main(String args[])
  { 
    // Initializing the String variable  with a value
    String name = "Techvidvan's Java Tutorial";

    // Creating an instance of class MyClass from another package.
    MyClass obj = new MyClass();
    obj.printName(name);

  }
}

Output:

Techvidvans Java Tutorial

2. Ved at bruge et bestemt klassenavn efter importerklæringen kan vi få adgang til den pågældende klassepakke, men ikke underpakkerne.

Syntaks:

For at importere en bestemt klasse:

import packageName.className;

Kode til at illustrere ovenstående koncept:

package com.techvidvan.packagedemo; //package
class MyClass
{
        public void printName(String name)
        {
                System.out.println(name);
        }
}

package com.techvidvan.packagedemo1;
import com.techvidvan.packagedemo.MyClass;        //importing a particular class MyClass

public class MyClass1
{
        public static void main(String args[])
        {
                // Initializing the String variable with a value
                String name = "Techvidvan's Java Tutorial";

                // Creating an instance of class MyClass from another package.
                MyClass obj = new MyClass();
                obj.printName(name);

        }
}

Output:

Techvidvans Java Tutorial

3. Brug af et Fuldt kvalificeret navn betyder, at vi kan få adgang til den erklærede klasse af forskellige pakker uden at bruge importerklæringen. Men du skal bruge et fuldt kvalificeret navn, hver gang du får adgang til klassen eller grænsefladen, som er til stede i en anden pakke.

Denne type teknik bruges generelt, når to pakker har samme klassenavn, eksempel klasse Dato er til stede i begge pakker java.util og java.sql .

Kode til at illustrere ovenstående koncept:

package com.techvidvan.packagedemo; //package
class MyClass
{
        public void printName(String name)
        {
                System.out.println(name);
        }
}

package com.techvidvan.packagedemo1;
public class MyClass1
{
        public static void main(String args[])
        {
                // Initializing the String variable with a value
                String name = "Techvidvan's Java Tutorial";

        // Using fully qualified name to access the class of different package
        com.techvidvan.packagedemo.MyClass obj = new com.techvidvan.packagedemo.MyClass();
        obj.printName(name);

        }
}

Output:

Techvidvans Java Tutorial

Bemærk: Hvis du importerer en pakke, kan du ikke importere underpakkerne. Hvis du importerer en pakke, vil alle klasserne og grænsefladen for den pakke blive importeret, men underpakkernes klasser og grænseflader vil ikke være tilgængelige. Derfor skal du også importere underpakken.

Bemærk: Rækkefølgen af ​​programmet skal være pakkenavn og derefter import sætning. Efter begge begynder klassen.

Underpakke i Java

Pakken, der findes i en pakke, kaldes underpakken . Den er oprettet for yderligere at kategorisere pakker.

For eksempel, hvis vi opretter en pakke inde i techvidvan-pakken, vil den blive kaldt underpakke.

Lad os sige, at vi har oprettet en anden pakke inde i techvidvan, og navnet på underpakken er tutorials. Så hvis vi opretter en klasse i denne underpakke, skal den have en pakkeerklæring på følgende måde:

package techvidvan.tutorials.classname;

Her er techvidvan en pakke, mens tutorials er en underpakke til techvidvan.

Standarden for at definere pakken er domain.company.package
eksempel com.techvidvan.tutorials.javatutorial eller org.iit.dao.

Kode til at forklare underpakke

package com.techvidvan.tutorials.javatutorial;
class Demo
{
       public static void main(String args[])
       {
              System.out.println("Inside a sub-package");
       }
}

Sådan kompileres: javac -d. Demo.java

Sådan kører du: java com.techvidvan.tutorials.javatutorial

Output:

Inde i en underpakke

Brug af statisk import

'Statisk import' er en funktion introduceret i Java-programmeringssproget til Java-versioner 5 og nyere, som tillader felter og medlemmer af en klasse, der er erklæret som offentlige og statiske, at blive brugt direkte i Java-koden uden at angive navnet på den klasse, hvori disse offentlige statiske felter eller metoder er defineret.

Kode til at illustrere brugen af ​​statisk importerklæring

// Note static keyword after import.
package com.techvidvan.packagedemo;
import static java.lang.System.*;
class StaticImportDemo
{
           public static void main(String args[])
           {
                      // We don't need to use 'System.out'
                      // as we imported the package using static.
                      out.println("TechVidvan");
           }
}

Output:

Techvidvan

Vigtige punkter om pakker i Java

  • Hver klasse tilhører en pakke. Hvis du ikke nævner nogen pakke, flytter klasserne i filen til en speciel unavngiven pakke, som er den samme for alle de filer, der ikke tilhører en specificeret pakke.
  • Flere klasser og grænseflader i en fil kan være en del af den samme pakke.
  • Hvis pakkenavnet er angivet, skal mappenavnet matche pakkenavnet.
  • Vi kan få adgang til de klasser, der er erklæret som offentlige i en anden pakke ved hjælp af:
    import pakkenavn.klassenavn

Opdel dine klasser i pakker

Du tænker måske, hvordan du kan kategorisere dine klasser i pakker. Der er ingen standardmetode til at gøre dette, men du er to metoder, som du kan følge:

1. Divider efter lag

Dette er den første metode, hvor vi opdeler klasserne i henhold til applikationens lag. For eksempel, hvis din applikation indeholder et netværkslag, vil du oprette en pakke med navnet netværk.

Alle klasser, der er relateret til applikationens netværk, er placeret i netværkspakken.

2. Opdel efter applikationsfunktionalitet

Du kan også opdele dine klasser ud fra, hvilken del af applikationsfunktionaliteten de tilhører. Så hvis din applikation har et funktionsområde, der beregner renter, vil du oprette en Java-pakke med navnet rente.

Alle klasser, der direkte eller indirekte er relateret til renteberegningerne, vil indgå i den pakke. Hvis antallet af klasser i rodpakken bliver meget stort, kan de også flyttes til underpakkerne.

Oversigt

Pakker er afgørende for bedre styring og adgang til kode. Da vi kom til slutningen af ​​vores selvstudie, lærte vi om pakkerne i Java i detaljer sammen med de to typer.

Vi dækkede også arbejdet, teknikkerne til at få adgang til pakkerne i andre pakker i Java, ved hjælp af syntaks og kodningseksempler. Dette vil helt sikkert være nyttigt for dit videre studium af Java-sproget.

Tak fordi du læste vores artikel. Hvis du har spørgsmål relateret til pakker i Java, så lad os det vide ved at skrive en kommentar nedenfor.

God læring 🙂


Java tag