1.Eclipse下的java工程都有哪些文件夾?
答:new java project時,會默認創建SRC源代碼目錄,並默認創建一個bin目錄作為輸出目錄,輸出目錄是指生成的class文件和配置文件地址。
所以Eclipse創建的java工程,默認就兩個文件夾,src和bin。
2.當點擊Eclipse運行時候java jdk會默認執行編譯,並將編譯后的java文件,生成class文件放到項目目錄下的bin文件夾里,以.class命名結尾。
注:即使某個類有bug錯誤,不能編譯通過。但只要點擊了編譯運行,就會在bin文件夾下生成這個類的class文件。
3.最重要的目錄是bin目錄,而非src目錄。bin目錄是整個項目的輸出目錄,輸出目錄,意味着不論是編譯后的class文件還是項目用到的propertier文件,最終都會輸出到bin目錄下。
項目最后的結果是jar文件,jar文件里面也只有class文件夾,並不會有src文件夾,而是將src下的所有包名轉換為文件夾保存在bin目錄下,而其他Test根目錄下的比如自己創建的config文件夾並不會在jar包的bin目錄下存在,但是會將所有的非src文件夾下的其他文件夾所有東西都保存到bin目錄下。
4.java編譯器(jdk)能進行編譯項目和組織項目的一切前提是:classpath。java.exe虛擬機有個cp參數,eclipse生成的java工程,也會有一個classpath參數,最終eclipse會將自己的classpath參數傳給java.exe的參數cp,用於java虛擬機運行操控。比如,你在項目Test下創建的文件夾config,是不會被讀取到的,因為eclipse默認的classpath只包括src目錄,bin目錄jdk目錄,和依賴的jar包目錄。這也就是為什么我們引進jar包時,一定要add to build path,包括創建文件夾時,也要add to source。這一切都是為了添加進claspath路徑里面。
5.jvm最紅會根據classpath下的路徑,將全部輸出,輸出到bin目錄下。包括引進的jar包等等。
6.所以classpath,是虛擬機編譯項目的基礎,是虛擬機編譯組織項目的基礎。
7.classpath是虛擬機編譯組織項目的基礎。而項目根目錄是創建文件,引進路徑的基礎。
8.buildpath就是classpath,buildpath就是classpath。是jvm編譯組織生成項目的根本。只有添加進buildpath(classpath),才能被jvm讀取到,也就是才能被代碼讀取到。
8.每個項目都有一個默認的根路徑。Eclipse下默認根目錄是Test下,直接就是工程目錄下。而生成的Jar包,默認根目錄是bin下。
9.看一下工程文件夾下的.classpath文件:4部分,src問價,bin文件,jdk路徑,jar包路徑
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="output" path="bin"/>
</classpath>
10.項目代碼里面,又是怎樣獲取項目或者文件或者類的絕對路徑的呢?
答:因為有了classpath的存在,所以我們在讀取配置文件或者涉及文件路徑操作的時候,在代碼里只需要寫相對 相對路徑就可以,相對路徑就是參照classpath的路徑,也就是參照最終的bin文件夾路徑。如果想獲取絕對路徑,可以通過類的加載器,隨時獲取所在類的絕對路徑,class.getclassload().getResource("");即可
11.順便說一下Eclipse是怎么調用本地jdk的及本地jdk的虛擬機的,是依靠你本地配置的JAVA_HOME環境變量,Eclipse會自動讀取這個環境變量地址。進而編譯運行項目的。進而也就是把Eclipse自己的classpath傳遞給jvm的cp參數的