JAVA語言特點
v 簡約且簡單
v 平台無關性
v 物件導向
v 多線程
v 分布性
v 高效能(相對於其他解釋型語言)
v 健壯性
Java虛擬機器相關概念
v 什麼是JVM
JVM是Java虛擬機器(Java Virtual Machine)的縮寫,它是一個虛構出來的電腦,是通過在實際的電腦上模擬類比各種電腦功能類比來實現的。Java虛擬機器有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。
v 為什麼使用JVM?
Java語言最重要的特點就是可以在任何作業系統中運行。使用Java虛擬機器就是為了支援與作業系統無關,在任何系統中都可以運行。
v JVM的基本原理
Java虛擬機器屏蔽了與具體作業系統平台相關的資訊,使得Java語言編譯器只需產生在Java虛擬機器上啟動並執行目標代碼(位元組碼),就可以在多種平台上不加修改地運行。Java虛擬機器在執行位元組碼時,實際上最終還是把位元組碼解釋成具體平台上的機器指令執行。
環境變數說明
v Path
§ Windows作業系統用來尋找可執行檔的路徑。
v Classpath
§ Java虛擬機器(JVM)藉助類裝載器裝入應用程式使用的類,具體裝入哪些類根據當時的需要決定。
§ CLASSPATH環境變數告訴類裝載器到哪裡去尋找三方提供的類和使用者定義的類。另外,你也可以使用JVM命令列參數 –classpath分別為應用程式指定類路徑,在 –classpath 中指定的類路徑覆蓋CLASSPATH環境變數中指定的值。
javac–classpath 路徑 java檔案
java–classpath 路徑 java類
v 注:
§ javac 命令後跟的是來源程式檔案全名(包括副檔名.java);
§ java 命令後跟的是主類名(不包括副檔名.class);
來源程式檔案命名原則
v 一個來源程式檔案中可以包含多個類,但只能有一個類用public修飾;也可以所有的類都不用public修飾.
v 如果來源程式檔案有public修飾的類,則來源程式檔案名稱必須和public修飾的類名相同;否則來源程式名可以是任何合法的標識符.
Java開發常用命令
v Java開發套件括:
§ javac:Java編譯器,用來將java程式編譯成bytecode。
§ java:Java解譯器,執行已經轉換成bytecode的java應用程式。
§ javadoc:文檔產生器,建立HTML檔案.
§ javap:反編譯,將類檔案還原回方法和變數
要點補充:
環境變數的設定的注意點:
A:建環境變數必須是系統變數。
B:%%:表示在一個環境變數中調用另一個環境變數。
%Java_Home%\bin
Path:用於搜尋可執行檔。
classpath:用於搜尋類檔案。
字元集:
char是字元類型,JAVA語言對字元採用unicode字元編碼,
由於電腦只能儲存位元據,必須對字元進行編碼
字元編碼:用一串位元據來表示特定的字元。
ASCII碼:表達現代英語和其他西歐語言,1個位元組,7位,128個字元。
ISO-8859-1(Latin-1):國際化標準組織為西歐語言中的字元制定的編碼,1個位元組8位,與ASCII相容
gb2312(GBK21866):對簡體中文字元的編碼,收錄7445,21866,與ASCII相容。
Unicode字元集:收錄全世界所有語言中的字元,跨平台字元。
UTF-8(傳輸速度比UTF-16在網路比較快。):有的系統不支援Unicode。
UTF-16
在Unicode字元集中,一個字元佔2個位元組(16位)。
一個位元組佔8個bit位,最多可以佔到4個位元組。
在JAVA中,有六個不同的地方可以儲存資料:
1. 寄存器(register)。這是最快的儲存區,因為它位於不同於其他儲存區的地方——處理器內部。但是寄存器的數量極其有限,所以寄存器由編譯器根據需求進行分配。你不能直接控制,也不能在程式中感覺到寄存器存在的任何跡象。
2. 堆棧(stack)。位於通用RAM中,但通過它的“堆棧指標”可以從處理器哪裡獲得支援。堆棧指標若向下移動,則分配新的記憶體;若向上移動,則釋放那些記憶體。這是一種快速有效分配儲存方法,僅次於寄存器。建立程式時候,JAVA編譯器必須知道儲存在堆棧內所有資料的確切大小和生命週期,因為它必鬚生成相應的代碼,以便上下移動堆棧指標。這一約束限制了程式的靈活性,所以雖然某些JAVA資料存放區在堆棧中——特別是對象引用,但是JAVA對象不儲存其中。
3. 堆(heap)。一種通用性的記憶體池(也存在於RAM中),用於存放所以的JAVA對象。堆不同於堆棧的好處是:編譯器不需要知道要從堆裡分配多少儲存地區,也不必知道儲存的資料在堆裡存活多長時間。因此,在堆裡分配儲存有很大的靈活性。當你需要建立一個對象的時候,只需要new寫一行簡單的代碼,當執行這行代碼時,會自動在堆裡進行儲存分配。當然,為這種靈活性必須要付出相應的代碼。用堆進行儲存分配比用堆棧進行儲存儲存需要更多的時間。
4. 靜態儲存(static storage)。這裡的“靜態”是指“在固定的位置”。靜態儲存裡存放程式運行時一直存在的資料。你可用關鍵字static來標識一個對象的特定元素是靜態,但JAVA對象本身從來不會存放在靜態儲存空間裡。
5. 常量儲存(constant storage)。常量值通常直接存放在程式碼內部,這樣做是安全的,因為它們永遠不會被改變。有時,在嵌入式系統中,常量本身會和其他部分分割離開,所以在這種情況下,可以選擇將其放在ROM中
6. 非RAM儲存。如果資料完全存活於程式之外,那麼它可以不受程式的任何控制,在程式沒有運行時也可以存在。
1、靜態儲存區:記憶體在程式編譯時間就分配好了,比如靜態變數;
2、棧區:各種未經處理資料類型的局部變數都是在棧上建立的,當程式退出該變數的作用範圍的時候,這個變數的記憶體會被自動釋放。
3、堆區:對象(包括數組)都是在堆中建立的。程式在啟動並執行時候用new關鍵字來建立對象,對象建立時會在堆中為其分配記憶體。