Relazione tra i nomi dei pacchetti e la struttura dei file

0

Attualmente sto aggiornando la mia conoscenza di Java e ho trovato una domanda a cui non potevo ancora rispondere:

Come fa il compilatore Java a sapere dove si trovano i pacchetti (possibilmente personalizzati) sul disco? Immagino che usando le librerie integrate cerchi la cartella della libreria java - ma come trova quelle personalizzate?

Ecco le posizioni del file per il seguente esempio:

// parte del pacchetto
com / usuallyNot / example.java

// non fa parte del pacchetto
com / example2.java

La convenzione di denominazione è vista come percorso relativo? Se è così, perché dobbiamo scrivere "import package com.usuallyNot.example;" (invece di "import package" solitamenteNon.example; ") anche se il file in cui lo scriviamo risiede nella cartella" com "?

    
posta UsuallyNot 26.10.2015 - 16:09
fonte

2 risposte

3

La risposta è classpath :

Classpath is a parameter—set either on the command-line, or through an environment variable—that tells the Java Virtual Machine or the Java compiler where to look for user-defined classes and packages.

Ci sono istruzioni da Oracle come impostare il classpath .

Il classpath viene cercato nell'ordine delle cartelle che appaiono per una classe che corrisponde all'importazione. Ci sono molti dettagli su come possono coesistere più classi con lo stesso nome.

Il classpath è impostato da %CLASSPATH% (shell DOS di Windows, $env:CLASSPATH in PowerShell ) o $CLASSPATH in Unix o nel manifest di un file Jar .

Puoi vedere futuro di classpath dal keynot JavaOne 2015 (a partire da @ 17 minuti).

    
risposta data 26.10.2015 - 16:17
fonte
0

Se non hai importato i tuoi tipi, il compilatore dovrebbe eseguire costose scansioni del disco rigido ogni volta che incontra un tipo personalizzato. Questo è molto costoso; è meglio forzare il programmatore a dichiarare esplicitamente la posizione, quindi il compilatore deve solo aprire un file direttamente. (Un ulteriore vantaggio è che puoi avere diversi tipi con lo stesso nome non qualificato, ma una compilazione efficiente è quella grande.)

    
risposta data 26.10.2015 - 16:15
fonte

Leggi altre domande sui tag