logo

Java-pakker

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:

OutputJavaPackages' title=Kører program med mappesti

Mappestruktur:

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:

PakkeInJava1' loading='lazy' title=Mappestruktur

Arbejde 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

Java
import 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:

Java
package 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:

Java
import 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

Java
package package_name; public class ClassOne {  public void methodClassOne()  {  System.out.println('Hello there its ClassOne');  } } 

Oprettelse af vores anden pakke: Filnavn – ClassTwo.java

Java
package 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

Java
import 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:

Directory struktur' loading='lazy' title=

Adgangsmodifikatorer i konteksten af ​​pakker

  • Offentlig: Medlemmer medpublicmodifier 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 medprivatemodifier er kun tilgængelige inden for samme klasse. De kan ikke tilgås af klasser i de samme pakkeunderklasser eller forskellige pakker.