day02_java開發環境搭建丶第一個Java程式

2020-08-11 20:18:16

DOS操作系統

Java語言的初學者,學習一些DOS命令,會非常有幫助。DOS是一個早期的操作系統,現在已經被Windows系統取代,對於我們開發人員,目前需要在DOS中完成一些事情,因此就需要掌握一些必要的命令。

  • 進入DOS操作視窗:按下Windows+R鍵盤,開啓執行視窗,輸入cmd回車,進入到DOS的操作視窗。

                                             

  • 開啓DOS命令列後,看到一個路徑 c:\user 就表示我們現在操作的磁碟是C槽。

                               

接下來我們來看幾個常見的 dos 命令吧:

  • dir 命令:檢視當前目錄下所有的子檔案或子目錄。 
  • cd 命令:切換路徑使用方法是:cd+目錄路徑,需要注意的是路徑包括相對路徑和絕對路徑,對於 windows 來說從硬碟的根路徑下開始的路徑都是絕對路徑,例如:C:\Program Files、 C:\Program Files\Java 等,所有的相對路徑都是從當前所在目錄作爲起點開始查詢的路徑。另 外 cd ..切換到上級目錄,cd \切換到根目錄。
  • 切換碟符:直接輸入 c:,或者 d:,然後回車即可。切換碟符不需要 cd 命令。
  • del 命令:刪除檔案或目錄,例如:del *.class,刪除當前目錄下所有的.class 檔案。
  • ipconfig 命令:檢視 IP 地址等資訊,檢視更詳細的資訊使用 ipconfig /all。
  • ping 命令檢視兩臺計算機是否可以正常通訊,例如:ping 192.168.1.100,正常情況下發送數據包和接收數據包數量相同並且沒有延遲的時候表示通訊正常,ping 192.168.1.100 -t 表示一直髮送數據包和接收數據包,ping www.baidu.com 可以檢視電腦是否可以正常上網。
  • mkdir 命令:建立目錄,例如:mkdir abc 表示在「當前目錄」下新建 abc 目錄。
  • cls 命令:清屏。
  • exit 命令:退出 DOS 命令視窗

在DOS命令視窗中怎麼複製內容?

  • win7:任意位置點選右鍵-->標記-->選中要複製的內容-->點選右鍵-->此時就到剪貼簿裏面了
  • win10:左鍵直接選中,然後右鍵單擊一下就到剪貼簿裏面了。

常用文字編輯快捷鍵

使用快捷鍵可以大大提高開發效率,從現在起我們應該儘可能使用快捷鍵來代替滑鼠,接 下來,我給大家列舉一下通用的文字編輯快捷鍵。當然,如果大家想熟練掌握,還是需要後期不斷的使用,請看下面 下麪列表:

                                    

計算機程式語言介紹

什麼是計算機語言

  • 語言:是人與人之間用於溝通的一種方式。例如:中國人與中國人用普通話溝通。而 中國人要和英國人交流,就要學習英語。 計算機語言:人與計算機交流的方式。如果人要與計算機交流,那麼就要學習計算機語言。 計算機語言有很多種。如:C ,C++ ,Java ,PHP , Kotlin,Python,Scala等。

計算機語言的種類

  • 第一代語言:機器語言。指令以二進制程式碼形式存在。
  • 第二代語言:彙編語言。使用助記符表示一條機器指令。
  • 第三代語言:高階語言 C、Pascal、Fortran程序導向的語言 丶C++程序導向/物件導向 丶Java跨平臺的純物件導向的語言 丶 .NET跨語言的平臺 丶Python、Scala…

什麼是Java語言?

  • 是SUN(Stanford University Network,斯坦福大學網路公司 ) 1995年推出的一 門高階程式語言。
  • 是一種面向Internet的程式語言。Java一開始富有吸引力是因爲Java程式可以 在Web瀏覽器中執行。這些Java程式被稱爲Java小程式(applet)。applet使 用現代的圖形用戶介面與Web使用者進行互動。 applet內嵌在HTML程式碼中。
  • 隨着Java技術在web方面的不斷成熟,已經成爲Web應用程式的首選開發語言。

Java簡史

  • 1991年 Green專案,開發語言最初命名爲Oak (橡樹)
  • 1994年,開發組意識到Oak 非常適合於網際網路
  • 1996年,發佈JDK 1.0,約8.3萬個網頁應用Java技術來製作
  • 1997年,發佈JDK 1.1,JavaOne會議召開,創當時全球同類會議規模之最
  • 1998年,發佈JDK 1.2,同年發佈企業平臺J2EE
  • 1999年,Java分成J2SE、J2EE和J2ME,JSP/Servlet技術誕生
  • 2004年,發佈裡程碑式版本:JDK 1.5,爲突出此版本的重要性,更名爲JDK 5.0
  • 2005年,J2SE -> JavaSE,J2EE -> JavaEE,J2ME -> JavaME
  • 2009年,Oracle公司收購SUN,交易價格74億美元
  • 2011年,發佈JDK 7.0
  • 2014年,發佈JDK 8.0,是繼JDK 5.0以來變化最大的版本
  • 2017年,發佈JDK 9.0,最大限度實現模組化
  • 2018年3月,發佈JDK 10.0,版本號也稱爲18.3
  • 2018年9月,發佈JDK 11.0,版本號也稱爲18.9

Java技術體系平臺

              

從Java的應用領域來分,Java語言的應用方向主要表現在以下幾個方面:

  • 企業級應用:主要指複雜的大企業的軟件系統、各種型別的網站。Java的安全機制 機製以及 它的跨平臺的優勢,使它在分佈式系統領域開發中有廣泛應用。應用領域包括金融、電 信、交通、電子商務等。
  • Android平臺應用:Android應用程式使用Java語言編寫。Android開發水平的高低 很大程度上取決於Java語言核心能力是否紮實。
  • 大數據平臺開發:各類框架有Hadoop,spark,storm,flink等,就這類技術生態 圈來講,還有各種中介軟體如flume,kafka,sqoop等等 ,這些框架以及工具大多數 是用Java編寫而成,但提供諸如Java,scala,Python,R等各種語言API供程式設計。
  • 移動領域應用:主要表現在消費和嵌入式領域,是指在各種小型裝置上的應用,包括手 機、PDA、機上盒、汽車通訊裝置等。

Java語言的誕生

java之父James Gosling團隊在開發」Green」專案時,發現C缺少垃圾回收系統,還有可移植的安 全性、分佈程式設計和多執行緒功能。最後,他們想要一種易於移植到各種裝置上的平臺。 Java確實是從C語言和C++語言繼承了許多成份,甚至可以將Java看 成是C語言發展和衍生的產物。比如Java語言的變數宣告,操作符 形式,參數傳遞,流程控制等方面和C語言、C++語言完全相同。但同 時,Java是一個純粹的物件導向的程式設計語言,它繼承了C++語言 物件導向技術的核心。Java捨棄了C語言中容易引起錯誤的指針(以 參照取代)、運算子過載(operator overloading)、多重繼承 (以介面取代)等特性,增加了垃圾回收器功能用於回收不再被參照 的物件所佔據的記憶體空間。JDK1.5又引入了泛型程式設計(Generic Programming)、型別安全的列舉、不定長參數和自動裝/拆箱

Java語言的特點

特點一:物件導向

  • 兩個基本概念:類、物件
  • 三大特性:封裝、繼承、多型

特點二:健壯性

  • 吸收了C/C++語言的優點,但去掉了其影響程式健壯性的部分(如指針、記憶體的申請與 釋放等),提供了一個相對安全的記憶體管理和存取機制 機製

特點三:跨平臺性

  • 跨平臺性:通過Java語言編寫的應用程式在不同的系統平臺上都可以執行。Write once , Run Anywhere」 原理:只要在需要執行 java 應用程式的操作系統上,先安裝一個Java虛擬機器 (JVM Java Virtual Machine) 即可。由JVM來負責Java程式在該系統中的執行。

    

核心機制 機製之Java虛擬機器

  • JVM是一個虛擬的計算機,具有指令集並使用不同的儲存區域。負責執行指令,管理數據、記憶體、暫存器
  • 對於不同的平臺,有不同的虛擬機器。
  • 只有某平臺提供了對應的java虛擬機器,java程式纔可在此平臺執行
  • Java虛擬機器機制 機製遮蔽了底層執行平臺的差別,實現了「一次編譯,到處執行」

                     

核心機制 機製之垃圾回收

  • 不再使用的記憶體空間應回收—— 垃圾回收。
  • 在C/C++等語言中,由程式設計師負責回收無用記憶體。
  • Java 語言消除了程式設計師回收無用記憶體空間的責任:它提供一種系統級執行緒跟蹤儲存空 間的分配情況。並在JVM空閒時,檢查並釋放那些可被釋放的儲存空間。
  • 垃圾回收在Java程式執行過程中自動進行,程式設計師無法精確控制和幹預。
  • Java程式還會出現記憶體漏失和記憶體溢位問題嗎?Yes!

什麼是JDKJRE

             

JDK、JRE、JVM關係

                          

Java語言的環境搭建 

下載JDK

  • 官方網址: www.oracle.com 或者 java.sun.com

安裝JDK

  • 傻瓜式安裝,下一步即可。
  • 建議:安裝路徑不要有中文或者空格等特殊符號。
  • 如果操作系統是64位元的,軟體儘量選擇支援64位元的(除非軟體本身不區分)。
  • 當提示安裝 JRE 時,正常在JDK安裝時已經裝過了,但是爲了後續使用整合開發工具不報錯,建議也根據提示安裝JRE。
  • JDK8安裝的時候,不僅JDK內建了一個JRE,而且還會在JDK目錄之外獨立的生成一個單獨的JRE。(以前低版本的時候,JRE實際上是有2個。)一個是JDK內建的,一個是獨立於JDK之外的。

JDK的安裝目錄介紹

        

設定環境變數 path

爲了開發方便,我們想在任意的目錄下都可以使用JDK的開發工具,則必須要設定環境變數,設定環境變數的意義 在於告訴操作系統,我們使用的JDK開發工具在哪個目錄下。具體操作流程,參看百度。

注意:環境變數包括「系統變數」和「使用者變數」

  • 系統變數:範圍比較大,系統變數會讓計算機所有使用者都起作用。
  • 使用者變數:範圍比較小,這個變數只是作用於當前使用者。

到目前爲止,一共設定了哪些環境變數?

  • 到目前爲止,我們只設定了一個環境變數path,並且這個環境變數path和java實際上沒關係,是人家windows操作系統的機制 機製。
  • 對於Java的JDK所屬的環境變數,有一個叫做:JAVA_HOME這個JAVA_HOME目前我們不需要,不設定這個環境變數也不會影響當前java程式的執行。但是後期學習到JavaWEB的時候需要安裝Tomcat伺服器,那個時候JAVA_HOME就必須設定了。那麼除了JAVA_HOME環境變數之外,JDK相關的環境變數還有其他的嗎?答案:有的。

怎麼檢視編譯器版本?

  • 命令:javac -version

怎麼檢視java虛擬機器的版本?

  • 命令:java -version

開發環境已經搭建完畢,可以開發我們第一個Java程式了。 Java程式開發三步驟:編寫、編譯、執行。在編寫第一個 Java 程式之前,我們應當對 Java 的載入與執行提前有一個簡單的瞭解,請看下圖:

                             

通過上圖,我們可以看到 Java 程式從開發到最終執行是這樣進行的:

第一步(寫程式碼):在任意位置建立一個.java 結尾的檔案,程式設計師在該檔案中編寫符合 Java 語法的原始碼,這個檔案被稱爲Java 原始檔。

第二步(編譯):使用「javac」命令對 java 原始檔進行編譯,如果 Java 原始檔符合 Java語法規則,則編譯生成 1 個或者多個以「.class」結尾的檔案。「.class」結尾的檔案我們稱之 爲位元組碼檔案,注意位元組碼檔案不是普通文字檔案,使用記事本等文字編輯器是無法開啓的, 但該檔案內容也不是二進制,如果是二進制形式的話,操作系統是可以直接執行的,這個檔案 的內容我們稱之爲位元組碼。注意:這裏有一個「類名」的概念,假設生成的檔案是 A.class, 則表示類名爲 A,B.class 則表示類名爲 B。

第三步(執行):使用「java」命令執行已編譯的 Java 程式,假設編譯之後的位元組碼檔案 是 A.class,則在 dos 命令視窗中執行 java A命令,這個時候 Java 虛擬機器(JVM)就啓動了, Java 虛擬機器通過「類裝載器 ClassLoader」從硬碟中找到 A.class 檔案並裝載,位元組碼檔案被裝 載到 Java 虛擬機器之後,Java 虛擬機器直譯器對位元組碼進行解釋,最終解釋爲二進制碼,然後操 作系統通過執行二進制指令來和硬體平臺完成互動。

以上則是 Java 程式載入與執行的過程,接下來我給大家總結 7 條規則,大家可以理解並記 憶一下:

  1. Java 程式從開發到執行包括編譯和執行兩個階段,這兩個階段可以在不同的操作系統 中完成,例如在 windows 環境下進行編譯,在 Linux 環境下執行,這是因爲有 JVM 機制 機製的存 在,做到了一次編譯到處執行(跨平臺/可移植)。
  2. 編譯階段需要使用 javac.exe(安裝 JDK 之後該命令就存在了)命令,執行階段需要使 用 java.exe(安裝 JRE 之後該命令就存在了)命令。
  3.  一個 Java 原始檔可能會編譯生成多個 class 檔案。
  4. Java 原始檔中的原始碼如果不符合 Java 的語法機制 機製則編譯時編譯器會提示錯誤資訊, 並且無法生成 class 檔案。反之則生成 class 檔案,而 class 檔案纔是最終要執行的程式,此時 將 Java 原始檔刪除是不會影響 Java 程式執行的(當然,我們也不必刪除 java 原始檔,因爲在 執行 class 檔案之後,如果沒有達到預期的執行效果,這個時候還需要將 Java 原始碼修改,重新編譯,以達到最終的執行效果)。
  5. 若生成的位元組碼檔名爲 A.class,那麼我們稱 A爲一個類的名字
  6. 當編譯階段完成之後,我們可以使用 JRE 中的 java.exe 命令執行程式,例如執行命令 「java A」,該命令執行後會啓動類載入器,類載入器去硬碟上搜尋 A.class 檔案,找到該位元組 碼檔案之後,將其載入到 JVM 當中,JVM 中的直譯器會將 A.class 位元組碼檔案解釋爲操作系 統可以執行的二進制碼,然後操作系統通過執行二進制碼和硬體平臺互動。
  7. 執行 Java 程式的前提是當前操作系統上已經安裝了對應版本的 JVM(JVM 不是單獨 安裝的,安裝 JRE 即可,不同的操作系統需要安裝不同版本的 JRE,不同版本的 JRE 對應不 同版本的 JVM)。

在瞭解了 Java 程式的載入與執行之後,我們開始動手實現第一個 Java 程式吧!

HelloWorld案例

                                   

1:編寫Java源程式

我們首先新建HelloWorld.java 檔案,鍵入如下程式碼

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

第一個 HelloWord 源程式就編寫完成了,但是這個檔案是程式設計師編寫的,JVM是看不懂的,也就不能執行,因此我 們必須將編寫好的 Java原始檔 編譯成JVM可以看懂的 位元組碼檔案 。

2:編譯Java原始檔

在DOS命令列中,進入Java原始檔的目錄,使用 javac 命令進行編譯。javac後面一定是跟着java原始檔的路徑(路徑包括相對和絕對)

編譯成功後,命令列沒有任何提示。原始檔的目錄,發現產生了一個新的檔案 HelloWorld.class ,該檔案就是編譯後的檔案,是Java的可執行檔案,稱爲位元組碼檔案,有了位元組碼檔案,就可以執行程式了。

3:執行Java程式

在DOS命令列中,進入Java原始檔的目錄,使用 java 命令進行執行。java這個命令,後面跟的是「類名」,而絕對不能跟「檔案路徑」,

對修改後的Test.java原始檔需要重新編譯,生成新的class檔案後,再進行執行。

java HelloWorld」的執行過程以及原理。

  • 第一步:會先啓動JVM(java虛擬機器)
  • 第二步:JVM啓動之後,JVM會去啓動「類載入器classloader」
    • 類載入器的作用:載入類的。本質上類載入器負責去硬碟上找「類」對應的「位元組碼」檔案。假設是「java HelloWorld」,那麼類載入器會去硬碟上搜尋:HelloWorld.class檔案。
    • 預設情況下類載入器(classloader)會從當前路徑下找。
    • 我們可以設定一個環境變數,叫做:classpath 給類載入器指定一個路徑,讓類載入器去指定的路徑下載入位元組碼檔案
    • classpath是一個環境變數,是給「類載入器」指路的。
    • classpath環境變數不屬於windows操作系統,classpath環境變數隸屬於java。
  • 第三步:類載入器如果在硬碟上找不到對應的位元組碼檔案,會報錯,報什麼錯?錯誤: 找不到或無法載入主類。類載入器如果在硬碟上找到了對應的位元組碼檔案,類載入器會將該位元組碼。檔案裝載到JVM當中,JVM啓動「直譯器」將位元組碼解釋爲「101010000...」這種二進制碼,操作系統執行二進制碼和硬體互動。

Java註釋

註釋是對程式碼的解釋和說明,其目的是讓程式設計師能夠更加快速的理解程式碼。它是編寫程式時,寫程式的人給一個語句、程式段等的解釋或提示,能提高程式程式碼的可讀性。我認爲新增註 加注釋,是爲了程式更容易理解與維護,特別是維護,更是對自己程式碼負責的一種體現。註釋在編譯的時候不會生成到 class 位元組碼檔案當中,它只在 java 原始檔中保留。 

註釋的三種方式

Java 語言的註釋包括三種方式,它們分別是:

第一種:單行註釋,語法格式如下:

  • // 單行註釋,兩個正斜槓後面的內容被註釋

第二種:多行註釋,語法格式如下:

  •  /* 註釋文字 */

第三種:javadoc 文件註釋。

  • /**@author 指定java程式的作者,註釋內容*/  

註釋注意事項:

  • 對於單行和多行註釋,被註釋的文字,不會被JVM(java虛擬機器)解釋執行。
  • 多行註釋裏面不允許有多行註釋巢狀
  • 文件註釋內容可以被JDK提供的工具 javadoc 所解析,生成一套以網頁檔案形式體現的該程式的說明文件。
  • 通常要在類和介面上寫註釋,這一部分註釋是必須的。在這裏,我們需要使用 javadoc 註釋,需要標明:建立者,建立時間,版本,以及該類的作用。在方法中,我們需要對入參,出參,以及返回值,均要標明。對常數,我們需要使用多行註釋,進行標明該常數的用途。在關鍵演算法上,新增註 加注釋並且按照順序依次標明,寫明白該方法爲什麼這麼做。
  • 註釋的作用不在於表示程式碼的含義,而在於表示程式碼的功能。

我們現在來給上面的HelloWorld 原始檔新增註 加注釋

 
/*
1. java規範的三種註釋方式:
單行註釋
多行註釋
文件註釋(java特有)
2.
單行註釋和多行註釋的作用:
① 對所寫的程式進行解釋說明,增強可讀性。方便自己,方便別人
② 偵錯所寫的程式碼
3. 特點:單行註釋和多行註釋,註釋了的內容不參與編譯。
         換句話說,編譯以後生成的.class結尾的位元組碼檔案中不包含註釋掉的資訊
4. 文件註釋的使用:
    註釋內容可以被JDK提供的工具 javadoc 所解析,生成一套以網頁檔案形式體現的該程式的說明文件。
5. 多行註釋不可以巢狀使用
*/
 
/**
文件註釋
@author shkstart
@version v1.0
這是我的第一個java程式!非常的開森!
*/
public class HelloWorld{
	/*
	多行註釋:
	如下的main方法是程式的入口!
	main的格式是固定的!
	*/
	/**
	如下的方式是main(),作用:程式的入口。
	*/
	public static void main(String[] args){
		//單行註釋:如下的語句表示輸出到控制檯
		//System.out.println("Hello World!")
		System.out.println("Hello World!");
	}
}

入門程式說明

編譯和執行是兩回事

  • 編譯:是指將我們編寫的Java原始檔翻譯成JVM認識的class檔案,在這個過程中, javac 編譯器會檢查我們 所寫的程式是否有錯誤,有錯誤就會提示出來,如果沒有錯誤就會編譯成功。
  • 執行是指將 class檔案 交給JVM去執行,此時JVM就會去執行我們編寫的程式了。

關於main方法

  • main方法:稱爲主方法。寫法是固定格式不可以更改。main方法是程式的入口點或起始點,無論我們編寫多少程式,JVM在執行的時候,都會從main方法這裏開始執行。

小結第一個程式

  • Java原始檔以「java」爲擴充套件名。原始檔的基本組成部分是類(class),如 本例中的HelloWorld類。
  • 類名後面必須是一對大括號,這一對大括號被稱爲「類體」
  • Java應用程式的執行入口是main()方法。它有固定的書寫格式: public static void main(String[] args) {...}
  • Java語言嚴格區分大小寫。
  • Java方法由一條條語句構成,每個語句以「;」結束。
  • 大括號都是成對出現的,缺一不可。
  • 一個原始檔中最多隻能有一個public類。其它類的個數不限,如果原始檔包含 一個public類,則檔名必須按該類名命名。雖然一個 java 原始檔可以定義多個 class,實際上這是不規範的,比較規範的寫法是一個 java 原始檔中只定義一個 class
  • 非常非常重要的是:方法體中的程式碼遵循自上而下的順序依次逐行執行。
  • 類體當中不能直接編寫輸出語句

/*
	1、在java中任何有效的程式碼必須寫到「類體」當中,最外層必須是一個類的定義。

	2、public表示公開的,class表示定義一個類,Test是一個類名。類名後面必須是
	一對大括號,這一對大括號被稱爲「類體」

	3、括號必須是成對的。並且建議都要成對編寫,這樣纔不會丟掉。
	
	4、什麼時候程式碼縮排?
		我包着你,你就比我低一級。你就需要縮排。
		沒有合理的縮排,程式碼可讀性很差。
		或者也可以這樣所,大括號裡的都需要縮排。
		縮排就是可讀性問題,不縮排也不影響程式的編譯和執行。
		
*/

public class HelloWorld{ // 宣告/定義一個公開的類,起個名字叫HelloWorld


	// 類體

	// 整個這一塊的程式碼被稱爲:main方法(程式的入口,SUN公司java語言規定的)
	// 也就是說:JVM在執行程式的時候,會主動去找這樣一個方法。沒有這個規格的方法,程式是無法執行的。
	// main方法也可以叫做主方法。
	// 注意:方法必須放到「類體」中,不能放到「類體」外面。
	// 任何一個程式都要有一個入口,沒有入口進不來,無法執行。
	public static void main(String[] args){ //這是一個入口方法。
		
		// 方法體
		// 注意:方法體由一行一行的「java語句」構成
		// 並且非常重要的是:任何一條java語句必須以「;」結尾,並且這個分號還得是英文的,不能用中文分號。
		// ";" 代表一條語句的結束。
		// 非常非常重要的是:方法體中的程式碼遵循自上而下的順序依次逐行執行。

		System.out.println("Test1");

		// System.out.println();這行程式碼的作用是向控制檯輸出一句話。就是這個作用。
		// 注意:如果println後面小括號裡的內容是一個「字串」的話,必須使用英文雙引號括起來。
		// 雙引號也要成對兒寫。
		System.out.println("Test2");
	}

	
	// 能再來一個一模一樣的入口嗎?
	// 不行,有語法錯誤
	/*
	public static void main(String[] args){
	
	}
	*/

	//可以定義多個方法

}