[TOC]
1.1 軟件開發(fā)介紹
軟件開發(fā)
軟件,即一系列按照特定順序組織的計(jì)算機(jī)數(shù)據(jù)和指令的集合。有系統(tǒng)軟件和應(yīng)用軟件之分。
人機(jī)交互方式
圖形化界面(Graphical User Interface GUI)這種方式簡單直觀,使用者易于接受,容易上手操作。
命令行方式(Command Line Interface CLI):需要有一個控制臺,輸入特定的指令,讓計(jì)算機(jī)完成一些操作。較為麻煩,需要記錄住一些命令。
==Pascal之父Nicklaus Wirth: “Algorithms+Data Structures=Programs”==
常用的DOS命令
dir : 列出當(dāng)前目錄下的文件以及文件夾
md : 創(chuàng)建目錄
rd : 刪除目錄
cd : 進(jìn)入指定目錄
cd.. : 退回到上一級目錄
cd\: 退回到根目錄
del : 刪除文件
exit : 退出 dos 命令行
補(bǔ)充:echo javase>1.doc
常用快捷鍵
← →:移動光標(biāo)
↑ ↓:調(diào)閱歷史操作命令
Delete和Backspace:刪除字符
1-2 計(jì)算機(jī)編程語言介紹
什么是計(jì)算機(jī)語言
語言:是人與人之間用于溝通的一種方式。例如:中國人與中國人用普通話溝通。而中國人要和英國人交流,就要學(xué)習(xí)英語。
計(jì)算機(jī)語言:人與計(jì)算機(jī)交流的方式。
如果人要與計(jì)算機(jī)交流,那么就要學(xué)習(xí)計(jì)算機(jī)語言。
計(jì)算機(jī)語言有很多種。如:C ,C++ ,Java ,PHP , Kotlin,Python,Scala等。第一代語言
機(jī)器語言。指令以二進(jìn)制代碼形式存在。第二代語言
匯編語言。使用助記符表示一條機(jī)器指令。

- 第三代語言:高級語言
C、Pascal、Fortran面向過程的語言
C++面向過程/面向?qū)ο?br> Java跨平臺的純面向?qū)ο蟮恼Z言
.NET跨語言的平臺
Python、Scala…
1-3 Java語言概述
- 是SUN(Stanford University Network,斯坦福大學(xué)網(wǎng)絡(luò)公司 ) 1995年推出的一門高級編程語言。
- 是一種面向Internet的編程語言。Java一開始富有吸引力是因?yàn)镴ava程序可以在Web瀏覽器中運(yùn)行。這些Java程序被稱為Java小程序(applet)。applet使用現(xiàn)代的圖形用戶界面與Web用戶進(jìn)行交互。 applet內(nèi)嵌在HTML代碼中。
- 隨著Java技術(shù)在web方面的不斷成熟,已經(jīng)成為Web應(yīng)用程序的首選開發(fā)語言
后臺開發(fā):Java、PHP、Python、Go、Node.js
Java語言概述:Java簡史
1991年 Green項(xiàng)目,開發(fā)語言最初命名為Oak (橡樹)
1994年,開發(fā)組意識到Oak 非常適合于互聯(lián)網(wǎng)
1996年,發(fā)布JDK 1.0,約8.3萬個網(wǎng)頁應(yīng)用Java技術(shù)來制作
1997年,發(fā)布JDK 1.1,JavaOne會議召開,創(chuàng)當(dāng)時全球同類會議規(guī)模之最
1998年,發(fā)布JDK 1.2,同年發(fā)布企業(yè)平臺J2EE
1999年,Java分成J2SE、J2EE和J2ME,JSP/Servlet技術(shù)誕生
2004年,發(fā)布里程碑式版本:JDK 1.5,為突出此版本的重要性,更名為JDK 5.0
2005年,J2SE -> JavaSE,J2EE -> JavaEE,J2ME -> JavaME
2009年,Oracle公司收購SUN,交易價格74億美元
2011年,發(fā)布JDK 7.0
2014年,發(fā)布JDK 8.0,是繼JDK 5.0以來變化最大的版本
2017年,發(fā)布JDK 9.0,最大限度實(shí)現(xiàn)模塊化
2018年3月,發(fā)布JDK 10.0,版本號也稱為18.3
2018年9月,發(fā)布JDK 11.0,版本號也稱為18.9
Java技術(shù)體系平臺

1-3 Java在各領(lǐng)域的應(yīng)用
從Java的應(yīng)用領(lǐng)域來分,Java語言的應(yīng)用方向主要表現(xiàn)在以下幾個方面:
- 企業(yè)級應(yīng)用:主要指復(fù)雜的大企業(yè)的軟件系統(tǒng)、各種類型的網(wǎng)站。Java的安全機(jī)制以及它的跨平臺的優(yōu)勢,使它在分布式系統(tǒng)領(lǐng)域開發(fā)中有廣泛應(yīng)用。應(yīng)用領(lǐng)域包括金融、電信、交通、電子商務(wù)等。
- Android平臺應(yīng)用:Android應(yīng)用程序使用Java語言編寫。Android開發(fā)水平的高低很大程度上取決于Java語言核心能力是否扎實(shí)。
- 大數(shù)據(jù)平臺開發(fā):各類框架有Hadoop,spark,storm,flink等,就這類技術(shù)生態(tài)圈來講,還有各種中間件如flume,kafka,sqoop等等 ,這些框架以及工具大多數(shù)是用Java編寫而成,但提供諸如Java,scala,Python,R等各種語言API供編程。
- 移動領(lǐng)域應(yīng)用:主要表現(xiàn)在消費(fèi)和嵌入式領(lǐng)域,是指在各種小型設(shè)備上的應(yīng)用,包括手機(jī)、PDA、機(jī)頂盒、汽車通信設(shè)備等。
Java語言的誕生
java之父James Gosling團(tuán)隊(duì)在開發(fā)”Green”項(xiàng)目時,發(fā)現(xiàn)C缺少垃圾回收系統(tǒng),還有可移植的安全性、分布程序設(shè)計(jì)和多線程功能。最后,他們想要一種易于移植到各種設(shè)備上的平臺。

Java確實(shí)是從C語言和C++語言繼承了許多成份,甚至可以將Java看成是類C語言發(fā)展和衍生的產(chǎn)物。比如Java語言的變量聲明,操作符形式,參數(shù)傳遞,流程控制等方面和C語言、C++語言完全相同。但同時,Java是一個純粹的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,它繼承了C++語言面向?qū)ο蠹夹g(shù)的核心。Java舍棄了C語言中容易引起錯誤的指針(以引用取代)、運(yùn)算符重載(operator overloading)、多重繼承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的對象所占據(jù)的內(nèi)存空間。
JDK1.5又引入了泛型編程(Generic Programming)、類型安全的枚舉、不定長參數(shù)和自動裝/拆箱
主要特性
- Java語言是易學(xué)的。Java語言的語法與C語言和C++語言很接近,使得大多數(shù)程序員很容易學(xué)習(xí)和使用Java。
- Java語言是強(qiáng)制面向?qū)ο蟮?。Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實(shí)現(xiàn)機(jī)制(關(guān)鍵字為implements)。
- Java語言是分布式的。Java語言支持Internet應(yīng)用的開發(fā),在基本的Java應(yīng)用編程接口中有一個網(wǎng)絡(luò)應(yīng)用編程接口(java net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠(yuǎn)程方法激活)機(jī)制也是開發(fā)分布式應(yīng)用的重要手段。
- Java語言是健壯的。Java的強(qiáng)類型機(jī)制、異常處理、垃圾的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。
- Java語言是安全的。Java通常被用在網(wǎng)絡(luò)環(huán)境中,為此,Java提供了一個安全機(jī)制以防惡意代碼的攻擊。如:安全防范機(jī)制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節(jié)代碼檢查。
- Java語言是體系結(jié)構(gòu)中立的。Java程序(后綴為java的文件)在Java平臺上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件),然后可以在實(shí)現(xiàn)這個Java平臺的任何系統(tǒng)中運(yùn)行。
- Java語言是解釋型的。如前所述,Java程序在Java平臺上被編譯為字節(jié)碼格式,然后可以在實(shí)現(xiàn)這個Java平臺的任何系統(tǒng)的解釋器中運(yùn)行。
- Java是性能略高的。與那些解釋型的高級腳本語言相比,Java的性能還是較優(yōu)的。
- Java語言是原生支持多線程的。在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來創(chuàng)建。
1-4 Java程序運(yùn)行機(jī)制及運(yùn)行過程
Java語言的特點(diǎn)
- 特點(diǎn)一:面向?qū)ο?br>
兩個基本概念:類、對象
三大特性:封裝、繼承、多態(tài) - 特點(diǎn)二:健壯性
吸收了C/C++語言的優(yōu)點(diǎn),但去掉了其影響程序健壯性的部分(如指針、內(nèi)存的申請與釋放等),提供了一個相對安全的內(nèi)存管理和訪問機(jī)制 - 特點(diǎn)三:跨平臺性
跨平臺性:通過Java語言編寫的應(yīng)用程序在不同的系統(tǒng)平臺上都可以運(yùn)行?!癢rite once , Run Anywhere”
原理:只要在需要運(yùn)行 java 應(yīng)用程序的操作系統(tǒng)上,先安裝一個Java虛擬機(jī) (JVM Java Virtual Machine) 即可。由JVM來負(fù)責(zé)Java程序在該系統(tǒng)中的運(yùn)行。
Java兩種核心機(jī)制
- Java虛擬機(jī) (Java Virtal Machine)
JVM是一個虛擬的計(jì)算機(jī),具有指令集并使用不同的存儲區(qū)域。負(fù)責(zé)執(zhí)行指令,管理數(shù)據(jù)、內(nèi)存、寄存器。
對于不同的平臺,有不同的虛擬機(jī)。
只有某平臺提供了對應(yīng)的java虛擬機(jī),java程序才可在此平臺運(yùn)行
Java虛擬機(jī)機(jī)制屏蔽了底層運(yùn)行平臺的差別,實(shí)現(xiàn)了“一次編譯,到處運(yùn)行”


- 垃圾收集機(jī)制 (Garbage Collection)
不再使用的內(nèi)存空間應(yīng)回收—— 垃圾回收。
- 在C/C++等語言中,由程序員負(fù)責(zé)回收無用內(nèi)存。
- Java 語言消除了程序員回收無用內(nèi)存空間的責(zé)任:它提供一種系統(tǒng)級線程跟蹤存儲空間的分配情況。并在JVM空閑時,檢查并釋放那些可被釋放的存儲空間。
垃圾回收在Java程序運(yùn)行過程中自動進(jìn)行,程序員無法精確控制和干預(yù)。
Java程序還會出現(xiàn)內(nèi)存泄漏和內(nèi)存溢出問題嗎?==Yes!==
1-5 Java語言的環(huán)境搭建
明確什么是JDK, JRE


==簡單而言,使用JDK的開發(fā)工具完成的java程序,交給JRE去運(yùn)行。==

- JDK = JRE + 開發(fā)工具集(例如Javac編譯工具等)
- JRE = JVM + Java SE標(biāo)準(zhǔn)類庫
下載 JDK
官方網(wǎng)址:
安裝JDK
- 傻瓜式安裝,下一步即可。
- 建議:安裝路徑不要有中文或者空格等特殊符號。
- 如果操作系統(tǒng)是64位的,軟件盡量選擇支持64位的(除非軟件本身不區(qū)分)。
- 當(dāng)提示安裝 JRE 時,正常在JDK安裝時已經(jīng)裝過了,但是為了后續(xù)使用Eclipse等開發(fā)工具不報(bào)錯,建議也根據(jù)提示安裝JRE。
- 安裝 JDK
配置環(huán)境變量
在dos命令行中敲入javac,出現(xiàn)錯誤提示:

錯誤原因:當(dāng)前執(zhí)行的程序在當(dāng)前目錄下如果不存在,windows系統(tǒng)會在系統(tǒng)中已有的一個名為path的環(huán)境變量指定的目錄中查找。如果仍未找到,會出現(xiàn)以上的錯誤提示。所以進(jìn)入到 jdk安裝路徑\bin目錄下,執(zhí)行javac,會看到j(luò)avac參數(shù)提示信息。

配置環(huán)境變量 path
- path:windows系統(tǒng)執(zhí)行命令時要搜尋的路徑。
每次執(zhí)行 java 的工具都要進(jìn)入到bin目錄下,是非常麻煩的。可不可以在任何目錄下都可以執(zhí)行java的工具呢?
根據(jù)windows系統(tǒng)在查找可執(zhí)行程序的原理,可以將java工具所在路徑定義到 path 環(huán)境變量中,讓系統(tǒng)幫我們?nèi)フ疫\(yùn)行執(zhí)行的程序。
配置方法: - 我的電腦--屬性--高級系統(tǒng)設(shè)置--環(huán)境變量
- 編輯 path 環(huán)境變量,在變量值開始處加上java工具所在目錄,后面用 “ ; ”和其他值分隔開即可。
- 打開DOS命令行,任意目錄下敲入javac。如果出現(xiàn)javac 的參數(shù)信息,配置成功。
注: 具體操作流程,參看JDK8下載安裝配置(點(diǎn)擊跳轉(zhuǎn))
驗(yàn)證是否成功:javac java


1-6 開發(fā)體驗(yàn)— HelloWorld
- 步驟:
1.將 Java 代碼編寫到擴(kuò)展名為 .java 的文件中。
2.通過 javac 命令對該 java 文件進(jìn)行編譯。
通過 java 命令對生成的 class 文件進(jìn)行運(yùn)行

- 步驟一:編寫
選擇最簡單的編輯器:記事本。
敲入代碼 class Test{ }
將文件保存成Test.java,這個文件是存放java代碼的文件,稱為源文件。

第一個Java程序
public class Test{
public static void main(String[] args) {
System.out.println(“Hello World!”);
}
}
步驟二:編譯

- 有了java源文件,通過編譯器將其編譯成JVM可以識別的字節(jié)碼文件。
- 在該源文件目錄下,通過javac編譯工具對Test.java文件進(jìn)行編譯。
- 如果程序沒有錯誤,沒有任何提示,但在當(dāng)前目錄下會出現(xiàn)一個Test.class文件,該文件稱為字節(jié)碼文件,也是可以執(zhí)行的java的程序。
步驟三:運(yùn)行
- 有了可執(zhí)行的java程序(Test.class字節(jié)碼文件)
- 通過運(yùn)行工具java.exe對字節(jié)碼文件進(jìn)行執(zhí)行。
- 出現(xiàn)提示:缺少一個名稱為main的方法。

- 因?yàn)橐粋€程序的執(zhí)行需要一個起始點(diǎn)或者入口,所以在Test類中的加入public static void main(String[] args){ }
- 對修改后的Test.java源文件需要重新編譯,生成新的class文件后,再進(jìn)行執(zhí)行。
- 發(fā)現(xiàn)沒有編譯失敗,但也沒有任何效果,因?yàn)椴]有告訴JVM要幫我們做什么事情,也就是沒有可以具體執(zhí)行的語句。
- 想要和JVM來個互動,只要在main方法中加入一句System.out.println(“Hello World");因?yàn)槌绦蜻M(jìn)行改動,所以再重新編譯,運(yùn)行即可。
1-7 常見問題及解決方法

?源文件名不存在或者寫錯
?當(dāng)前路徑錯誤
?后綴名隱藏問題

?類文件名寫錯,尤其文件名與類名不一致時,要小心
?類文件不在當(dāng)前路徑下,或者不在classpath指定路徑下

?聲明為public的類應(yīng)與文件名一致,否知編譯失敗

?編譯失敗,注意錯誤出現(xiàn)的行數(shù),再到源代碼中指定位置改錯
小總結(jié):
學(xué)習(xí)編程最容易犯的錯是語法錯誤。Java要求你必須按照語法規(guī)則編寫代碼。如果你的程序違反了語法規(guī)則,例如:忘記了分號、大括號、引號,或者拼錯了單詞,java編譯器都會報(bào)語法錯誤。嘗試著去看懂編譯器會報(bào)告的錯誤信息。
1-8 注釋(Comment)
用于注解說明解釋程序的文字就是注釋。
Java中的注釋類型:
單行注釋 格式: //注釋文字
多行注釋 格式: /* 注釋文字 */
文檔注釋 (java特有)
對于單行和多行注釋,被注釋的文字,不會被JVM(java虛擬機(jī))解釋執(zhí)行。
多行注釋里面不允許有多行注釋嵌套。
格式:/**
@author 指定java程序的作者
@version 指定源文件的版本
*/
注釋內(nèi)容可以被JDK提供的工具 javadoc 所解析,生成一套以網(wǎng)頁文件形式體現(xiàn)的該程序的說明文檔。
提高了代碼的閱讀性;調(diào)試程序的重要方法。
注釋是一個程序員必須要具有的良好編程習(xí)慣。
將自己的思想通過注釋先整理出來,再用代碼去體現(xiàn)

小結(jié)第一個程序
- Java源文件以“java”為擴(kuò)展名。源文件的基本組成部分是類(class),如本例中的HelloWorld類。
- Java應(yīng)用程序的執(zhí)行入口是main()方法。它有固定的書寫格式:
public static void main(String[] args) {...} - Java語言嚴(yán)格區(qū)分大小寫。
- Java方法由一條條語句構(gòu)成,每個語句以“;”結(jié)束。
- 大括號都是成對出現(xiàn)的,缺一不可。
- 一個源文件中最多只能有一個public類。其它類的個數(shù)不限,如果源文件包含一個public類,則文件名必須按該類名命名。
1-9 Java API文檔
API (Application Programming Interface,應(yīng)用程序編程接口)是 Java 提供的基本編程接口。
Java語言提供了大量的基礎(chǔ)類,因此 Oracle 也為這些基礎(chǔ)類提供了相應(yīng)的API文檔,用于告訴開發(fā)者如何使用這些類,以及這些類里包含的方法。
下載API:https://www.oracle.com/technetwork/java/javase/downloads/index.html
Additional Resources-Java SE 8 Documentation下載。
1.10 良好的編程風(fēng)格
正確的注釋和注釋風(fēng)格
- 使用文檔注釋來注釋整個類或整個方法。
- 如果注釋方法中的某一個步驟,使用單行或多行注釋。
正確的縮進(jìn)和空白 - 使用一次tab操作,實(shí)現(xiàn)縮進(jìn)
- 運(yùn)算符兩邊習(xí)慣性各加一個空格。比如:2 + 4 * 5。
塊的風(fēng)格 - Java API 源代碼選擇了行尾風(fēng)格
行尾風(fēng)格
public class Test {
public static void main(String[] args){
System.out.println("Block Style!");
}
}
次行風(fēng)格
public class Test
{
public static void main(String[] args)
{
System.out.println("Block Style!");
}
}
選擇合適的文本編輯器或 IDE 開發(fā)
JBuilder
JBuilder是Borland公司開發(fā)的針對java的開發(fā)工具,使用JBuilder將可以快速,有效的開發(fā)各類java應(yīng)用。 Jbuilder支持各種應(yīng)用服務(wù)器。Jbuilder與Inprise Application Server緊密集成,同時支持WebLogic Server,支持EJB 1.1和EJB 2.0,可以快速開發(fā)J2EE的電子商務(wù)應(yīng)用。支持遠(yuǎn)程調(diào)試和多線程調(diào)試,調(diào)試器支持各種JDK版本
https://edn.embarcadero.com/cn/jbuilder

NetBeans
NetBeans是一款用Java編寫的開源IDE。既可用于Java開發(fā),也支持其他語言,特別是PHP、C/C ++,和HTML5。NetBeans開發(fā)環(huán)境提供了豐富的產(chǎn)品文檔和培訓(xùn)資源以及大量的第三方插件。
https://netbeans.org/features/index.html

Eclipse
Eclipse應(yīng)該是大多數(shù)Java程序員使用的第一個IDE。眾所周知的、最流行、也最受歡迎的Java開發(fā)工具。優(yōu)點(diǎn)很多:免費(fèi)、更新快、代碼智能化、ANT構(gòu)建等,擁有眾多插件,完全免費(fèi)、有中文版、上手比較快。缺點(diǎn)也非常明顯,安裝插件麻煩、插件對版本要求比較嚴(yán)格。

MyEclipse
MyEclipse也是一款功能強(qiáng)大的J2EE集成開發(fā)環(huán)境,由Genuitec公司發(fā)布,提供免費(fèi)版和收費(fèi)版。但免費(fèi)版,只能滿足基本開發(fā)需求
https://www.myeclipsecn.com/

IntelliJ IDEA
IntelliJ IDEA被認(rèn)為是目前Java開發(fā)效率最快的IDE工具。是JetBrains公司的產(chǎn)品,這家公司總部位于捷克共和國的首都布拉格。它整合了開發(fā)過程中實(shí)用的眾多功能,智能提示錯誤,強(qiáng)大的調(diào)試工具,Ant,JavaEE支持,CVS整合,最大程度的加快開發(fā)的速度。簡單而又功能強(qiáng)大。與其他的一些繁冗而復(fù)雜的IDE工具有鮮明的對比。
https://www.jetbrains.com/idea/


