1. Pakker
Almindelige Java-programmer involverer et enormt antal klasser. Hvor mange? Tusinder, titusinder. Og hvis du også tager højde for, at programmet bruger forskellige biblioteker, der indeholder klasser skrevet af andre programmører, så kan antallet af klasser sagtens måles i millioner!
Det ville være næsten umuligt at finde på unikke navne til alle disse millioner, eller endda bare tusindvis af klasser.
Selvfølgelig kan vi forestille os navne som A123
og B345
, men hvis vi taler om at vælge et godt klassenavn, et der gør det lettere at forstå klassen (som String
for strenge f.eks.), så er det meget at generere tusinde unikke navne. af arbejde.
Derfor er det i Java sædvanligt at gruppere klasser i pakker ved hjælp af pakkenøgleordet.
Java-klasser og deres pakker minder meget om filer og mapper på en computer.
For eksempel, hvis du skal gemme 10 dokumenter på din computer, ville du sandsynligvis bare opbevare dem i én mappe. Men hvad nu hvis du har tusindvis af dokumenter (f.eks. et lager af alle en virksomheds dokumenter)?
Med tusindvis af dokumenter, der skal gemmes, er en løsning at oprette flere niveauer af mapper med gode beskrivende navne. Og gem så i en mappe på det allersidste niveau de dokumenter, der vedrører den pågældende mappe. Gode beskrivende navne til dokumenterne skader heller ikke.
Faktisk gør vi alt dette til klasser i Java.
Filerne, der indeholder klasserne, er gemt i forskellige mapper (mapper), og det fulde navn på klassens mappe med alle dens undermapper er navnet på pakken. Eksempel:
Sti til filen | Pakkenavn | Klassenavn |
---|---|---|
|
|
|
|
|
|
|
|
|
I modsætning til mappenavne bruger pakkenavne en prik som afgrænsning. Med andre ord svarer mappen \com\codegym\tasks\
til com.codegym.tasks
pakken.
2. src
mappe
I Java er det sædvanligt at gemme alle klasserne for et program i en enkelt mappe (og undermapper). Denne mappe kaldes normalt src
(forkortelse for kilde ).
Denne mappe kaldes projektroden (eller kilderoden ), og alle pakkestier er relative til den. Eksempler:
Mapper | Pakkenavn |
---|---|
|
|
|
|
I denne situation siger programmører noget som "vi har et projekt ved navn my
, som er placeret i c:\projects\data
mappen" eller "vi har et projekt ved navn project
, som er placeret i d:\files\git\data
mappen"
Det er bedst altid at lægge klasser i pakker og ikke direkte i rodmappen ( src
. Hvis du kun har nogle få klasser, giver det ikke noget problem. Men når der er mange klasser, er det meget nemt at blive forvirret. Så , opret altid kun dine klasser i pakker.
I Java er det sædvanligt at give meningsfulde navne til klasser og pakker. Mange virksomheder frigiver deres egne biblioteker (et sæt klasser), og for at undgå forvirring inkorporerer de navnet på virksomheden/hjemmesiden/projektet i navnet på pakken:
Pakkenavn | Firma-/projektnavn |
---|---|
|
Apache projekt |
|
Oracle selskab |
|
Oracle-virksomhed, Java-projekt |
|
IBM-virksomhed, WebSphere-projekt |
|
JBoss projekt |
3. Filindhold
I henhold til Java-sprogstandarden skal information om et klassenavn og navnet på dets pakke inkluderes i filen med koden. Den generelle formular er vist nedenfor:
package package-name;
public class ClassName
{
}
Pakkenavnet skal svare til mappenavnet, og filnavnet skal svare til det offentlige klassenavn.
Hvis du har en fil, skal den indeholde dette:...\src\com\project\Service.java
package com.project;
public class Service
{
}
4. Import af klasser
Klassenavnet og pakkenavnet danner det , der kaldes det fuldt kvalificerede navn på klassen .
Eksempler:
Fuldt kvalificeret navn | Pakkenavn | Klassenavn |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
ingen |
|
Den gode nyhed:
Det fuldt kvalificerede klassenavn er altid unikt i et projekt. Du kan jo ikke oprette to filer med samme navn i en enkelt mappe.
Den dårlige nyhed:
Fuldt kvalificerede klassenavne er normalt enten lange eller meget lange. Og at skrive et langt navn (for eksempel java.util.ArrayList) hver gang i kode er super ubelejligt.
Det er derfor, Java tilføjede muligheden for at importere klasser .
Du kan bruge en klasses korte navn i din kode, men du skal først fortælle compileren, hvilket fuldt kvalificeret klassenavn der svarer til det korte navn . Hvad hvis du nu flere klasser med samme navn i dit projekt? Eller du har oprindeligt en, men så blev der tilføjet 15 mere...
For at bruge et kort klassenavn i din kode, skal du tilføje følgende konstruktion:
import fully-qualified-class-name;
Denne erklæring skal tilføjes helt i begyndelsen af undervisningen, lige efter erklæringen package
.
Eksempel:
package com.codegym.tasks.task01;
import java.util.Scanner;
import com.test.helper.special.ArrayList;
public class Solution
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
ArrayList list = new ArrayList();
}
}
Vi importerede to klasser ( java.util.Scanner
og com.test.helper.special.ArrayList
), så vi kan bruge deres korte navne i vores kode. Og compileren vil vide, hvilke klasser der skal bruges.
Og her er, hvordan den samme kode ville se ud, hvis vi ikke havde brugt import
:
package com.codegym.tasks.task01;
public class Solution
{
public static void main(String[] args)
{
java.util.Scanner console = new java.util.Scanner(System.in);
com.test.helper.special.ArrayList list = new com.test.helper.special.ArrayList();
}
}
Forresten, hvis dit projekt har to klasser med navnet Scanner
, vil du ikke være i stand til at importere dem begge til den samme fil: du skal bruge det lange navn til en af dem.
Lad os sige, at du har en Jen på dit hold. Der er ingen kommunikationsproblemer, da alle ved, hvem hun er. Men hvis der var tre Jens, så skulle der bruges fuldt kvalificerede navne til at skelne dem.
Forresten, hvis du er for doven til at tilføje masser af importudsagn til din klasse, kan du bruge dens dovne version: i stedet for et specifikt klassenavn, sæt en stjerne:
import package-name.*;
Det vil tillade dig at bruge de korte navne på alle klasserne i pakken.
Alle klasser i java.lang
pakken importeres automatisk, så du behøver ikke at skrive en import
erklæring til dem. Du kender helt sikkert allerede en af disse klasser: java.lang.String
. Ja det er rigtigt. Dette er den String
klasse, vi har brugt til at arbejde med strenge.
GO TO FULL VERSION