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

Guide til Java-pakker

1. Introduktion

I denne hurtige vejledning dækker vi det grundlæggende i pakker i Java. Vi vil se, hvordan du opretter pakker og får adgang til de typer, vi placerer i dem.

Vi vil også diskutere navngivningskonventioner og hvordan det relaterer til den underliggende mappestruktur.

Til sidst vil vi kompilere og køre vores pakkede Java-klasser.

2. Oversigt over Java-pakker

I Java bruger vi pakker til at gruppere relaterede klasser, grænseflader og underpakker .

De vigtigste fordele ved at gøre dette er:

  • Gør det nemmere at finde relaterede typer – pakker indeholder normalt typer, der er logisk relaterede
  • Undgå navnekonflikter – en pakke hjælper os til entydigt at identificere en klasse; for eksempel kunne vi have en com.baeldung.Application, samt com.example.Application klasser
  • Styring af adgang – vi kan kontrollere synlighed og adgang til typer ved at kombinere pakker og adgangsmodifikatorer

Lad os derefter se, hvordan vi kan oprette og bruge Java-pakker.

3. Oprettelse af en pakke

For at oprette en pakke skal vi bruge pakken sætning ved at tilføje den som den allerførste kodelinje i en fil .

Lad os placere en type i en pakke ved navn com.baeldung.packages :

package com.baeldung.packages;

Det anbefales stærkt at placere hver ny type i en pakke. Hvis vi definerer typer og ikke placerer dem i en pakke, vil de gå i standard eller unavngiven pakke. Brug af standardpakker har nogle få ulemper:

  • Vi mister fordelene ved at have en pakkestruktur, og vi kan ikke have underpakker
  • Vi kan ikke importere typerne i standardpakken fra andre pakker
  • Den beskyttede  og pakke-privat adgangsomfang ville være meningsløse

Som Java-sprogspecifikationen angiver, leveres unavngivne pakker af Java SE-platformen, primært for nemheds skyld, når der udvikles små eller midlertidige applikationer, eller når udviklingen lige er begyndt.

Derfor bør vi undgå at bruge unavngivne eller standardpakker i applikationer fra den virkelige verden .

3.1. Navnekonventioner

For at undgå pakker med samme navn, følger vi nogle navnekonventioner:

  • vi definerer vores pakke-navne med små bogstaver
  • pakkenavne er periodeafgrænsede
  • navne bestemmes også af den virksomhed eller organisation, der opretter dem

For at bestemme pakkenavnet baseret på en organisation, starter vi typisk med at vende virksomhedens URL. Derefter defineres navnekonventionen af ​​virksomheden og kan omfatte afdelingsnavne og projektnavne.

For eksempel at lave en pakke ud af www.baeldung.com , lad os vende det om:

com.baeldung

Vi kan derefter definere underpakker af dette yderligere, såsom com.baeldung.packages eller com.baeldung.packages.domain.

3.2. Katalogstruktur

Pakker i Java svarer til en mappestruktur.

Hver pakke og underpakke har sin egen mappe. Så for pakken com.baeldung.packages , bør vi have en mappestruktur med com -> baeldung -> pakker .

De fleste IDE'er vil hjælpe med at skabe denne mappestruktur baseret på vores pakkenavne, så vi ikke behøver at oprette disse i hånden.

4. Brug af pakkemedlemmer

Lad os starte med at definere en klasse TodoItem i en underpakke med navnet domæne :

package com.baeldung.packages.domain;

public class TodoItem {
    private Long id;
    private String description;
    
    // standard getters and setters
}

4.1. Importer

For at bruge vores TodoItem klasse fra en klasse i en anden pakke, skal vi importere den. Når det først er importeret, kan vi få adgang til det ved navn.

Vi kan importere en enkelt type fra en pakke eller bruge en stjerne til at importere alle typerne i en pakke.

Lad os importere hele domænet underpakke:

import com.baeldung.packages.domain.*;

Lad os nu kun importere TodoItem klasse:

import com.baeldung.packages.domain.TodoItem;

JDK og andre Java-biblioteker kommer også med deres egne pakker. Vi kan importere allerede eksisterende klasser, som vi ønsker at bruge i vores projekt på samme måde.

Lad os f.eks. importere Java-kernen Liste interface og ArrayList klasse:

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

Vi kan derefter bruge disse typer i vores applikation ved blot at bruge deres navn:

public class TodoList {
    private List<TodoItem> todoItems;

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

Her har vi brugt vores nye klasser sammen med Java-kerneklasser til at oprette en Liste af ToDoItems.

4.2. Fuldt kvalificeret navn

Nogle gange kan vi bruge to klasser med samme navn fra forskellige pakker. For eksempel kan vi bruge både java.sql.Date og java.util.Date . Når vi støder på navnekonflikter, skal vi bruge et fuldt kvalificeret klassenavn til mindst én af klasserne.

Lad os bruge TodoItem med et fuldt kvalificeret navn:

public class TodoList {
    private List<com.baeldung.packages.domain.TodoItem> todoItems;

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

    // standard getters and setters
}

5. Kompilere med javac

Når det er tid til at kompilere vores pakkede klasser, skal vi huske vores mappestruktur. Startende i kildemappen skal vi fortælle javac hvor du finder vores filer.

Vi skal kompilere vores TodoItem klasse først, fordi vores TodoList klasse afhænger af det.

Lad os starte med at åbne en kommandolinje eller terminal og navigere til vores kildemappe.

Lad os nu kompilere vores com.baeldung.packages.domain.TodoItem klasse:

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

Hvis vores klasse kompilerer rent, ser vi ingen fejlmeddelelser og en fil TodoItem.class skal vises i vores com/baeldung/packages/domæne bibliotek.

For typer, der refererer til typer i andre pakker, bør vi bruge -classpath flag for at fortælle javac kommando, hvor de andre kompilerede klasser skal findes.

Nu hvor vores TodoItem klasse er kompileret, kan vi kompilere vores TodoList og TodoApp klasser:

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

Igen bør vi ikke se nogen fejlmeddelelser, og vi bør finde to klassefiler i vores com/baeldung/packages bibliotek.

Lad os køre vores applikation ved at bruge det fuldt kvalificerede navn på vores TodoApp klasse:

>java com.baeldung.packages.TodoApp

Vores output skal se sådan ud:

6. Konklusion

I denne korte artikel lærte vi, hvad en pakke er, og hvorfor vi skal bruge dem.

Vi diskuterede navnekonventioner og hvordan pakker relaterer sig til mappestrukturen. Vi så også, hvordan man opretter og bruger pakker.

Til sidst gennemgik vi, hvordan man kompilerer og kører et program med pakker ved hjælp af javac og java kommandoer.

Den fulde eksempelkode er tilgængelig på GitHub.


Java tag