java中自己寫的類的包名為什麼不能以java開頭?
這是因為jvm在加載類的時候,連接階段,會做安全校驗,包名startsWith("java.")在運行期會報錯。具體是在ClassLoader.java中的preDefineClass方法:
if ((name != null) && name.startsWith("java.")) {
throw new SecurityException
("Prohibited package name: " +
name.substring(0, name.lastIndexOf('.')));
}
當然,如果你寫一個與java自帶的類一樣的包名以java開頭的類,是不會報錯的,如java.lang.Object,但是,加載的是java自帶的Object,也就是說,你自己寫的Object其實並沒有卵用。
當然,你寫一個包名是javax開頭的類,運行也是不會報錯的。
但是,根據java包名命名規範呢,我們一般是不會取與java自帶的類的包名一樣的包名的。
聰明的你,明白了嗎