2013-07-20 4 views
7

Ho trovato informazioni che java. * E javax. * Sono nomi di pacchetti (riservati) non validi (nel libro "Guida allo studio del programmatore I OCA Java SE 7"). Quando provo creare un pacchetto "java" e corro classe da esso, ricevo:È "javax" il nome del pacchetto illegale (riservato) o no?

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java 

ma quando corro classe da pacchetto "javax" Ricevo errori. Su docs.oracle.com ho trovato solo informazioni:

Packages in the Java language itself begin with java. or javax. 

quindi ... è "javax" nome illegale o no? Forse è illegale solo su Java EE, o versioni precedenti di Java? (Ho provato su JDK 1.6.0_43 e 1.7.0_25)

+0

http://stackoverflow.com/questions/727844/javax-vs-java-package – ZhongYu

+1

Grazie, ho già visto questa discussione. Fornisce buone informazioni sul pacchetto javax, ma non dice che sia il nome legale del pacchetto o meno. – SathOkh

risposta

3

javax. viene utilizzato per le estensioni (possibilmente all'interno del JRE), quindi è sicuro che sia possibile definire classi all'interno di tali pacchetti. IIRC, può essere disabilitato in contesti non fidati aggiungendo javax. alla proprietà di sicurezza package.definition (non selezionata).

java. è speciale perché ClassLoader impedisce il caricamento di classe non bootstrap in questi pacchetti come misura anti-Microsoft.

+0

Non penso che Java sia speciale per il classloader; contiene l'API di base ufficiale di Java. Avete riferimenti per questa risposta? –

+1

@owlstead 'java/lang/ClassLoader.java'. In particolare il metodo 'preDefineClass'. –

+0

Quindi, è solo un errore nel libro? – SathOkh