1、JAVA初始
1. JAVA初始
1. JAVA發展簡史
1、說說計算機語言的發展歷史?
第一代:機器語言 第二代:組合語言
第三代:高階語言 第四代:SQL語言
第一臺電子計算機叫 (ENIAC即"埃尼阿克"),於1946年2月14日在美國賓夕法尼亞大學的莫爾電機學院誕生。
2、說說java語言的發展歷史?
java隸屬於sun公司,後來被oracle公司收購,創始人:James Gosling高司令(17年4月到aws的雲端計算服務部擔任負責人)
(1)、J2EE (JavaEE)
–Java 2 Enterprise Edition: 定位在伺服器端的應用
(2)、J2SE (JavaSE)
–Java 2 Standard Edition :定位在個人計算機上的應用
(3)、J2ME (JavaME)
–Java 2 Micro Edition :定位在消費性電子產品的應用上
3、JDK,JRE,JVM分別指的是什麼,它們的關係如何?
(1)、JDK:java development kit(
(2)、JRE:java runtime environment(java 執行環境)
(3)、JVM: java virual machine(java虛擬機器:跨平臺的核心)
(4)、JDK,JRE,JVM三者關係概括如下:
jdk是JAVA程式開發時用的開發工具包,其內部也有JRE執行環境JRE。JRE是JAVA程式執行時需要的執行環境,就是說如果你光是執行JAVA程式而不是去搞開發的話,只安裝JRE就能執行已經存在的JAVA程式了。JDk、JRE內部都包含JAVA虛擬機器JVM,JAVA虛擬機器內部包含許多應用程式的類的直譯器和類載入器等等。
4、java實現跨平臺的核心原理是什麼?
同一個java檔案,在經過不同的作業系統的jvm的時候,產生不同的作業系統可識別的機器碼檔案,只需要給不同的作業系統配備不同的jvm就可以了,java原始檔不再需要修改
5、java語言的執行分為兩個步驟是什麼?
(1)、編譯,將原始檔編譯成位元組碼檔案
(2)、解釋,將位元組碼檔案解釋成不同作業系統可識別的機器碼檔案
6、java開發執行步驟是什麼?
(1)、建立並編輯Java源程式,用“.java”作為副檔名
(2)、使用命令“javac”編譯“java源程式檔名.java”。最後編譯成Java虛擬機器能夠明白的指令集合,且以位元組碼的形式儲存在檔案中。位元組碼檔案以“.class”作為副檔名。
(3)、執行java程式,使用“java”命令執行class(位元組碼)檔案“java檔名”,Java直譯器會讀取位元組碼,取出指令並且翻譯成計算機能執行的機器碼,完成執行過程。
2. JAVA各版本的含義
(1)、J2EE(Java 2 Enterprise Edition):定位在伺服器端的應用
J2EE是J2SE的擴充套件,增加了用於伺服器開發的類庫。如:javax.servlet。Enterprise JavaBeans 是一種用來代表企業邏輯的軟體元件;JDBC則是讓程式人員能直接在Java內使用的SQL的語法來訪問資料庫內的資料;Servlet能夠延伸伺服器的功能,通過請求-響應的模式來處理客戶端的請求;JSP是一種可以將Java程式程式碼內嵌在網頁內的技術;另外還有包括XML、email及transaction等各種應用於伺服器端的API。
(2)、J2SE(Java 2 Standard Edition):定位在個人計算機上的應用
這個版本是Java平臺的核心,它提供了非常豐富的API來開發一般個人計算機上的應用程式,包括使用者介面AWT及Swing,網路功能與國際化、影象處理能力以及輸入輸出支援等。在網際網路上大放異彩的Applet也屬於這個版本。
(3)、J2ME(Java Micro Edition):定位在消費性電子產品的應用上
J2ME是J2SE的內伸,包含J2SE的一部分核心類,也有自己的擴充套件類,增加了適合微小裝置的類庫:javax.microedition.io.*等。這個版本針對資源有限的電子消費產品的需求精簡核心類庫,並提供了模組化的架構讓不同型別產品能夠隨時增加支援的能力。這個版本的應用層面相當廣泛,會是未來Java平臺發展的重點專案。
JAVA技術體系架構 |
3. JAVA的特性和優勢
(1)、簡單性:
就是c++語法的純淨版。沒有標頭檔案,指標運算,結構,聯合,操作符過載,虛基類等等。由於語法基於c,因此學習起來完全不費力。
面向物件:面向物件是一種程式設計技術,他將重點放在資料(即物件)和物件之間的介面上。
(2)、可移植性:
這是JAVA的一個重要的優勢。JAVA程式碼或者說位元組碼、二進位制碼可以跨平臺的移植,而不用管具體的作業系統和硬體環境。JAVA本身就是面向網路的,只有在網路環境中才能顯示出他的優勢,比如:現在我有一個網路環境,要讓我的筆記本和手機互動,筆記本環境是windows發出一個讓手機定時錄音的JAVA程式碼,手機只有簡單Linux核心作業系統,照樣可以完美的執行這個程式碼。
“一次編寫,隨處執行”:“write once, run anywhere”
JAVA在設計時就很注重移植和跨平臺性。比如:JAVA的Int永遠都是32位。不像c++可能是16,32,可能是根據編譯器廠商規定的變化。這樣的話程式的移植就會非常麻煩。
(3)、高效能:
JIT(JUST IN TIME)即時編譯。將一些“熱點”位元組碼編譯成本地機器碼,並將結果快取起來,在需要的時候重新呼叫。這樣的話,使JAVA程式的執行效率大大提高,某些程式碼甚至接待c++的效率。隨著這種技術的一天天完善,也許有一天會超越編譯程式碼的效率。
(4)、分散式:
JAVA是為internet的分散式環境設計的,因為他能夠處理tcp/ip協議。事實上,通過url訪問一個網路資源和訪問本地檔案是一樣簡單的。Java還支援遠端方法呼叫(RMI,remote method Invocation),使程式能夠通過網路呼叫方法。
(5)、動態性:
就是在需要時將某些程式碼新增到正在執行的程式中。反射機制。當需要把某些程式碼新增到正在執行的程式中時,動態性是一個非常重要的特性。Java的動態特性是其面向物件設計方法的擴充套件。它允許程式動態地裝入執行過程中所需要的類,這是C++語言進行面向物件程式設計所無法實現的多執行緒,多執行緒的使用可以帶來更好的互動響應和實時行為。多執行緒的簡單性是Java成為主流伺服器端開發語言的主要原因之一。
(6)、安全性
Java適合於網路/分散式環境,為了達到這個目標,在安全性方面投入了很大的精力,使Java可以構建防病毒,防篡改的系統。
(7)、健壯性
Java是一種健壯的語言,吸收了C/C++ 語言的優點,但去掉了其影響程式健壯性的部分(如:指標、記憶體的申請與釋放等)。Java程式不可能造成計算機崩潰。Java系統仔細檢測對記憶體的每次訪問,確認它是合法的,而且不致引起任何問題。不過,即使Java程式也可能有錯誤。如果出現某種出乎意料之事,程式也不會崩潰,而是把該例外拋棄。再通過異常處理機制,程式就會發現這類例外,並加以處理。
4. JAVA應用程式的執行機制
1、計算機的高階程式語言型別: 編譯型 ,解釋型
2、Java 語言是兩種型別的結合;
(1)、利用編輯器編寫 Java源程式à原始檔名:主類名.java
(2)、利用編譯器(javac)將源程式編譯成位元組碼à 位元組碼檔名:原始檔名.class
(3)、利用虛擬機器(直譯器,java)解釋執行: 執行過程:載入、程式碼校驗、解釋執行
5. JVM
JVM(JAVA VIRTUAL MACHINE)
JVM是一種規範,可以使用軟體來實現,也可以使用硬體來實現,就是一個虛擬的用於執行bytecodes位元組碼的計算機。他也定義了指令集、暫存器集、結構棧、垃圾收集堆、記憶體區域。
JVM負責將java位元組碼解釋執行,邊解釋邊執行,這樣,速度就會受到一定的影響。JAVA提供了另一種解釋執行的方法JIT(just in time),可以一次解釋完,再執行特定平臺上的機器碼,高階的JIT可以只能分析熱點程式碼,並將這些程式碼轉成本地機器碼,並將結果快取起來,下次直接從記憶體中呼叫,這樣就大大提高了執行JAVA程式碼的效率。這樣就實現了跨平臺、可移植的功能。
(1)、JVM是指在一臺計算機上由軟體或硬體模擬的計算機;它類似一個小巧而高效的CPU。
(2)、byte-code程式碼是與平臺無關的是虛擬機器的機器指令。
(3)、java位元組程式碼執行的兩種方式:
1)方式interpreter(解釋)
2)Just-in-time(即時編譯):有程式碼生成器將位元組程式碼轉換成本機的機器程式碼,然後可以以較高速度執行。不同的作業系統有不同的虛擬機器。Java 虛擬機器機制遮蔽了底層執行平臺的差別,實現了“一次編譯,隨處執行”。
6. Java執行時環境JRE
1、Java Runtime Environment (JRE) 包含:Java虛擬機器、庫函式、執行Java應用程式和Applet所必須檔案
2、Java 2 SDK (Development Kit)包含:JRE的超集,包含編譯器和偵錯程式等用於程式開發的檔案
3、Java執行環境的三項主要功能:
(1)、載入程式碼:由class loader 完成;
(2)、校驗程式碼:由bytecode verifier 完成;
(3)、執行程式碼:由 runtime interpreter完成。
4、JDK 和JRE:
(1)、sdk(也就是jdk)是jre的超集,是在jre的基礎上增加了編譯器及其他一些開發工具。
(2)、jre就是java執行時環境,包括了jvm和其它一些java核心api,任何一臺電腦,只有安裝了jre才可以執行java程式.
5、總結:
(1)、如果只是要執行JAVA程式,之需要JRE就可以。 JRE通常非常小,也包含了JVM.
(2)、如果要開發JAVA程式,就需要安裝JDK。
6、JAVA語言應用範圍
(1)桌面應用程式設計
(2)WEB客戶端程式設計
(3)WEB伺服器程式設計
(4)手機程式設計
(5)機器人程式設計
7. 第一個JAVA程式
1、JAVA開發環境搭建
(1)、下載:Download J2SDK (Java 2 Software Development Kit) from http://java.sun.com
(2)、安裝:run the executable(跟普通軟體安裝一樣,點選下一步就OK!)
(3)、環境變數配置:
環境變數(就是為相關命令提供一個路徑資訊,告訴他到哪裡去找相關檔案資訊): 設定: 新增系統環境變數JAVA_HOME,設定為JDK的安裝路徑: 修改系統環境變數Path,在最前面追加% JAVA_HOME %\bin,並以;和原路徑分隔。再增加:“.;”。這是表示當前目錄的意思。 注意:(%JAVA_HOME%\bin) classpath問題:如果使用jdk1.5以上就不需要配置這個環境變數!JRE會自動搜尋當前路徑下的類檔案及相關jar檔案 |
(4)測試安裝:
執行cmd輸入命令:java –version: 出現如下結果,則通過測試。
2. 在文字編輯器中編寫程式:
一個典型的JAVA程式的編寫和執行過程
(1)編輯階段:(程式設計師編輯程式碼並儲存在磁碟上)
public class Welcome{ public static void main(String[] args){ System.out.println("Hello java!"); } }; |
儲存為:Welcome.java
(2)編譯階段。(編譯器建立class位元組碼檔案)
1. 進入java檔案所在目錄,執行命令:javac Welcome.java 2. 生成class檔案 |
執行:”Java Welcome”後發生的事。就是3-5階段。
(3)載入階段
程式在執行前必須首先放入記憶體中。這個過程是有類裝載器將一個或多個class檔案內容傳輸到記憶體中。”Java Welcome”激活了java直譯器(jvm),然後jvm呼叫類裝載器載入welcome.class中的資訊。
(4)程式碼校驗
JVM呼叫程式碼校驗器檢驗載入的程式碼是否合法並且不會破壞java的安全性約束。
由於JAVA程式碼在網路環境中傳播,為了避免破壞使用者的檔案和系統,必須保證嚴格的安全約束。
(5)執行階段
計算機在CPU的控制下逐位元組的執行這個程式。
3、第一個程式常見錯誤
(1)、出現如下錯誤的原因:‘java’ 不是內部或外部命令,也不是可執行的程式或批處理檔案。設定path
(2)、 編譯javac Test.java,明明看到該檔案,為何找不到?àHelloWorld.java.txt
顯示副檔名! (詳細列表 / 顯示所有檔案 / 標題欄位址列全路徑)
(3)、NoSuchMethodError:main
解決方案:該行程式碼敲錯,確定是否是:public static void main(String[] args)
4、第一個JAVA程式的總結和提升
(1)、Java對大小寫敏感,如果出現了大小寫拼寫錯誤,程式無法執行。
(2) 、關鍵字public被稱作訪問修飾符(access modifier),用於控制程式的其它部分對這段程式碼的訪問級別。
(3) 、關鍵字class 表明Java 程式中的全部內容都包含在類中,Java是一種純面向物件的語言。
(4) 、一個原始檔中至多隻能有一個public的類宣告,其它類的個數不限,如果原始檔中包含一個public 類,原始檔名必須和它中定義的public的類名相同,且以“java”為副檔名。
(5)、一個原始檔可以有多個class
正確編譯後的原始檔,會得到相應的位元組碼檔案,編譯器為每個類生成獨立的位元組碼檔案,且將位元組碼檔案自動命名為類的名字且以“class”為副檔名。
(6)、main方法是Java應用程式的入口方法,它有固定的書寫格式:
(7) 、public static void main(String[] args) {…}
在Java中,用花括號劃分程式的各個部分,任何方法的程式碼都必須以“{”開始,以“}”結束, 由於編譯器忽略空格,所以花括號風格不受限制。
(8)、Java中每個語句必須以分號結束,回車不是語句的結束標誌,所以一個語句可以跨多行。
(9)、程式設計風格:
注意縮排! 成對程式設計!
8. 常用dos命令
常用dos命令
(1)dir directory 檢視當前目錄下的檔案和子資料夾
(2)cd change directory 改變當前資料夾
(3)md make directory建立當前資料夾
(4)rd remove directory刪除當前資料夾
(5)cls clear screen清除螢幕
(6)切換碟符 d: c:
(7)copy 原始檔 目的檔案
(8)del 檔名
(9)Tab鍵 幫助自動完成檔名或者資料夾
(10)上下箭頭鍵 顯示之前或者之後的命令
注意:如果需要其他的命令通過help自行檢視
9. eclipse快捷鍵
eclipse快捷鍵大全
Ctrl+1 快速修復(最經典的快捷鍵)
Ctrl+D 刪除當前行
Ctrl+Alt+↓ 複製當前行到下一行(複製增加)
Ctrl+Alt+↑ 複製當前行到上一行(複製增加)
Alt+↓ 當前行和下面一行互動位置(特別實用,可以省去先剪下,再貼上了)
Alt+↑ 當前行和上面一行互動位置(同上)
Alt+← 前一個編輯的頁面
Alt+→ 下一個編輯的頁面(當然是針對上面那條來說了)
Alt+Enter 顯示當前選擇資源(工程,or 檔案 or檔案)的屬性
Shift+Enter 在當前行的下一行插入空行(這時滑鼠可以在當前行的任一位置,不一定是最後)
Shift+Ctrl+Enter 在當前行插入空行(原理同上條)
Ctrl+Q 定位到最後編輯的地方
Ctrl+L 定位在某行 (對於程式超過100的人就有福音了)
Ctrl+M 最大化當前的Edit或View (再按則反之)
Ctrl+/ 註釋當前行,再按則取消註釋
Ctrl+O 快速顯示 OutLine
Ctrl+T 快速顯示當前類的繼承結構
Ctrl+W 關閉當前Editer
Ctrl+K 參照選中的Word快速定位到下一個
Ctrl+E 快速顯示當前Editer的下拉列表(如果當前頁面沒有顯示的用黑體表示)
Ctrl+/ (小鍵盤) 摺疊當前類中的所有程式碼
Ctrl+× (小鍵盤) 展開當前類中的所有程式碼
Ctrl+Space 程式碼助手完成一些程式碼的插入(但一般和輸入法有衝突,可以修改輸入法的熱鍵,也可以暫用Alt+/來代替)
Ctrl+Shift+E 顯示管理當前開啟的所有的View的管理器(可以選擇關閉,啟用等操作)
Ctrl+J 正向增量查詢(按下Ctrl+J後,你所輸入的每個字母編輯器都提供快速匹配定位到某個單詞,如果沒有,則在stutes line中顯示沒有找到了,查一個單詞時,特別實用,這
個功能Idea兩年前就有了)
Ctrl+Shift+J 反向增量查詢(和上條相同,只不過是從後往前查)
Ctrl+Shift+F4 關閉所有開啟的Editer
Ctrl+Shift+X 把當前選中的文字全部變為大寫
Ctrl+Shift+Y 把當前選中的文字全部變為小寫
Ctrl+Shift+F 格式化當前程式碼
Ctrl+Shift+P 定位到對於的匹配符(譬如{}) (從前面定位後面時,游標要在匹配符裡面,後面到前面,則反之)
下面的快捷鍵是重構裡面常用的,本人就自己喜歡且常用的整理一下(注:一般重構的快捷鍵都是Alt+Shift開頭的了)
Alt+Shift+R 重新命名 (是我自己最愛用的一個了,尤其是變數和類的Rename,比手工方法能節省很多勞動力)
Alt+Shift+M 抽取方法 (這是重構裡面最常用的方法之一了,尤其是對一大堆泥團程式碼有用)
Alt+Shift+C 修改函式結構(比較實用,有N個函式呼叫了這個方法,修改一次搞定)
Alt+Shift+L 抽取本地變數( 可以直接把一些魔法數字和字串抽取成一個變數,尤其是多處呼叫的時候)
Alt+Shift+F 把Class中的local變數變為field 變數 (比較實用的功能)
Alt+Shift+I 合併變數(可能這樣說有點不妥Inline)
Alt+Shift+V 移動函式和變數(
Alt+Shift+Z 重構的後悔藥(Undo)
編輯作用域功能快捷鍵
全域性查詢並替換 Ctrl+F
文字編輯器 查詢上一個 Ctrl+Shift+K
文字編輯器 查詢下一個 Ctrl+K
全域性撤銷 Ctrl+Z
全域性複製 Ctrl+C
全域性恢復上一個選擇 Alt+Shift+↓
全域性剪下 Ctrl+X
全域性快速修正 Ctrl1+1
全域性內容輔助 Alt+/
全域性全部選中 Ctrl+A
全域性刪除 Delete
全域性上下文資訊 Alt+?
Alt+Shift+? Ctrl+Shift+Space
Java編輯器 顯示工具提示描述 F2
Java編輯器 選擇封裝元素 Alt+Shift+↑
Java編輯器 選擇上一個元素 Alt+Shift+←
Java編輯器 選擇下一個元素 Alt+Shift+→
文字編輯器 增量查詢 Ctrl+J
文字編輯器 增量逆向查詢 Ctrl+Shift+J
全域性貼上 Ctrl+V
全域性重做 Ctrl+Y
檢視作用域功能快捷鍵
全域性放大 Ctrl+=
全域性縮小 Ctrl+-
視窗作用域功能快捷鍵
全域性 啟用編輯器 F12
全域性 切換編輯器 Ctrl+Shift+W
全域性上一個編輯器 Ctrl+Shift+F6
全域性上一個檢視 Ctrl+Shift+F7
全域性上一個透檢視 Ctrl+Shift+F8
全域性下一個編輯器 Ctrl+F6
全域性下一個檢視 Ctrl+F7
全域性下一個透檢視 Ctrl+F8
文字編輯器顯示標尺上下文選單 Ctrl+W
全域性顯示檢視選單 Ctrl+F10
全域性顯示系統選單 Alt+-
導航作用域功能快捷鍵
Java編輯器開啟結構 Ctrl+F3
全域性開啟型別 Ctrl+Shift+T
全域性開啟型別層次結構 F4
全域性開啟宣告 F3
全域性開啟外部 javadoc
Shift+F2
全域性開啟資源 Ctrl+Shift+R
全域性後退歷史記錄 Alt+←
全域性前進歷史記錄 Alt+→
全域性上一個 Ctrl+,
全域性下一個 Ctrl+.
Java編輯器顯示大綱 Ctrl+O
全域性在層次結構中開啟型別 Ctrl+Shift+H
全域性轉至匹配的括號 Ctrl+Shift+P
全域性轉至上一個編輯位置 Ctrl+Q
Java編輯器轉至上一個成員 Ctrl+Shift+↑
Java編輯器轉至下一個成員 Ctrl+Shift+↓
文字編輯器轉至行 Ctrl+L
搜尋作用域功能快捷鍵
全域性出現在檔案中 Ctrl+Shift+U
全域性開啟搜尋對話方塊 Ctrl+H
全域性工作區中的宣告 Ctrl+G
全域性工作區中的引用 Ctrl+Shift+G
文字編輯作用域功能快捷鍵
文字編輯器改寫切換 Insert
文字編輯器上滾行 Ctrl+↑
文字編輯器下滾行 Ctrl+↓
檔案作用域功能快捷鍵
全域性儲存 Ctrl+X Ctrl+S
全域性列印 Ctrl+P
全域性關閉 Ctrl+F4
全域性全部儲存 Ctrl+Shift+S
全域性全部關閉 Ctrl+Shift+F4
全域性屬性 Alt+Enter
全域性新建 Ctrl+N
專案作用域功能快捷鍵
全域性全部構建 Ctrl+B
原始碼作用域功能快捷鍵
Java編輯器格式化 Ctrl+Shift+F
Java編輯器取消註釋 Ctrl+/
Java編輯器註釋 Ctrl+/
Java編輯器新增匯入 Ctrl+Shift+M
Java編輯器組織匯入 Ctrl+Shift+O
Java編輯器
執行作用域功能快捷鍵
全域性單步返回 F7
全域性單步跳過 F6
全域性單步跳入 F5
全域性單步跳入選擇 Ctrl+F5
全域性除錯上次啟動 F11
全域性繼續 F8
全域性使用過濾器單步執行 Shift+F5
全域性新增/去除斷點 Ctrl+Shift+B
全域性顯示 Ctrl+D
全域性執行上次啟動 Ctrl+F11
全域性執行至行 Ctrl+R
全域性執行 Ctrl+U
重構作用域功能快捷鍵
全域性撤銷重構 Alt+Shift+Z
全域性抽取方法 Alt+Shift+M
全域性抽取區域性變數 Alt+Shift+L
全域性內聯 Alt+Shift+I
全域性移動 Alt+Shift+V
全域性重新命名 Alt+Shift+R
全域性重做 Alt+Shift+Y
11. 書籍
深入理解java虛擬機器: 周志明
設計模式之禪:
12. 學習網站
國內:oschina.com、CSDN
部落格園51cto
國外:github.com、stackoverflow.com
13. jdk5之後的新特性
JDK1.5新特性:
(1)、自動裝箱與拆箱:
(2)、列舉
(3)、靜態匯入
(4)、可變引數(Varargs)
(5)、內省(Introspector)
(6)、泛型(Generic)
(7)、For-Each迴圈