Anleitung zu Java-Paketen

Anleitung zu Java-Paketen

1. Einführung

In diesem kurzen Tutorial werden die Grundlagen von Paketen in Java behandelt. Wir werden sehen, wie Sie Pakete erstellen und auf die darin enthaltenen Typen zugreifen.

Wir werden auch Namenskonventionen und deren Beziehung zur zugrunde liegenden Verzeichnisstruktur diskutieren.

Schließlich werden wir unsere gepackten Java-Klassen kompilieren und ausführen.

2. Übersicht über Java-Pakete

In Java haben wiruse packages to group related classes, interfaces and sub-packages.

Die Hauptvorteile dabei sind:

  • Erleichterung der Suche nach verwandten Typen - Pakete enthalten normalerweise Typen, die logisch miteinander verknüpft sind

  • Vermeiden von Namenskonflikten - Ein Paket hilft uns, eine Klasse eindeutig zu identifizieren. Zum Beispiel könnten wir sowohlcom.example.Application, als auchcom.example.Application Klassen haben

  • Kontrollieren des Zugriffs - Wir können die Sichtbarkeit und den Zugriff auf Typen steuern, indem wir Pakete undaccess modifiers kombinieren

Als nächstes wollen wir sehen, wie wir Java-Pakete erstellen und verwenden können.

3. Ein Paket erstellen

Um ein Paket zu erstellen,we have to use the package statement by adding it as the very first line of code in a file.

Platzieren wir einen Typ in einem Paket mit dem Namencom.example.packages:

package com.example.packages;

It’s highly recommended to add each new type in a package. Wenn wir Typen definieren und sie nicht in ein Paket einfügen, werden sie in dasdefault oder unbenannte Paket eingefügt. Dadurch verlieren wir die Vorteile der Paketstruktur und können nicht mehr von anderen Paketen aus auf diese Typen zugreifen.

3.1. Regeln der Namensgebung

Um gleichnamige Pakete zu vermeiden, befolgen wir einige Namenskonventionen:

  • Wir definieren unser Paketnames in all lower case

  • Paketnamen sind durch Punkte getrennt

  • Namen werden auch durchthe company or organization that creates them bestimmt

Um den Paketnamen basierend auf einer Organisation zu ermitteln, kehren wir normalerweise die Unternehmens-URL um. Danach wird die Namenskonvention vom Unternehmen festgelegt und kann Abteilungs- und Projektnamen enthalten.

Um beispielsweise auswww.example.com ein Paket zu erstellen, kehren wir es um:

com.example

Wir können dann weitere Unterpakete wiecom.example.packages odercom.example.packages.domain. definieren

3.2. Verzeichnisaufbau

Pakete in Java entsprechen einer Verzeichnisstruktur.

Each package and subpackage has its own directory. Für das Paketcom.example.packages sollten wir also eine Verzeichnisstruktur voncom → example → packages haben.

Die meisten IDEs helfen beim Erstellen dieser Verzeichnisstruktur basierend auf unseren Paketnamen, sodass wir diese nicht manuell erstellen müssen.

4. Verwenden von Paketmitgliedern

Beginnen wir mit der Definition einer KlasseTodoItem in einem Unterpaket mit dem Namendomain:

package com.example.packages.domain;

public class TodoItem {
    private Long id;
    private String description;

    // standard getters and setters
}

4.1. Importe

Um unsereTodoItem-Klasse aus einer Klasse in einem anderen Paket zu verwenden, müssen wir sie importieren. Nach dem Import können wir über den Namen darauf zugreifen.

Wir können einen einzelnen Typ aus einem Paket importieren oder ein Sternchen verwenden, um alle Typen in einem Paket zu importieren.

Importieren wir das gesamtedomain-Unterpaket:

import com.example.packages.domain.*;

Importieren wir jetzt nur dieTodoItem-Klasse:

import com.example.packages.domain.TodoItem;

Das JDK und andere Java-Bibliotheken werden ebenfalls mit eigenen Paketen geliefert. We can import pre-existing classes that we want to use in our project in the same manner.

Importieren wir beispielsweise die Schnittstelle des Java-KernsListund die KlasseArrayList:

import java.util.ArrayList;import java.util.List;

Wir können diese Typen dann in unserer Anwendung verwenden, indem wir einfach ihren Namen verwenden:

public class TodoList {
    private List todoItems;

    public void addTodoItem(TodoItem todoItem) {
        if (todoItems == null) {
            todoItems = new ArrayList();
        }
        todoItems.add(todoItem);
    }
}

Hier haben wir unsere neuen Klassen zusammen mit Java-Kernklassen verwendet, umList vonToDoItems. zu erstellen

4.2. Vollständig qualifizierter Name

Manchmal verwenden wir zwei Klassen mit demselben Namen aus verschiedenen Paketen. Zum Beispiel könnten wir sowohljava.sql.Date als auchjava.util.Date verwenden. When we run into naming conflicts, we need to use a fully qualified class name for at least one of the classes.

Verwenden wirTodoItem mit einem vollständig qualifizierten Namen:

public class TodoList {
    private List todoItems;

    public void addTodoItem(com.example.packages.domain.TodoItem todoItem) {
        if (todoItems == null) {
            todoItems = new ArrayList();
        }todoItems.add(todoItem);
    }

    // standard getters and setters
}

5. Kompilieren mitjavac

Wenn es Zeit ist, unsere gepackten Klassen zu kompilieren, müssen wir uns an unsere Verzeichnisstruktur erinnern. Beginnend im Quellordner müssen wirjavac mitteilen, wo sich unsere Dateien befinden.

Wir müssen zuerst unsereTodoItem-Klasse kompilieren, da unsereTodoList-Klasse davon abhängt.

Öffnen Sie zunächst eine Befehlszeile oder ein Terminal und navigieren Sie zu unserem Quellverzeichnis.

Lassen Sie uns nun unserecom.example.packages.domain.TodoItem-Klasse kompilieren:

> javac com/example/packages/domain/TodoItem.java

Wenn unsere Klasse sauber kompiliert wird, werden keine Fehlermeldungen angezeigt und eine DateiTodoItem.class sollte in unserem Verzeichniscom/example/packages/domain angezeigt werden.

Für Typen, die auf Typen in anderen Paketen verweisen, sollten wir das Flag-classpath verwenden, um dem Befehljavac mitzuteilen, wo sich die anderen kompilierten Klassen befinden.

Nachdem unsere KlasseTodoItemkompiliert wurde, können wir unsere KlassenTodoList undTodoAppkompilieren:

>javac -classpath . com/example/packages/*.java

Auch hier sollten wir keine Fehlermeldungen sehen und zwei Klassendateien in unserem Verzeichniscom/example/packagesfinden.

Führen Sie unsere Anwendung unter Verwendung des vollständig qualifizierten Namens unsererTodoApp-Klasse aus:

>java com.example.packages.TodoApp

Unsere Ausgabe sollte folgendermaßen aussehen:

image

6. Fazit

In diesem kurzen Artikel haben wir erfahren, was ein Paket ist und warum wir es verwenden sollten.

Wir haben Namenskonventionen und die Beziehung von Paketen zur Verzeichnisstruktur erörtert. Wir haben auch gesehen, wie Pakete erstellt und verwendet werden.

Schließlich ging es darum, wie eine Anwendung mit Paketen mit den Befehlenjavac undjava kompiliert und ausgeführt wird.

Der vollständige Beispielcode istover on GitHub verfügbar.