1. 程式人生 > >Notes 20180507 : Java程序設計之環境搭建與HelloWord

Notes 20180507 : Java程序設計之環境搭建與HelloWord

用戶 html 自己的 notes 添加 版本 devel demo 單選

3 HelloWorld  

  不管從事什麽工作那麽一個工作環境總是必不可少的,那怕你只是要寫篇文章,一張平坦的書桌和流利的書寫筆總是能幫助我們完成工作的,Java開發更是如此。在開始今天的HelloWorld前,我們先來聊一聊Java的基本環境搭建

3.1 Java環境的搭建

  工欲善其事必先利其器。在學習Java語言之前,必須了解並搭建好它所需要的開發環境。要編譯和執行Java程序,JDK(Java Developers Kits)是必備的。下面將具體認識下JDK和JRE,並進行介紹下載安裝JDK和配置環境變量的方法。實際上很多時候我們簡單的將JDK稱為Java的開發環境,這也能看出它的重要性。下面我們聊一下與Java開發環境有關的一些重要概述,開始之前還是要復習和贅述一下跨平臺。

3.1.1 Java的跨平臺

  跨平臺概念是軟件開發中一個重要的概念,即不依賴於操作系統,也不依賴硬件環境。一個操作系統下開發的應用,放到另一個操作系統下依然可以運行。相對而言如果某種計算機語言不用修改代碼即可做到高度跨平臺,那麽此語言就越抽象,硬件控制力就越低(即對於硬件的局限能力就越低),只適合開發高度抽象的模型系統。諸如Java,delphi和易語言,都已做到了跨平臺。它們將可以在多種系統下開發、運行和維護有了這個了解,下面我們講一下Java的跨平臺。

  Java的跨平臺是指:通過Java語言編寫的應用程序在不同的系統平臺上都可以運行。在這裏我們要對平臺進行一下解讀,我們知道OS的出現為所有的開發提供了一系列的開發接口,所有現在的驅動和高級開發語言都是通過OS提供的接口來實現開發的,而無需再考慮CPU的指令集,所以這裏的平臺指的就是OS,Java編寫的程序可以在不同的OS上運行,我們日常工作中往往是在Windows上開發的,但是部署卻是在Linux上,這就是跨平臺的最好解釋。

  原理是:Java編寫的源代碼經過一次編譯後生成符合JVM規範的中間碼,編譯後的字節碼采用一種針對JVM優化過的機器碼形式保存。這個中間碼不管編譯多少次都是一樣的,在需要運行的Java應用程序的平臺上,JVM會將中間碼解釋為能夠被計算機識別的機器碼,所以編譯只進行一次,而解釋卻是在程序每次運行時都需要進行的。如下圖1.6所示。

技術分享圖片

技術分享圖片

圖1.6 Java的跨平臺性的原理

  因為有了JVM,所以同一個Java程序在三個不同的操作系統中都可以執行。這樣就實現了Java程序的跨平臺性。也稱為Java具有良好的可移植性。Java語言是跨平臺的,而JVM不是跨平臺的。

  通過Java的發展歷史,我們知道Java開發的初衷就是為了應對快速發展的硬件,可以做到我們編寫的代碼不會隨著硬件環境的改變而出現不適應的情況

。發展到了今天,特別是互聯網成為日常生活一部分的時候,我們編寫的代碼面對著龐大用戶的同時,也面對著各種各樣的部署環境,此時跨平臺尤為重要,比起為不同平臺開發不同的軟件,開發有限的幾個版本的JVM,看起來更容易開發一些。

3.1.2 JDK

  JDK是 Java 語言的軟件開發工具包,是提供給Java開發人員使用的,是Java開發的最小環境,其中包含了java的開發工具,也包括了JRE(Java的運行環境)。所以安裝了JDK,就不用再單獨安裝JRE了。JDK包含的基本組件包括:

  • javac – 編譯器,將源代碼轉成字節碼
  • jar – 打包工具,將相關的類文件打包成一個文件
  • javadoc – 文檔生成器,從源碼註釋中提取文檔
  • jdb – debugger,查錯工具
  • java – 運行編譯後的java程序(.class後綴的)
  • appletviewer:小程序瀏覽器,一種執行HTML文件上的Java小程序的Java瀏覽器。
  • Javah:產生可以調用Java過程的C過程,或建立能被Java程序調用的C過程的頭文件。Java中是可以調用本地代碼的,此時就用到了這個功能。
  • Javap:Java反匯編器,顯示編譯類文件中的可訪問功能和數據,同時顯示字節代碼含義。
  • Jconsole: Java進行系統調試和監控的工具

為什麽JDK中包含一個JRE呢?

其一,開發完的程序,總需要運行一下看看效果。

其二,也是最重要的,JDK中的開發工具其實都是java語言編寫的應用程序,為了方便使用才打包成exe文件,如果沒有JRE,那麽這些工具是運行不了的。

3.1.3 JRE

  JRE(Java Runtime Environment,Java運行環境),運行JAVA程序所必須的環境的集合,包含JVM標準實現及Java核心類庫。如果想要運行一個開發好的Java程序,計算機中只需要安裝JRE即可。

  簡單而言:使用JDK開發完成的java程序,交給JRE去運行。

3.1.4 JDK下載

  Java的JDK又稱Java SE(以前稱J2SE),是Sun公司的產品,由於Sun公司已經被Oracle公司收購,因此JDK可以在Oracle公司的官方網站http://www.oracle.com/index.html下載。在Java 5 之後,J2SE、J2EE和J2ME正式更名,將名字中的2去掉,分別更改為Java SE、Java EE和Java ME

  下面以JDK 最新版本為例介紹下載安裝JDK的方法,具體步驟如下:

  • 打開IE瀏覽器,輸入網址“http://www.oracle.com/technetwork/java/javase/downloads/index.html”,瀏覽Oracle官網,將光標移動當Downloads菜單項上,將顯示下載列表下拉菜單,單擊Java for Developers 超鏈接,如圖1.7所示。

技術分享圖片

圖1.7 Oracle主頁

  • 將跳轉到JDK的下載頁面,在該頁面中單擊最新版本JDK的超鏈接,即如圖1.8所示的Download按鈕。

技術分享圖片

圖1.8 JDK的下載頁

  • 在進入的新頁面中,需要先選中同意協議中的單選按鈕,這時將顯示如圖1.9所示的頁面,否則單擊要下載的鏈接時不能進行下載。

技術分享圖片

圖1.9 JDK最新版本的下載頁面

下載時要選擇適合自己操作系統平臺的的安裝文件,如Windows系統平臺是無法安裝Linux系統平臺的安裝文件的。如果我們需要一些舊版本的JDK則可以在進入JDK的下載鏈接頁面後選擇舊版本下載,單擊進入歷史頁面,我們以JDK 7 為例如圖1.10所示。

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

圖1.10 歷史版本的JDK下載

3.1.5 Windows系統的JDK環境

3.1.5.1 JDK的安裝

我們以下載的JDK 7為例進行安裝介紹,步驟如下:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

JavaFX是由甲骨文宣布推出的,是一款為企業業務應用提供的先進Java用戶界面(UI)平臺,它能幫助開發人員無縫的實現與本地java功能及Web技術動態能力的混合與匹配。

3.1.6 配置JDK

  在安裝完JDK後需要對環境變量進行配置,具體步驟如下所示。【如果有興趣可以閱讀本人一篇文章:我們為什麽要配置環境變量】

3.1.6.1 path環境變量配置的作用

  • 程序的執行需要使用外部指令javac,但是javac指令僅僅能在JDK安裝目錄下的bin目錄下時候,因此程序只能寫入bin目錄
  • 程序開發過程中,不能將源代碼寫入JDK的安裝目錄,因此需要將源程序保存到任意位置的指定目錄(英文目錄),所以需要使javac指令在任意目錄下可以運行。

3.1.6.2 path環境變量配置方式

  • 通過配置path環境變量,將javac指令所在目錄也就是JDK安裝目錄下的bin目錄配置到path變量下,即可使javac指令在任意目錄下運行
  • win7,win8系統:右鍵點擊桌面計算機→選擇屬性→選擇高級系統設置→選擇高級選項卡→點擊環境變量→下方系統變量中查找path→雙擊path
  • XP系統:右鍵點擊桌面計算機→選擇屬性→選擇高級選項卡→點擊環境變量→下方系統變量中查找path→雙擊path將jdk安裝目錄下的bin目錄添加到最左邊並添加分號

技術分享圖片

  • path環境變量的參照形配置方式

創建新的變量名稱:JAVA_HOME,為JAVA_HOME添加變量值:JDK安裝目錄,將path環境變量中JDK目錄修改,%JAVA_HOME%\bin;,path環境變量具有先後順序

技術分享圖片

我們配置成功後發現javac和java可以到處運行

技術分享圖片

3.1.6.3 classpath環境變量配置方式

  我們配置成功path環境變量後發現java和javac可以到處運行,那麽此時我們已不必將源代碼放入bin目錄下了,但是我們遇到這麽一個問題就是,源文件中引用的工具類找不到此時該怎麽辦呢?其實這是因為Java是一種面向對象的編程語言,提供了很多開發工具類,我們在自己的代碼中引用了這些類(這些類有可能不在一個文件目錄下),那麽是不是該告訴編譯器去哪找這些工具類呢,配置CLASSPATH的目的就在於此,指定尋找.class的路徑。最初配置CLASSPATH,因為jre找不到自帶的類庫。jdk1.5後,就不需要配置了

技術分享圖片

CLASSPATH_8_64=.;D:\Java\JDK\JDK-1.8-64\lib;D:\Java\JDK\JDK-1.8-64\lib\tools.jar

作用:使classpath目錄中的.class文件可以在任意目錄運行

  • 技巧:通常將配置的目錄最前面添加.配置,即當前目錄,使.class文件搜索時首先搜索當前目錄,然後根據目錄配置的順序依次查找,找到後即運行,因此classpath目錄中的配置存在先後順序

小知識:rt.jar是JAVA基礎類庫,dt.jar是關於運行環境的類庫,tools.jar是工具類庫

1.rt.jar 默認就在 根classloader的加載路徑裏面 放在claspath是多此一舉,不信你可以去掉classpath裏面的rt.jar,然後用 java -verbose XXXX 的方式運行一個簡單的類 就知道 JVM的系統根Loader的路徑裏面

不光rt.jar jre\lib下面的大部分jar 都在這個路徑裏

2.tools.jar 是系統用來編譯一個類的時候用到的 也就是javac的時候用到,實際上tools中放置的是Java提供的一些開發工具類

技術分享圖片

javac XXX.java 實際上就是運行java -calsspath=%JAVA_HOME%\lib\tools.jar xx.xxx.Main XXX.java javac就是對上面命令的封裝 所以tools.jar 也不用加到classpath裏面

3.dt.jar是關於運行環境的類庫,主要是swing的包你要用到swing時最好加上

  jdk1.5版本之前必須配置classpath,jvm虛擬機才能找到.class文件,1.5版本以後jvm虛擬機會默認在當前目錄去找.class文件,所以我們現在的1.7版本可以不配置classpath,因為沒有意義,但建議配置,考慮向下兼容的問題。可以參見https://blog.csdn.net/pengpenglin/article/details/1682858加深理解。

3.1.7 總結

  path環境變量裏面記錄的是可執行性文件,如.exe文件,對可執行文件先在當前路徑去找,如果沒找到就去path環境變量中配置的路徑去找

  classpath環境變量裏記錄的是java類文件中引用的外部工具類文件所在的目錄,我們知道Java是一種面向對象的高級編程語言,說白了,就是我們編程時是可以將一些已經寫好的工具類當做對象來使用的,通過對象來幫助我們簡略開發,就如同字符串的截取等,我們不用自己去寫只要調用String的相應方法既可,可我們通過一些非IDE編寫的代碼,是沒有包導入的,此時就用到了ClassPath,它告訴編譯器到哪裏找需要執行的.class文件。在這裏我們要把.java和.class的路徑區別開。

(1).何時需要使用-classpath:當你要編譯或執行的類引用了其它的類,但被引用類的.class文件不在當前目錄下時,就需要通過-classpath來引入類
(2).何時需要指定路徑:當你要編譯的類所在的目錄和你執行javac命令的目錄不是同一個目錄時,就需要指定源文件的路徑(CLASSPATH是用來指定.class路徑的,不是用來指定.java文件的路徑的)

3.2 第一個Java程序“Hello World”

3.2.1 工具介紹

編寫Java程序可以使用很多種工具

  • notepad(微軟操作系統自帶)
  • Notepad++
  • Eclipse
  • MyEclipse

我們在初始學習階段先通過Notepad++來學習,這樣我們可以更直觀的看到程序運行的流程。

3.2.2 HelloWorld

源代碼

技術分享圖片 技術分享圖片
class HelloWorld{
  public static void main(String[] args){

    System.out.print("Hello World;");

    System.out.println("Hello World;");

  }
}
技術分享圖片 技術分享圖片

將源代碼存放在K:\WorkSpace\JavaJC\Chapter 1

技術分享圖片

此時我們打開命令行,定義到JDK的目錄下,

技術分享圖片

此時我們編譯程序會發現

技術分享圖片

原因在於javac.exe它只會編譯bin目錄下的文件,而HelloWorld.java不在當前bin目錄下,我們將需要編譯的文件放在當前bin目錄下,重新編譯發現提示編碼錯誤錯誤,這是我們可以解決錯誤提示:編碼 GBK 的不可映射字符,使用命令:javac -encoding utf-8 helloword.java,編譯成功--這句的意思是使用編碼字符集utf-8來編碼HelloWord.java,然後編譯執行

技術分享圖片

技術分享圖片

運行我們編譯成功的class

技術分享圖片

在這裏我們要註意當我們更改源文件時,我們在運行可執行文件.class時,如果沒有編譯,那麽更改是無效的,簡單舉例:當我們將HelloWorld.java中再加入一句輸入語句System.out.print(“未經編譯的舉例”);此時我們不編譯,直接運行可執行文件,

技術分享圖片

輸出結果是上一次我們編譯後的呈現,我們重新編譯,重新執行,這次變化才會顯示出來,這是因為我們我們寫的源碼和JVM執行的中間碼中間要經過一個編譯。

技術分享圖片

3.2.3程序解析

技術分享圖片 技術分享圖片
class Demo{  /*首先定義一個類  class 類名  這個類名將是未來我們編譯後的字節碼文件名

             在類定義後加上一對大括號{}*/

 /*在大括號中間添加一個主(main)方法/函數  public static void main(String [] args){ } main是給類定義的方法,當類作為包中的主類時,必須要有main方法,main方法是程序的入口,當程序執行時,優先調用它。然後在main方法中再調用別的類和方法,就完成了程序。*/

public static void main(String[] args){

/*在主方法的大括號中間添加兩行輸出語句 System.out.print(“hello world”); System.out.println(“hello world”);Ln的區別在於是一個回車 有Ln代表有一個回車*/

System.out.print("Hello World");

System.out.println("Hello World");

}

}
技術分享圖片 技術分享圖片

當我們不輸入main方法時,我們的編譯仍可進行,但執行可執行文件時匯報錯誤

技術分享圖片

main是程序的入口;就好像我們回家要開門一樣,FQ是會被打的。

3.2.4運行與工作原理

技術分享圖片

3.2.5常見錯誤

  • 文件擴展名隱藏導致編譯失敗
  • class寫錯 Class claas…
  • 類名格式有問題 暫時全部使用英文
  • 類名後面的大括號匹配不正確
  • main方法格式錯誤 public static void main(String [] args){ }
  • main方法大括號缺失
  • 打印語句拼寫錯誤 System.out.println(“”);
  • 引號使用錯誤,使用成中文全角引號

如果編譯後無法生成可執行文件一般可以按以下步驟進行排查,找到問題所在:

1.先檢查jdk環境是否配置成功

  做法:DOS下輸入:java -version,看是否有jdk版本的信息;java,看是否有相關命令;javac,看是否有這個命令;驗證這3個命令,會對jdk環境配置有個直觀的認識,如果沒有正常顯示相關信息,就要去配置jdk環境,具體步驟可參考百度經驗。

2.檢查路徑是否正確

  做法:DOS下輸入:dir,查看當前路徑下是否真的有這個HelloWorld.java文件

3.通過命令 javac -d 你想生成class文件的目錄 HelloWorld.java 來查看是否有class文件

  做法:DOS下輸入:javac -d C:\ HelloWorld.java ,運行後,看是否在C盤下有HelloWorld.class文件

題外深入知識點

Knowledge Point 20180303 :對比編譯器、解釋器與Javac編譯原理

  • 1 編譯器(Compiler )

  • 2 解釋器

  • 3 解釋器和編譯器的對比

  • 4 Javac編譯原理

    • 4.1 Javac是什麽
  • 5 Java你就是比C慢

Knowledge Point 20180303 詳解main函數

  • 一、先說類:

  • 二、再說main()方法

  • 三、main()方法中可以throw Exception

  • 四、main()方法中字符串參數數組作用

  • 五、給出HelloWorld的另外一個版本

  • 六、解讀main

  • 總結:

Notes 20180507 : Java程序設計之環境搭建與HelloWord