Package and ClassPath (轉)
Package and ClassPath (靜水流深第一版)
這是我的讀書筆記,希望能夠對大家學習有所幫助。
所有程式碼都經過測試,測試環境:
java version "1.4.0-rc"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-rc-b91)
Java HotSpot(TM) Client VM (build 1.4.0-rc-b91, mixed mode)
如大家發現任何錯誤,或有任何意見請不吝賜教。
quietwater
.2.4
寫作初衷
首先是我自己遇到了有關package和classpath的問題,經過網友的幫助和
自己的摸索,終於搞清楚原因。後來發現有些網友有著和我同樣的問題,所以
決定寫篇文章來和大家分享。
正文:
一.private,friendly,protected,public的區別:
private顧名思義就是私有,自己所以自己所用。
包括私有成員變數和私有成員, 只有它們所屬
的類中的成員函式(包括public friendly
protected and private 也就是所有)可以。
public就是共有,大家所以,可以被任何class
呼叫。
friendly友好,可以被同一個包中的class呼叫。
如果沒有明確宣告屬於哪一個包package,那麼就只
可以被同一個目錄中的class呼叫。因為預設同一個
目錄中的class屬於同一個package。
protected保護,它具有friendly的屬性,也就是
說它是friendly的超集,protected還可以被子類訪問。
二. 預設package與friendly:
預設情況下在同一個目錄下的所有class 在同一個
package 中。所以我們在預設情況下可以呼叫在同一個
目錄中的class 。預設情況下它們都是friendly。
如果是j2sdk1.4那麼我們可以不classpath。
但是如果你想import你自己的package ,那麼你就必須
配置classpath 了。
三. 問題出在哪裡?
舉例說明:
d:mypackageA.java
package mypackage;
public class A{
public A(){
System.out.println("Create A");
}
}
d:mypackageB.java
import mypackage.*;
class B{
B(){
System.out.println("Create B");
}
public static void main(String[] args){
A a=new A();
B b=new B();
}
首先set classpath=.;d:
表示到當前目錄和d盤根目錄查詢包,包名與目錄名一致。如mypackage包
位於d:mypackage java透過classpath找到d:然後透過包名找到
d:mypackage目錄,在d:mypackage目錄下找到A.class
D:mypackage>javac A.java 沒問題
D:mypackage>javac B.java
B.java:7: cannot access A
bad class file: .A.class
class file contains wrong class: mypackage.A
Please remove or make sure it appears in the correct subdirectory of the classpa
th.
A a=new A();
^
1 error
將B.java移至d:B.java然後執行
D:>javac B.java
D:>java B
Create A
Create B
一切正常。
總結:因為B class不在mypackage中,也就是說B class 要使用在mypackage 中的class,那麼class B應該位於mypackage包所在目錄之外才能避免衝突。不然預設class B
與它所在目錄的class位於同一個package中。
如想執行包中的類,如下:
D:mypackage>java A
Exception in thread "main" java.lang.NoClassDefFoundError: A (wrong name: mypack
age/A)
at java.lang.Claoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:509)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
at java.URLClassLoader.defineClass(URLClassLoader.java:246)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.Accesntroller.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
寫全名包名+類名如下:
D:mypackage>java mypackage.A
Exception in thread "main" java.lang.NoSuchMethodError: main
改寫A.java如下,新增main()
package mypackage;
public class A{
public A(){
System.out.println("Create A");
}
public static void main(String[] args){
A a=new A();
}
}
D:mypackage>java mypackage.A
Create A
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-996635/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- classpath 詳解(轉)
- java Classpath全解(轉)Java
- Package Specification 和 Package Body 及 Package有什麼區別? (轉)Package
- 自動設定CLASSPATH的方法 (轉)
- 關於java 的 Classpath全解 (轉)Java
- Java_util_package(轉)JavaPackage
- 有關於JAVA中的CLASSPATH的作用 (轉)Java
- spring配置中classpath和classpath*的區別Spring
- package management的基本概念(轉)Package
- CLASSPATH 以及包和目錄結構的關係 (轉)
- Spring - 配置檔案中的classpath: 和 classpath*: 的區別Spring
- Java classpath的獲取Java
- not an rpm package (or package manifest):Package
- not an rpm package (or package manifest)Package
- Java Eclipse ClassPath如何理解JavaEclipse
- java的classpath萬用字元Java字元
- packagePackage
- 轉淘寶流雲dbms_file_transfer package usagePackage
- Java PATH和CLASSPATH配置詳解Java
- 深入探討、理解Java的CLASSPATHJava
- export CLASSPATH=$JAVA_HOME/libExportJava
- 深入安卓Package Manager和Package Installer安卓Package
- 建立packagePackage
- Jive筆記6 --Database Package下面的暗黑世界 (轉)筆記DatabasePackage
- Package ssh is not available, but is referred to by another package 錯誤PackageAI
- Ant詳解之-path、classpath和fileset
- ORA-04042 procedure, function, package, or package body does not existFunctionPackage
- 關於包(Package)應用規範的說明 (轉)Package
- java 包(package)JavaPackage
- alter package/procedurePackage
- web專案讀取classpath下面檔案Web
- Why the “MAVEN2_CLASSPATH_CONTAINER will not be exported or published”MavenAIExport
- flutter package get 卡FlutterPackage
- Go package time 用法GoPackage
- yum error - package is a duplicate withErrorPackage
- package.jsonPackageJSON
- The DBMS_System PackagePackage
- utl_mail packageAIPackage