Java跟Javac,package與import

  今天討論一下2個指令與2個關鍵字。java

此次的沒有IDE環境,直接在txt文本里編程,在cmd裏編譯運行,搞清楚java的文件結構,還有怎麼設置編譯器查找類的路徑。首先是javac,有一個可帶參數javac -d 後面是存放生成class的目錄,默認是配置的環境變量classpath。先寫一個java小程序看圖:編程

  

首先,打開cmd,Test.java所在的目錄是E:\,看看咱們設置的classpath是什麼在cmd裏輸入 set classpath,會顯示看下圖:小程序

用白色線圈起來的,使咱們要關注的,後面2個是java的庫類,這裏classpath=. 這個點的意思就是表示當前目錄,意思是說,當咱們在cmd裏輸入javac Test.java的時候jvm會查找當前所在目錄看有沒有Test.java,咱們試一試,問題來了,什麼是當前目錄,這裏的當前目錄是黃色圈圈裏的路徑,顯然咱們的Test.java 是在E盤呢。那麼先到E盤。而後輸入javac Test.java編譯jvm

沒有錯誤,會生成一個Test.class文件。那麼問題來了這個文件生成的目錄在那裏呢,前面說過javac能夠一指定類生成的目錄用參數-d就能夠了,若是不指定默認的就是當面目錄了,還知道什麼是當前目錄吧。咱們來設定一下生成到另外的地方。spa

這裏D:與D:\結果都同樣。這樣咱們就在指定的位置生成了編譯後的類文件。而後是運行這個類用java指令。看結果:blog

直接輸入java Test能夠運行是由於咱們在e:\生成了一個Test.class。因此jvm在默認的狀況下會先搜索當前目錄看有沒有這個類,咱們在D盤也生成了一個Test.class,那麼在e盤怎麼指定這個路徑呢。若是輸入 java -help會有提示信息,咱們用java -classpath能夠指定這個路徑:cmd

注意白色地方是要空格的。編譯器

另外咱們能夠經過set classpath= 來直接設置classpath,這裏就是所謂的絕對地址。編譯

上面2個指令討論完畢,另外是2個關鍵字import與package,import是導入別人的包,這package是給本身的類封包。那麼一個類加了package以後路徑有什麼變化呢class

看程序:

而後通用按照上面的指令編譯,運行。

編譯是ok的,可是運行錯誤。說是找不到類,明顯是執行路徑出問題了。並且確定和這個package com.tt有關係了。package com.tt是告訴編譯器咱們的類在.\com\tt裏。因此jvm在查找的時候會在當前目錄下繼續查找com\tt,可是顯然e盤裏沒有這個東西。由於咱們輸入javac Test.java所產生的Test.class的地址就是E:\Test.class,而不是E:\com\tt\Test.java,這個問題就是文件實際的物理地址跟代碼通知jvm的地址對不上號了。那麼代碼改不了。只能用javac指令來指定編譯生成的目錄了:

這裏會在指定的目錄下生成編譯文件。

這裏的 -d . 的意思是在當前目錄下生成因此完整地址就是E:\com\tt,講到這裏,我忽然有個疑問,當前目錄是e:若是咱們先編譯一個在d盤的類而且指定編譯生成類的地址呢

看看編譯結果

執行路徑也要改變,下面是在當前路徑下與非當前路徑下執行指令

注意com.oo.Test2 這裏跟package指定的是同樣的。

相關文章
相關標籤/搜索