1. 程式人生 > >1、JAVA初始

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(

java開發工具包),JDK包含JRE,而JRE包含JVM。

(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):定位在伺服器端的應用

      J2EEJ2SE的擴充套件增加了用於伺服器開發的類庫。如: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

1Java Runtime Environment (JRE) 包含Java虛擬機器、庫函式、執行Java應用程式和Applet所必須檔案

2Java 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 最大化當前的EditView (再按則反之)

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迴圈