2013-07-20 20 views
7

Znalazłem informacje, że java. * I javax. * Są nielegalnymi (zarezerwowanymi) nazwami pakietów (w książce "OCA Java SE 7 Programmer I Study Guide"). Kiedy próbuję utworzyć pakiet „Java” i uruchomić z niej klasę, otrzymuję:Czy nazwa pakietu "javax" jest nielegalna (zarezerwowana), czy nie?

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

ale gdy uruchamiam klasy z pakietu „javax” otrzymuję żadnych błędów. Na docs.oracle.com znalazłem tylko informacje:

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

więc ... czy jest to "nielegalna nazwa" javax, czy nie? Może jest to niezgodne z prawem tylko w Java EE lub starszych wersjach Java? (Próbowałem tego na JDK 1.6.0_43 i 1.7.0_25)

+0

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

+1

Dzięki, widziałem już ten wątek. Daje dobre informacje na temat pakietu javax, ale nie mówi, czy jest to prawna nazwa pakietu, czy nie. – SathOkh

Odpowiedz

3

javax. jest używany do rozszerzeń (prawdopodobnie w JRE), więc na pewno jest możliwe zdefiniowanie klas w obrębie tych pakietów. IIRC, można to wyłączyć w niezaufanych kontekstach, dodając javax. do właściwości bezpieczeństwa package.definition (niezaznaczone).

java. jest wyjątkowy, ponieważ ClassLoader zapobiega ładowaniu klasy nie-bootstrap w tych pakietach jako miary anty-Microsoft.

+0

Nie sądzę, że Java jest wyjątkowa ze względu na program ładujący klasy; zawiera oficjalne podstawowe API języka Java. Czy masz jakieś odniesienia do tej odpowiedzi? –

+1

@owlstead 'java/lang/ClassLoader.java'. W szczególności metoda "preDefineClass". –

+0

Po prostu błąd w książce? – SathOkh

Powiązane problemy