Pakker i Java er en mekanisme, der indkapsler en gruppe af klasseunderpakker og grænseflader. Pakker bruges til:
- Forebyg navnekonflikter ved at tillade klasser med samme navn at eksistere i forskellige pakker som college.staff.cse.Employee og college.staff.ee.Employee.
 - Gør det nemmere at organisere at finde og bruge klassegrænseflader og andre komponenter.
 - Give kontrolleret adgang til beskyttede medlemmer, der er tilgængelige inden for den samme pakke og efter underklasser. Standardmedlemmer (ingen adgangsspecifikation) er kun tilgængelige i den samme pakke.
 
Ved at gruppere relaterede klasser i pakker fremmer Java dataindkapsling, hvilket gør kode genbrugelig og lettere at administrere. Du skal blot importere den ønskede klasse fra en pakke for at bruge den i dit program.
Oprettelse af brugerdefinerede pakker
Trin 1: Opret en mappe, hvori vi opretter vores pakker og Java-filer.
mkdir PROGRAMMERING
java streng ind i array
Trin 2: Skift nu mappen og opret en anden mappe inde i hovedmappen
CD PROGRAMMERING
mkdir JavaProgrammering
cd Java-programmering
mkdir arrays
Trin 3: Opret nu en tom tekstfil og skriv nedenstående Java-kode og glem ikke at gemme den med samme navn som klassen med .java-udvidelsen (TwoPointers.java)
TwoPointers klasse.
Java
package JavaProgramming.arrays; // Main class present inside the package  public class TwoPointers {  public static void main(String[] args) {  System.out.println('Inside the package');  } } 
   
    Note:   Glem ikke at tilføje pakkenavnet i programfilen.
Trin 4: Kør nu programmet med den definerede mappesti
javac srcJavaProgrammeringsstrålerTwoPointers.java
java srcJavaProgrammingarraysTwoPointers.java
Produktion:
Kører program med mappestiMappestruktur:
Dette er den visuelle repræsentation af en brugerdefineret pakke i Java i billedet nedenfor. Først laver vi en mappe ved navn Progamming og inde i den laver vi en pakke Javaprogrammering og laver så en anden underpakke som hedder arrays . Derefter opretter vi en Java-klassefil inde i den, som er vist på billedet nedenfor:
MappestrukturArbejde med Java-pakker
Katalogstruktur: Pakkenavne og biblioteksstrukturer er tæt beslægtede. For eksempel hvis et pakkenavn er college.staff.cse, så er tre mapper college personale og cse hvor cse er inde i personalet og personalet er inde på college.
Navnekonventioner : Pakkenavne skrives i omvendt rækkefølge af domænenavne f.eks. org.geeksforgeeks.practice. På et college kan konventionen være:
- college.tech.cse
 - college.tech.ee
 - college.kunsthistorie
 
Eksempel:
importer java.util.*;
Her er util en underpakke oprettet inde i java-pakken.
Adgang til klasser i en pakke
I Java kan vi importere klasser fra en pakke ved at bruge en af følgende metoder:
1. Importer en bestemt klasse :
import java.util.Vector;
Dette importerer kun Vector-klassen fra java.util-pakken.
markdown fodnoter
2. Importer alle klasser fra en pakke :
importer java.util.*;
Dette importerer alle klasser og grænseflader fra java.util-pakken, men inkluderer ikke underpakker.
Eksempel: Importer Vector-klassen
Javaimport java.util.Vector; public class Geeks {    public Geeks() {    // java.util.Vector is imported We are able to access it directly in our code.  Vector v = new Vector();    java.util.ArrayList l = new java.util.ArrayList();  l.add(3);  l.add(5);  l.add(7);    System.out.println(l);  }  public static void main(String[] args) {      new Geeks();  } } 
   Produktion
[3 5 7]
Note:
- Bruger importpakke.*; importerer alle klasser i en pakke, men ikke klasser fra dens underpakker.
 - Når to pakker har klasser med samme navn (f.eks. java.util.Date og my.package.Date), skal du bruge det fuldt kvalificerede navn for at undgå konflikter:
 
import java.util.Date;
importere min.pakke.Dato;
Typer af Java-pakker
- Indbyggede pakker
 - Brugerdefinerede pakker
 
1. Indbyggede pakker
Disse pakker består af et stort antal klasser, som er en del af Java API .Nogle af de almindeligt anvendte indbyggede pakker er:
- java.lang : Indeholder sprogunderstøttelsesklasser (f.eks. klasser, der definerer matematiske operationer af primitive datatyper). Denne pakke importeres automatisk.
 - java.io: Indeholder klasser til understøttelse af input/output operationer.
 - java.util : Indeholder hjælpeklasser, der implementerer datastrukturer som Linked List Dictionary og support; for dato/klokkeslæt operationer.
 - java.applet: Indeholder klasser til oprettelse af applets.
 - java.aut: Indeholder klasser til implementering af komponenterne til grafiske brugergrænseflader (som knap ;menuer osv.). 6)
 - java.net: Indeholder klasser til understøttelse af netværksoperationer.
 
2. Brugerdefinerede pakker
Det er de pakker, der er defineret af brugeren.
abstrakt klasse vs grænseflade
1. Opret pakken:
Først opretter vi en mappe myPackage (navnet skal være det samme som navnet på pakken). Opret derefter MyClass inde i mappen, hvor den første sætning er pakkenavnene.
Eksempel:
Javapackage myPackage; public class MyClass {  public void getNames(String s)  {   System.out.println(s);   } } 
   
    2. Brug klassen i programmet:   
Nu vil vi bruge Min Klasse klasse i vores program.
Java import myPackage.MyClass; public class Geeks {  public static void main(String args[]) {     // Initializing the String variable with a value   String s = 'GeeksforGeeks';    // Creating an instance of class MyClass in the package.  MyClass o = new MyClass();    o.getNames(s);  } } 
   
    Note:   MyClass.java skal gemmes i myPackage biblioteket, da det er en del af pakken.  
Statisk import i Java
Statisk import i Java handler om at forenkle adgangen til statiske medlemmer og adskiller den fra den bredere diskussion af brugerdefinerede pakker.
Statisk import er en funktion introduceret i programmeringssproget Java (version 5 og nyere), der tillader medlemmer (felter og metoder) defineret i en klasse som offentlige statisk skal bruges i Java-kode uden at angive den klasse, hvor feltet er defineret.
Eksempel:
Javaimport static java.lang.System.*; class Geeks {  public static void main(String args[]) {    // We don't need to use 'System.out' as imported using static.  out.println('GeeksforGeeks');  } } 
   Produktion
GeeksforGeeks
Håndtering af navnekonflikter
Når to pakker indeholder en klasse med samme navn (f.eks. java.util.Date og java.sql.Date), angiv det fulde pakkenavn for at undgå konflikter.
importer java.util.*;
importer java.sql.*;
//Og brug derefter Dato-klassen, så får vi en kompileringstidsfejl:
Dato i dag; //FEJL-- java.util.Date eller java.sql.Date?
Compileren vil ikke være i stand til at finde ud af, hvilken Date-klasse vi ønsker. Dette problem kan løses ved at bruge en specifik importerklæring:
import java.util.Date;
importer java.sql.*;
Hvis vi har brug for begge Date-klasser, skal vi bruge et fuldt pakkenavn, hver gang vi erklærer et nyt objekt i den klasse. For eksempel:
java.util.Date deadLine = ny java.util.Date();
java.sql.Date today = new java.sql.Date();registrere hukommelse
Directory Struktur og CLASSPATH
Pakkenavne svarer til en mappestruktur. For eksempel er en klasse Circle i pakken com.zzz.project1.subproject2 gemt som:
$BASE_DIR/com/zzz/project1/subproject2/Circle.class
- Her $BASE_DIR repræsenterer pakkens basismappe.
 - 'Prik' i pakkenavnet svarer til en undermappe af filsystemet.
 - Basismappen ( $BASE_DIR ) kunne være placeret hvor som helst i filsystemet.
 - Derfor skal Java-kompileren og runtime informeres om placeringen af $BASE_DIR for at lokalisere klasserne.
 - Det opnås af en miljøvariabel kaldet KLASSESTI .
 - CLASSPATH ligner en anden miljøvariabel PATH, som bruges af kommandoskallen til at søge efter de eksekverbare programmer.
 
Indstilling af CLASSPATH
CLASSPATH kan indstilles på en af følgende måder:
- CLASSPATH kan indstilles permanent i det miljø, trinnene I Windows er
 
Gå til Kontrolpanel -> System -> Avanceret -> Miljøvariabler.
- Vælg 'System Variables' for at anvende CLASSPATH for alle brugere på systemet.
 - Vælg 'Brugervariabler' for kun at anvende det for den bruger, der er logget på i øjeblikket.
 - Rediger eller opret CLASSPATH: Hvis CLASSPATH allerede eksisterer, skal du vælge den og klikke på 'Rediger', eller hvis den ikke findes, klik på 'Ny'
 - Indtast CLASSPATH Detaljer: I feltet 'Variable name' indtast: 'CLASSPATH' I feltet 'Variable value' indtast mapperne og JAR-filerne adskilt af semikolon.
 - Indtast mapperne og JAR-filerne adskilt af semikolon i feltet 'Variabelværdi'. Eksempel:
 
.c:javaprojectclasses;d:tomcatlibservlet-api.jar
- Prikken (
.) repræsenterer den aktuelle arbejdsmappe. - For at kontrollere den aktuelle indstilling af CLASSPATH udsted følgende kommando:
 
> INDSTIL KLASSEBIEN
CLASSPATH kan indstilles midlertidigt for den pågældende CMD shell-session ved at udstede følgende kommando:
> SET CLASSPATH=.;c:javaprojectclasses;d:tomcatlibservlet-api.jar
I stedet for at bruge miljøvariablen CLASSPATH kan du også bruge kommandolinjeindstillingen -classpath eller -cp for f.eks. javac og java kommandoerne
> java –classpath c:javaprojectclasses com.abc.project1.subproject2.MyClass3
Illustration af brugerdefinerede pakker: Oprettelse af vores første pakke: Filnavn – ClassOne.java
Javapackage package_name; public class ClassOne {  public void methodClassOne()  {  System.out.println('Hello there its ClassOne');  } } 
 Oprettelse af vores anden pakke: Filnavn – ClassTwo.java
Javapackage package_one; public class ClassTwo {  public void methodClassTwo()  {  System.out.println('Hello there i am ClassTwo');  } } 
 Gør brug af begge de oprettede pakker: Filnavn – Testing.java
Javaimport package_name.ClassOne; import package_one.ClassTwo; public class Testing {  public static void main(String[] args)  {  ClassTwo a = new ClassTwo();  ClassOne b = new ClassOne();  a.methodClassTwo();  b.methodClassOne();  } } 
 Tag nu et kig på mappestrukturen for både pakkerne og testklassefilen:
  
Adgangsmodifikatorer i konteksten af pakker
-     Offentlig:   Medlemmer med
publicmodifier er tilgængelige fra hvor som helst, uanset om adgangsklassen er i den samme pakke eller ej . - Beskyttet: Medlemmer med den beskyttede modifikator er tilgængelige i den samme pakke i underklasser
 - Misligholdelse: Medlemmer uden modifikator er kun tilgængelige inden for den samme pakke
 -     Privat:   Medlemmer med
privatemodifier er kun tilgængelige inden for samme klasse. De kan ikke tilgås af klasser i de samme pakkeunderklasser eller forskellige pakker.