java自舉
⑴ java為什麼不自舉
安全性考慮
⑵ 批處理設置java環境變數的問題
其實手動設置JAVA的環境變數也是很簡單的事情~~沒有必要用批去設置
一般JAVA的環境變數要設置兩個,一個是classpath 另一個是path,在我的電腦裡面的屬性找到環境變數的,新建立一個classpath,在變數值裡面輸入.;C:\j2sdk1.4.2\lib\dt.jar;C:\j2sdk1.4.2\lib\tools.jar;C:\j2sdk1.4.2\jre\lib\rt.jar;C:\j2sdk1.4.2\jre\lib\charsets.jar;C:\j2sdk1.4.2\jre\lib\jaws.jar(注意最前面的那一個點是不要漏了,路徑要設置對,就是你安裝了的JAVA在你的電腦里的路徑,我用的是舊的版本,1.4.2,你可以去找現在最新的版本安裝)
如果你安裝JAVA的變數正確,在DOS窗口下如果java -version可以顯示你安裝的JAVA版本的信息.
path的設置只要你更改裡面的那個變數值就可以了,這個變數早已經存在的了,變數值輸入C:\j2sdk1.4.2/bin
再在DOS窗口下輸入javac會顯示JAVA編譯器的命令參數的用法的.
在DOS窗口下輸入set classpath,如果系統設置正確,就會彈出你當前的classpath的內容~~
⑶ jdk的所有命令,比如javac java javadoc 等的具體使用
JDK 常用命令
JDK 後,JAVAHOME 下會出現許多可執行的 exe 文件,它們的用途如下: 文件,它們的用途如下: javac:Java 編譯器,將
Java 源代碼換成位元組代 : 編譯器, java:Java 解釋器,直接從類文件執行 Java 應用程序代碼 : 解釋器,
appletviewer(小程序瀏覽器 :一種執行 HTML 文件上的 Java 小程序類的 Java 瀏覽器 小程序瀏覽器): 小程序瀏覽器
javadoc:根據 Java 源代碼及其說明語句生成的 HTML 文檔 : jdb:Java 調試器,可以逐行地執行程序、設置斷點和檢查變數 :
調試器,可以逐行地執行程序、 javah:產生可以調用 Java 過程的 C 過程,或建立能被 Java 程序調用的 C 過程的頭文件 :
過程, Javap:Java 反匯編器,顯示編譯類文件中的可訪問功能和數據,同時顯示位元組代碼含義 :
反匯編器,顯示編譯類文件中的可訪問功能和數據, jar:多用途的存檔及壓縮工具,是個 java 應用程序,可將多個文件合並為單個 JAR 歸檔
:多用途的存檔及壓縮工具, 應用程序, 文件。 文件。 htmlConverter——命令轉換工具。 ——命令轉換工具。 ——命令轉換工具
native2ascii——將含有不是 Unicode 或 Latinl 字元的的文件轉換為 Unicode 編碼字元的文 ——將含有不是 ——
件。 serialver——返回 serialverUID。語法:serialver [show] 命令選項 show 是用來顯示一個簡
——返回 —— 。語法: 單的界面。 鍵或"顯示 按鈕, 顯示"按鈕 單的界面。輸入完整的類名按 Enter 鍵或 顯示 按鈕,可顯示
serialverUID。 。 javac.exe 用法: 選項> 源文件> 用法:javac <選項 <源文件 選項
源文件 可能的選項包括: 可能的選項包括: -g 生成所有調試信息 -g:none 生成無調試信息 -g:{lines,vars,source}
生成只有部分調試信息 生成只有部分調試信息 -O 優化;可能妨礙調試或者增大類文件 優化; -nowarn 生成無警告 -verbose
輸出關於編譯器正在做的信息 -deprecation 輸出使用了不鼓勵使用的 API 的源程序位置 -classpath <路徑
指定用戶類文件的位置 路徑> 路徑 -sourcepath <路徑 指定輸入源文件的位置 路徑> 路徑
-bootclasspath <路徑 覆蓋自舉類文件的位置 路徑> 路徑 -extdirs <目錄 多個
覆蓋安裝的擴展類的位置 目錄(多個 目錄 多個)> -d <目錄 指定輸出類文件的位置 目錄> 目錄 -encoding
<編碼 指定源文件中所用的字元集編碼 編碼> 編碼 -target <版本 生成指定虛擬機版本的類文件 版本> 版本
-help Print a synopsis of standard options appletviewer.exe 用法:
用法:appletviewer <options> url
其中, 包括: 其中,<options> 包括: -debug 在 Java 調試器中啟動 applet 小程序查看器
-encoding <encoding> 指定由 HTML 文件使用的字元編碼 -J<runtime flag> 向
Java 解釋器傳遞參數 -J 選
⑷ java中的自舉類,是什麼意思
java編譯器編譯java編譯器。一開始c++編譯第一代的java編譯器。之後每一代的java編譯器 編譯後一代的java 編譯器。1.0編譯2.0;不需要其他c或c++.
⑸ Java線程是否會被垃圾回收
上面的常式運行結果是兩個線程在程序被強制終止之前一直運行。threadisrunning...threadisrunning...threadisrunning...ExecutedSystem.gc(),WeakReferencestillkeepThread[Thread-0,5,main]threadisrunning...threadisrunning...threadisrunning...ExecutedSystem.gc(),WeakReferencestillkeepThread[Thread-0,5,main]threadisrunning...threadisrunning...
運行中的線程是稱之為垃圾回收根對象的一種,不會被垃圾回收。當垃圾回收器判斷一個對象是否可達,總是使用垃圾回收根對象作為參考點。
例如,主線程並沒有被引用,但是不會被垃圾回收。
垃圾回收根對象是可在堆之外被訪問的對象。一個對象可由於下列原因成為GC根對象:SystemClass
由自舉/系統類載入器載入的類。例如,rt.jar中所有諸如java.util.*的類。
JNILocal
原生代碼中的本地變數,例如用戶定義的JNI代碼或JVM內部代碼。
JNIGlobal
原生代碼中的全局變數,例如用戶定義的JNI代碼或JVM內部代碼。
ThreadBlock
當前活躍的線程塊中引用的對象。
Thread
啟動且未停止的線程。
BusyMonitor
其wait()或notify()方法被調用,或被同步synchronized的對象。例如,通過調用synchronized(Object)或者進入其某個synchronized方法。靜態方法對應類,非靜態方法對應對象。
JavaLocal
本地變數。例如,仍在線程的棧中的方法輸入參數或本地創建的對象。
NativeStack
(例如用戶定義的JNI代碼或JVM內部代碼這樣的)原生代碼的入或出參數。通常發生在許多方法有原生部分,方法參數處理的對象成為GC根對象。例如,參數用於文件、網路I/O或反射。
Finalizer
在隊列中等待其finalizer運行的對象。
Unfinalized
擁有finalize方法,但是還沒有被終結且不在finalizer隊列的對象。
Unreachable
從其他根對象不可達的對象,但是被內存分析器標記為根對象。
Unknown
沒有根類型的對象。一些轉儲(mp),例如IBM可移植對轉儲文件,沒有根信息。對於這些轉儲,內存分析器解析程序將沒有被其他根對象引用的對象標記為此類根對象。參考
⑹ JAVA基礎:Java 啟動器如何查找類
java 啟動器 java 將初始化 Java 虛擬機。虛擬機隨即按以下順序搜索和載入類: 自舉類 - 構成 Java 平台的類,包括 rt.jar 和 i18n.jar 中的類。 擴展類 - 使用 Java 擴展機制的類。它們被捆綁為 .jar 文件,位於擴展目錄中。 用戶類 - 開發人員和第三方定義的類,不使用擴展機制。在命令行上使用 -classpath 選項(常用方法)或使用 CLASSPATH 環境變數可識別這些類的位置(參見設置 Windows 或 Solaris 的 Classpath)。 實際上,這三個搜索路徑將被連為一個簡單的類路徑。這有點象以前使用的「單級」類路徑,但現在的模型有一些重要差別: 偶然「隱藏」或省略自舉類相對困難一些。 通常只需指定用戶類的位置。系統將「自動」查找自舉類和擴展類。 工具類現在位於獨立的歸檔中 (tools.jar)。只有當它包含在用戶類路徑中時才可用(稍後會有解釋)。 Java 啟動器如何查找自舉類 自舉類是實現 Java 1.2 平台的類。自舉類在 /jdk1.2/jre/lib 中的 rt.jar 和 i18n.jar 歸檔中。這些歸檔由存儲在 sun.boot.class.path 系統屬性中的自舉類路徑值指定。該系統屬性僅供引用,不應直接修改。 需要重新定義自舉類路徑的可能性較小。極少數情況下需要使用另一組核心類時,非標准選項 -Xbootclasspath 答應重新定義自舉類路徑。 注重:實現 JDK 開發工具的類與自舉類在不同歸檔中。工具歸檔為 /jdk1.2/lib/tools.jar.調用啟動器時,開發工具將該歸檔添加到用戶類路徑中。然而,這個擴大的用戶類路徑僅用於執行工具。處理源代碼的工具 javac 和 javadoc 將使用初始類路徑,而不是擴大後的類路徑(有關具體信息,參見下面的 Javac 和 Javadoc 如何查找類)。 Java 啟動器如何查找擴展類 擴展類是擴展 Java 平台的類。擴展目錄中的每個 .jar 文件即被認為是擴展,且都使用 Java 擴展框架載入。我們不提供改變擴展目錄位置的選項。 Java 啟動器如何查找用戶類 用戶類是在 Java 平台上構建的類。查找用戶類時,啟動器需要使用用戶類路徑,它是一張目錄、JAR 歸檔和包含類文件的 Zip 歸檔的列表。 類文件有一個反映類全限定名的子路徑名。例如,假如類 com.mypackage.MyClass 存儲在 /myclasses 下,則 /myclasses 一定位於用戶類路徑中,且類文件的完全路徑一定為 /myclasses/com/mypackage/MyClass.class.假如類存儲在名為 myclasses.jar 的歸檔中,則 myclasses.jar 一定位於用戶類路徑中,且類文件一定作為 com/mypackage/MyClass.class 存儲在歸檔中。 在Solaris 中,我們用字元串指定用戶類路徑,而用冒號 (:) 分隔類路徑項。java 啟動器將用戶類路徑字元串放置在 java.class.path 系統屬性中。該值可能的源為: 預設值「。」意味著用戶類文件是當前目錄中的所有類文件(假如是在包中,則為當前目錄下的)。 CLASSPATH 環境變數的值,它覆蓋預設值。 命令行選項 -cp 或 -classpath 的值,它覆蓋預設值和 CLASSPATH 值。 -jar 選項指定的 JAR 歸檔,它覆蓋所有其它值。假如使用該選項,則所有用戶類都來自指定的歸檔。
⑺ Java啟動器如何查找類
java 啟動器 java 將初始化 Java 虛擬機。虛擬機隨即按以下順序搜索和載入類: 自舉類 - 構成 Java 平台的類,包括 rt.jar 和 i18n.jar 中的類。 擴展類 - 使用 Java 擴展機制的類。它們被捆綁為 .jar 文件,位於擴展目錄中。 用戶類 - 開發人員和第三方定義的類,不使用擴展機制。在命令行上使用 -classpath 選項(常用方法)或使用 CLASSPATH 環境變數可識別這些類的位置(參見設置 Windows 或 Solaris 的 Classpath)。 實際上,這三個搜索路徑將被連為一個簡單的類路徑。這有點象以前使用的「單級」類路徑,但現在的模型有一些重要差別: 偶然「隱藏」或省略自舉類相對困難一些。 通常只需指定用戶類的位置。系統將「自動」查找自舉類和擴展類。 工具類現在位於獨立的歸檔中 (tools.jar)。只有當它包含在用戶類路徑中時才可用(稍後會有解釋)
⑻ cmd中使用javac對整個包編譯怎麼辦對包裡面的某幾個java文件編譯怎麼辦
JAVAC 命令詳解
結構
javac [ options ] [ sourcefiles ] [ @files ]
參數可按任意次序排列。
options
命令行選項。
sourcefiles
一個或多個要編譯的源文件(例如 MyClass.java)。
@files
一個或多個對源文件進行列表的文件。
說明
javac
有兩種方法可將源代碼文件名傳遞給 javac:
?如果源文件數量少,在命令行上列出文件名即可。
?如果源文件數量多,則將源文件名列在一個文件中,名稱間用空格或回車行來進行分隔。然後在 javac 命令行中使用該列表文件名,文件名前冠以 @ 字元。
源代碼文件名稱必須含有 .java 後綴,類文件名稱必須含有 .class 後綴,源文件和類文件都必須有識別該類的根名。例如,名為 MyClass 的類將寫在名為 MyClass.java的源文件中,並被編譯為位元組碼類文件 MyClass.class。
內部類定義產生附加的類文件。這些類文件的名稱將內部類和外部類的名稱結合在一起,例如 MyClass$MyInnerClass.class。
應當將源文件安排在反映其包樹結構的目錄樹中。例如,如果將所有的源文件放在 /workspace 中,那麼 com.mysoft.mypack.MyClass 的代碼應該在 \workspace\com\mysoft\mypack\MyClass.java 中。
預設情況下,編譯器將每個類文件與其源文件放在同一目錄中。可用 -d 選項(請參閱後面的選項)指定其它目標目錄。
工具讀取用 Java 編程語言編寫的類和介面定義,並將它們編譯成位元組碼類文件。
查找類型
當編譯源文件時,編譯器常常需要它還沒有識別出的類型的有關信息。對於源文件中使用、擴展或實現的每個類或介面,編譯器都需要其類型信息。這包括在源文件中沒有明確提及、但通過繼承提供信息的類和介面。
例如,當擴展 java.applet.Applet 時還要用到 Applet 的祖先類:java.awt.Panel 、 java.awt.Container、 java.awt.Component 和 java.awt.Object。
當編譯器需要類型信息時,它將查找定義類型的源文件或類文件。編譯器先在自舉類及擴展類中查找,然後在用戶類路徑中查找。用戶類路徑通過兩種途徑來定義:通過設置 CLASSPATH 環境變數或使用 -classpath 命令行選項。(有關詳細資料,請參閱設置類路徑)。如果使用 -sourcepath 選項,則編譯器在 sourcepath 指定的路徑中查找源文件;否則,編譯器將在用戶類路徑中查找類文件和源文件。可用-bootclasspath 和 -extdirs 選項來指定不同的自舉類或擴展類;參閱下面的聯編選項。
成功的類型搜索可能生成類文件、源文件或兩者兼有。以下是 javac 對各種情形所進行的處理:
?搜索結果只生成類文件而沒有源文件: javac 使用類文件。
?搜索結果只生成源文件而沒有類文件: javac 編譯源文件並使用由此生成的類文件。
?搜索結果既生成源文件又生成類文件: 確定類文件是否過時。若類文件已過時,則 javac 重新編譯源文件並使用更新後的類文件。否則, javac 直接使用類文件。
預設情況下,只要類文件比源文件舊, javac 就認為它已過時。( -Xdepend 選項指定相對來說較慢但卻比較可靠的過程。)
javac
注意: javac 可以隱式編譯一些沒有在命令行中提及的源文件。用 -verbose 選項可跟蹤自動編譯。
文件列表
為縮短或簡化 javac 命令,可以指定一個或多個每行含有一個文件名的文件。在命令行中,採用 '@' 字元加上文件名的方法將它指定為文件列表。當 javac 遇到以 `@' 字元開頭的參數時,它對那個文件中所含文件名的操作跟對命令行中文件名的操作是一樣的。這使得 Windows 命令行長度不再受限制。
例如,可以在名為 sourcefiles 的文件中列出所有源文件的名稱。該文件可能形如:
MyClass1.java
MyClass2.java
MyClass3.java
然後可用下列命令運行編譯器:
C:> javac @sourcefiles
選項
編譯器有一批標准選項,目前的開發環境支持這些標准選項,將來的版本也將支持它。還有一批附加的非標准選項是目前的虛擬機實現所特有的,將來可能要有變化。非標准選項以 -X 打頭。
標准選項
-classpath 類路徑
設置用戶類路徑,它將覆蓋 CLASSPATH 環境變數中的用戶類路徑。若既未指定 CLASSPATH 又未指定 -classpath,則用戶類路徑由當前目錄構成。有關詳細信息,請參閱設置類路徑。
若未指定 -sourcepath 選項,則將在用戶類路徑中查找類文件和源文件。
-d 目錄
設置類文件的目標目錄。如果某個類是一個包的組成部分,則 javac 將把該類文件放入反映包名的子目錄中,必要時創建目錄。例如,如果指定 -d c:\myclasses 並且該類名叫 com.mypackage.MyClass,那麼類文件就叫作 c:\myclasses\com\mypackage\MyClass.class。
若未指定 -d 選項,則 javac 將把類文件放到與源文件相同的目錄中。
注意: -d 選項指定的目錄不會被自動添加到用戶類路徑中。
-deprecation
顯示每種不鼓勵使用的成員或類的使用或覆蓋的說明。沒有給出 -deprecation 選項的話, javac 將顯示這類源文件的名稱:這些源文件使用或覆蓋不鼓勵使用的成員或類。
-encoding
設置源文件編碼名稱,例如 EUCJIS/SJIS。若未指定 -encoding 選項,則使用平台預設的轉換器。
-g
生成所有的調試信息,包括局部變數。預設情況下,只生成行號和源文件信息。
-g:none
不生成任何調試信息。
-g:{關鍵字列表}
只生成某些類型的調試信息,這些類型由逗號分隔的關鍵字列表所指定。有效的關鍵字有:
source
源文件調試信息
lines
行號調試信息
vars
局部變數調試信息
-nowarn
禁用警告信息。
-O
優化代碼以縮短執行時間。使用 -O 選項可能使編譯速度下降、生成更大的類文件並使程序難以調試。
在 JDK 1.2 以前的版本中,javac 的 -g 選項和 -O 選項不能一起使用。在 JDK 1.2 中,可以將 -g 和 -O 選項結合起來,但可能會得到意想不到的結果,如丟失變數或重新定位代碼或丟失代碼。-O 選項不再自動打開 -depend 或關閉 -g 選項。同樣, -O 選項也不再允許進行跨類內嵌。
-sourcepath 源路徑
指定用以查找類或介面定義的源代碼路徑。與用戶類路徑一樣,源路徑項用分號 (;) 進行分隔,它們可以是目錄、JAR 歸檔文件或 ZIP 歸檔文件。如果使用包,那麼目錄或歸檔文件中的本地路徑名必須反映包名。
注意:通過類路徑查找的類,如果找到了其源文件,則可能會自動被重新編譯。
-verbose
冗長輸出。它包括了每個所載入的類和每個所編譯的源文件的有關信息。
聯編選項
預設情況下,類是根據與 javac 一起發行的 JDK 自舉類和擴展類來編譯。但 javac 也支持聯編,在聯編中,類是根據其它 Java平台實現的自舉類和擴展類來進行編譯的。聯編時, -bootclasspath 和 -extdirs 的使用很重要;請參閱下面的聯編程序示例。
-target 版本
生成將在指定版本的虛擬機上運行的類文件。預設情況下生成與 1.1 和 1.2 版本的虛擬機都兼容的類文件。JDK 1.2 中的 javac 所支持的版本有:
1.1
保證所產生的類文件與 1.1 和 1.2 版的虛擬機兼容。這是預設狀態。
1.2
生成的類文件可在 1.2 版的虛擬機上運行,但不能在 1.1 版的虛擬機上運行。
-bootclasspath 自舉類路徑
根據指定的自舉類集進行聯編。和用戶類路徑一樣,自舉類路徑項用分號 (;) 進行分隔,它們可以是目錄、JAR 歸檔文件或 ZIP 歸檔文件。
-extdirs 目錄
根據指定的擴展目錄進行聯編。目錄是以分號分隔的目錄列表。在指定目錄的每個 JAR 歸檔文件中查找類文件。
非標准選項
-X
顯示非標准選項的有關信息並退出。
-Xdepend
遞歸地搜索所有可獲得的類,以尋找要重編譯的最新源文件。該選項將更可靠地查找需要編譯的類,但會使編譯進程的速度大為減慢。
-Xstdout
將編譯器信息送到System.out 中。預設情況下,編譯器信息送到 System.err 中。
-Xverbosepath
說明如何搜索路徑和標准擴展以查找源文件和類文件。
-J選項
將選項傳給 javac 調用的 java 啟動器。例如, -J-Xms48m 將啟動內存設為 48 兆位元組。雖然它不以 -X 開頭,但它並不是 javac 的『標准選項』。用 -J 將選項傳給執行用 Java 編寫的應用程序的虛擬機是一種公共約定。
注意: CLASSPATH 、 -classpath 、 -bootclasspath 和 -extdirs 並 不 指定用於運行 javac 的類。如此濫用編譯器的實現通常沒有任何意義而且總是很危險的。如果確實需要這樣做,可用 -J 選項將選項傳給基本的 java 啟動器。
程序示例
編譯簡單程序
一個源文件 Hello.java ,它定義了一個名叫 greetings.Hello 的類。greetings 目錄是源文件和類文件兩者的包目錄,且它不是當前目錄。這讓我們可以使用預設的用戶類路徑。它也使我們沒必要用 -d 選項指定單獨的目標目錄。
C:> dir
greetings/
C:> dir greetings
Hello.java
C:> cat greetings\Hello.java
package greetings;
public class Hello {
public static void main(String[] args) {
for (int i=0; i < args.length; i++) {
System.out.println("Hello " + args[i]);
}
}
}
C:> javac greetings\Hello.java
C:> dir greetings
Hello.class Hello.java
C:> java greetings.Hello World Universe Everyone
Hello World
Hello Universe
Hello Everyone
編譯多個源文件
該示例編譯 greetings 包中的所有源文件。
C:> dir
greetings\
C:> dir greetings
Aloha.java GutenTag.java Hello.java Hi.java
C:> javac greetings\*.java
C:> dir greetings
Aloha.class GutenTag.class Hello.class Hi.class
Aloha.java GutenTag.java Hello.java Hi.java
指定用戶類路徑
對前面示例中的某個源文件進行更改後,重新編譯它:
C:> cd
\examples
C:> javac greetings\Hi.java
由於 greetings.Hi 引用了 greetings 包中其它的類,編譯器需要找到這些其它的類。上面的示例能運行是因為預設的用戶類路徑剛好是含有包目錄的目錄。但是,假設我們想重新編譯該文件並且不關心我們在哪個目錄中的話, 我們需要將 \examples 添加到用戶類路徑中。可以通過設置 CLASSPATH 達到此目的,但這里我們將使用 -classpath 選項來完成。
C:>javac -classpath \examples \examples\greetings\Hi.java
如果再次將 greetings.Hi 改為使用標題實用程序,該實用程序也需要通過用戶類路徑來進行訪問:
C:>javac -classpath \examples:\lib\Banners.jar \
\examples\greetings\Hi.java
要執行 greetings 中的類,需要訪問 greetings 和它所使用的類。
C:>java -classpath \examples:\lib\Banners.jar greetings.Hi
將源文件和類文件分開
將源文件和類文件置於不同的目錄下經常是很有意義的,特別是在大型的項目中。我們用 -d 選項來指明單獨的類文件目標位置。由於源文件不在用戶類路徑中,所以用 -sourcepath 選項來協助編譯器查找它們。
C:> dir
classes\ lib\ src\
C:> dir src
farewells\
C:> dir src\farewells
Base.java GoodBye.java
C:> dir lib
Banners.jar
C:> dir classes
C:> javac -sourcepath src -classpath classes:lib\Banners.jar \
src\farewells\GoodBye.java -d classes
C:> dir classes
farewells\
C:> dir classes\farewells
Base.class GoodBye.class
注意:編譯器也編譯了 src\farewells\Base.java,雖然我們沒有在命令行中指定它。要跟蹤自動編譯,可使用 -verbose 選項。
聯編程序示例
這里我們用 JDK 1.2 的 javac 來編譯將在 1.1 版的虛擬機上運行的代碼。
C:> javac -target 1.1 -bootclasspath jdk1.1.7\lib\classes.zip \
-extdirs "" OldCode.java
-target 1.1
JDK 1.2 javac 在預設狀態下也將根據 1.2 版的自舉類來進行編譯,因此我們需要告訴 javac 讓它根據 JDK 1.1 自舉類來進行編譯。可用 -bootclasspath 和 -extdirs 選項來達到此目的。不這樣做的話,可能會使編譯器根據 1.2 版的 API 來進行編譯。由於 1.1 版的虛擬機上可能沒有該 1.2 版的 API,因此運行時將出錯。
選項可確保生成的類文件與 1.1 版的虛擬機兼容。在 JDK1.2 中, 預設情況下 javac 編譯生成的文件是與 1.1 版的虛擬機兼容的,因此並非嚴格地需要該選項。然而,由於別的編譯器可能採用其它的預設設置,所以提供這一選項將不失為是個好習慣。