Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java - Pakketten

Pakketten worden in Java gebruikt om naamgevingsconflicten te voorkomen, toegang te controleren, zoeken/lokaliseren en gebruik van klassen, interfaces, opsommingen en annotaties gemakkelijker te maken, enz.

Een Pakket kan worden gedefinieerd als een groep gerelateerde typen (klassen, interfaces, opsommingen en annotaties) die toegangsbeveiliging en naamruimtebeheer bieden.

Sommige van de bestaande pakketten in Java zijn −

  • java.lang − bundelt de basisklassen

  • java.io − klassen voor invoer, uitvoerfuncties zijn gebundeld in dit pakket

Programmeurs kunnen hun eigen pakketten definiëren om groepen klassen/interfaces, enz. te bundelen. Het is een goede gewoonte om gerelateerde klassen die door u zijn geïmplementeerd te groeperen, zodat een programmeur gemakkelijk kan bepalen dat de klassen, interfaces, opsommingen en annotaties gerelateerd zijn.

Aangezien het pakket een nieuwe naamruimte aanmaakt, zullen er geen naamconflicten zijn met namen in andere pakketten. Met behulp van pakketten is het gemakkelijker om toegangscontrole te bieden en is het ook gemakkelijker om de gerelateerde klassen te vinden.

Een pakket maken

Bij het maken van een pakket moet u een naam voor het pakket kiezen en een pakket . opnemen statement samen met die naam bovenaan elk bronbestand dat de klassen, interfaces, opsommingen en annotatietypes bevat die u in het pakket wilt opnemen.

De pakketinstructie moet de eerste regel in het bronbestand zijn. Er kan slechts één pakketverklaring in elk bronbestand zijn en het is van toepassing op alle typen in het bestand.

Als er geen pakketverklaring wordt gebruikt, worden de klasse, interfaces, opsommingen en annotatietypen in het huidige standaardpakket geplaatst.

Om de Java-programma's met pakketinstructies te compileren, moet u de optie -d gebruiken, zoals hieronder getoond.

javac -d Destination_folder file_name.java

Vervolgens wordt een map met de opgegeven pakketnaam gemaakt op de opgegeven bestemming en worden de gecompileerde klassenbestanden in die map geplaatst.

Voorbeeld

Laten we eens kijken naar een voorbeeld dat een pakket maakt met de naam dieren . Het is een goede gewoonte om namen van pakketten met kleine letters te gebruiken om conflicten met de namen van klassen en interfaces te voorkomen.

Het volgende pakketvoorbeeld bevat een interface met de naam dieren

/* File name : Animal.java */
package animals;

interface Animal {
   public void eat();
   public void travel();
}

Laten we nu de bovenstaande interface implementeren in hetzelfde pakket dieren

package animals;
/* File name : MammalInt.java */

public class MammalInt implements Animal {

   public void eat() {
      System.out.println("Mammal eats");
   }

   public void travel() {
      System.out.println("Mammal travels");
   } 

   public int noOfLegs() {
      return 0;
   }

   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
} 

Compileer nu de java-bestanden zoals hieronder getoond −

$ javac -d . Animal.java 
$ javac -d . MammalInt.java

Nu een pakket/map met de naam dieren worden aangemaakt in de huidige map en deze klassenbestanden worden erin geplaatst zoals hieronder weergegeven.

U kunt het klassenbestand in het pakket uitvoeren en het resultaat krijgen zoals hieronder weergegeven.

Mammal eats
Mammal travels

Het importzoekwoord

Als een klasse een andere klasse in hetzelfde pakket wil gebruiken, hoeft de pakketnaam niet te worden gebruikt. Klassen in hetzelfde pakket vinden elkaar zonder speciale syntaxis.

Voorbeeld

Hier wordt een klasse met de naam Boss toegevoegd aan het salarispakket dat al Werknemer bevat. De baas kan dan verwijzen naar de klasse Werknemer zonder het voorvoegsel voor de loonlijst te gebruiken, zoals blijkt uit de volgende klasse Baas.

package payroll;
public class Boss {
   public void payEmployee(Employee e) {
      e.mailCheck();
   }
}

Wat gebeurt er als de klasse Medewerker niet in het loonpakket zit? De Boss-klasse moet dan een van de volgende technieken gebruiken om naar een klasse in een ander pakket te verwijzen.

  • De volledig gekwalificeerde naam van de klasse kan worden gebruikt. Bijvoorbeeld −
payroll.Employee
  • Het pakket kan worden geïmporteerd met behulp van het import-trefwoord en het jokerteken (*). Bijvoorbeeld −

import payroll.*;
  • De klasse zelf kan worden geïmporteerd met het importsleutelwoord. Bijvoorbeeld −
import payroll.Employee;

Opmerking − Een klassenbestand kan een willekeurig aantal importinstructies bevatten. De importverklaringen moeten achter de pakketverklaring en vóór de klassenverklaring staan.

De directorystructuur van pakketten

Twee belangrijke resultaten treden op wanneer een klasse in een pakket wordt geplaatst −

  • De naam van het pakket wordt een deel van de naam van de klasse, zoals we zojuist in de vorige sectie hebben besproken.

  • De naam van het pakket moet overeenkomen met de directorystructuur waarin de corresponderende bytecode zich bevindt.

Hier is een eenvoudige manier om uw bestanden in Java te beheren −

Zet de broncode voor een klasse, interface, opsomming of annotatietype in een tekstbestand waarvan de naam de eenvoudige naam van het type is en waarvan de extensie .java is .

Bijvoorbeeld −

// File Name :  Car.java
package vehicle;

public class Car {
   // Class implementation.   
}

Plaats nu het bronbestand in een map waarvan de naam overeenkomt met de naam van het pakket waartoe de klasse behoort −

....\vehicle\Car.java

Nu zouden de gekwalificeerde klassenaam en padnaam als volgt zijn −

  • Klassenaam → voertuig.Auto
  • Padnaam → voertuig\Car.java (in vensters)

Over het algemeen gebruikt een bedrijf zijn omgekeerde internetdomeinnaam voor zijn pakketnamen.

Voorbeeld − De internetdomeinnaam van een bedrijf is apple.com, dan zouden alle pakketnamen beginnen met com.apple. Elk onderdeel van de pakketnaam komt overeen met een submap.

Voorbeeld − Het bedrijf had een pakket com.apple.computers dat een Dell.java-bronbestand bevatte, het zou in een reeks submappen zoals deze staan ​​−

....\com\apple\computers\Dell.java

Op het moment van compilatie maakt de compiler een ander uitvoerbestand voor elke klasse, interface en opsomming die erin is gedefinieerd. De basisnaam van het uitvoerbestand is de naam van het type en de extensie is .class .

Bijvoorbeeld −

// File Name: Dell.java
package com.apple.computers;

public class Dell {
}

class Ups {
}

Compileer dit bestand nu als volgt met de optie -d −

$javac -d . Dell.java

De bestanden worden als volgt samengesteld −

.\com\apple\computers\Dell.class
.\com\apple\computers\Ups.class

U kunt alle klassen of interfaces importeren die zijn gedefinieerd in \com\apple\computers\ als volgt −

import com.apple.computers.*;

Net als de .java-bronbestanden, moeten de gecompileerde .class-bestanden zich in een reeks mappen bevinden die de pakketnaam weerspiegelen. Het pad naar de .class-bestanden hoeft echter niet hetzelfde te zijn als het pad naar de .java-bronbestanden. U kunt uw bron- en klassendirectory's afzonderlijk rangschikken, zoals −

<path-one>\sources\com\apple\computers\Dell.java

<path-two>\classes\com\apple\computers\Dell.class

Door dit te doen, is het mogelijk om toegang te geven tot de klassendirectory aan andere programmeurs zonder uw bronnen te onthullen. U moet ook bron- en klassebestanden op deze manier beheren, zodat de compiler en de Java Virtual Machine (JVM) alle typen kunnen vinden die uw programma gebruikt.

Het volledige pad naar de klassendirectory, \classes, wordt het klassenpad genoemd en wordt ingesteld met de systeemvariabele CLASSPATH. Zowel de compiler als de JVM construeren het pad naar uw .class-bestanden door de pakketnaam toe te voegen aan het klassenpad.

Stel dat \classes het klassenpad is, en de pakketnaam is com.apple.computers, dan zoeken de compiler en JVM naar .class-bestanden in \classes\com\apple\computers.

Een klassenpad kan meerdere paden bevatten. Meerdere paden moeten worden gescheiden door een puntkomma (Windows) of dubbele punt (Unix). Standaard doorzoeken de compiler en de JVM de huidige map en het JAR-bestand dat de Java-platformklassen bevat, zodat deze mappen automatisch in het klassenpad staan.

Stel CLASSPATH-systeemvariabele in

Om de huidige CLASSPATH-variabele weer te geven, gebruikt u de volgende opdrachten in Windows en UNIX (Bourne-shell) −

  • In Windows → C:\> CLASSPATH instellen
  • In UNIX → % echo $CLASSPATH

Gebruik −

. om de huidige inhoud van de CLASSPATH-variabele te verwijderen
  • In Windows → C:\> stel CLASSPATH =
  • . in
  • In UNIX → % CLASSPATH uitgeschakeld; CLASSPATH exporteren

De CLASSPATH-variabele instellen −

  • In Windows → stel CLASSPATH =C:\users\jack\java\classes in
  • In UNIX → % CLASSPATH =/home/jack/java/classes; CLASSPATH exporteren

Java

  1. Python-pakket
  2. Java laatste trefwoord
  3. Java-instantie van Operator
  4. Java-erfenis
  5. Java geneste statische klasse
  6. Java anonieme klasse
  7. Java Singleton-klasse
  8. Java-reflectie
  9. Java ObjectOutputStream-klasse
  10. Java-generieken
  11. Java-bestandsklasse