JavaSE_day01 筆記
一、Java 是什么?
Java 是一種面向?qū)ο箢愋偷木幊陶Z(yǔ)言。
1991 年,Oak(橡樹(shù))主要是做消費(fèi)類型的電子嵌入式芯片。
1995 年,Java(爪哇,咖啡)最終做 Web 應(yīng)用程序。
可以參考每月的 TIOBE 編程語(yǔ)言排行榜。
Java 主要是應(yīng)在服務(wù)端開(kāi)發(fā)中,游戲服務(wù)器,移動(dòng)端服務(wù)器,商城服務(wù)器,視頻服務(wù)器,銀行服務(wù)器。
Java 還會(huì)作為底層封裝的一個(gè)標(biāo)準(zhǔn),通過(guò) Java 來(lái)調(diào)用一些底層的操作。
二、Java 目前主要有三種版本
J2SE:Java 2 Platform Standard Edition,后來(lái)叫 JavaSE。主要是 Java 技術(shù)的核心和基礎(chǔ)部分。
J2EE:Java 2 Platform Enterprise Edition,后來(lái)叫 JavaEE。目前 Eclipse 基金組織在 2018-7-31 又定了一個(gè)新的名字,Jakarta EE。主要代表企業(yè)應(yīng)用開(kāi)發(fā)中相關(guān)的解決方案。簡(jiǎn)單理解就是,如果我們需要開(kāi)發(fā)一個(gè)完整的商業(yè)項(xiàng)目,單純靠 Java 是完成不了的,需要整合其他的技術(shù)一起才行。比如,一個(gè)項(xiàng)目會(huì)用到 Spring、MyBatis、Hibernate、Struts2、Redis、Lucene、Solr、Elasticsearch、Zookeeper、Nginx、Maven、SVN、Git、Gradle...
J2ME:幾乎已經(jīng)淘汰了。目前主要流行使用 Android 技術(shù)來(lái)處理一些小型設(shè)備的應(yīng)用。開(kāi)發(fā) Android 應(yīng)用可以使用 Java 也可以使用 Kotlin。
三、Java 的特點(diǎn)
主要有如下幾個(gè)特點(diǎn):簡(jiǎn)潔、面向?qū)ο蟮?、分布式的、編譯型的、體系中立的、可移植的、健壯的
Java 的簡(jiǎn)潔是相對(duì) C++ 語(yǔ)言來(lái)說(shuō)的,Java 主要是舍棄了 C++ 中一些比較復(fù)雜的東西,比如指針、結(jié)構(gòu)、單元、頭文件、運(yùn)算符重載等內(nèi)容。
Java 是所有面向?qū)ο笳Z(yǔ)言中,面得最“純粹”的面向?qū)ο蟆?/p>
Java 的分布式能力,主要體現(xiàn)在它超強(qiáng)的聯(lián)網(wǎng)能力,Java 開(kāi)發(fā) Socket 通信相關(guān)的程序非常簡(jiǎn)單,訪問(wèn)遠(yuǎn)程對(duì)象的方式跟本地文件系統(tǒng)那樣輕松。
計(jì)算機(jī)中使用的高級(jí)語(yǔ)言編寫程序的執(zhí)行方式主要有兩種:編譯型和解釋型。
編譯型:專門的編譯器,將我們寫好的源代碼,轉(zhuǎn)成當(dāng)前系統(tǒng)平臺(tái)所在的硬件設(shè)備上能夠讀懂并執(zhí)行的機(jī)器碼。接著就可以讓電腦識(shí)別和運(yùn)行。常見(jiàn)的編譯型語(yǔ)言:C、C++、Kotlin、Objective-C、Swift 等。
解釋型:專門的解釋器,將我們寫好的代碼逐行解析執(zhí)行,不會(huì)理你這行數(shù)據(jù)有多長(zhǎng),只要是一行即可??梢约磿r(shí)解析成對(duì)應(yīng)的機(jī)器碼,立即執(zhí)行。常見(jiàn)的解釋型語(yǔ)言:JavaScript、Python、Ruby 等。
Java 呢,特殊一點(diǎn)點(diǎn)。它既是編譯型,也是解釋型語(yǔ)言。Java 需要將源碼(.java)經(jīng)過(guò)編譯器進(jìn)行編譯,得到一個(gè)字節(jié)碼文件(.class),它是一種與平臺(tái)無(wú)關(guān)的、不可執(zhí)行的文件。接著,需要找到解析器解析后,才能夠得到一個(gè)指定系統(tǒng)(比如,當(dāng)前是 win 系統(tǒng))的可執(zhí)行文件。
Java 的 JVM 主要是負(fù)責(zé)執(zhí)行生成的字節(jié)碼文件的一個(gè)工具。JVM 也就是常說(shuō)的虛擬機(jī)。以后面試的時(shí)候,會(huì)常被問(wèn)到。Java 的跨平臺(tái)特性其實(shí)是依靠了 JVM 的強(qiáng)大功能。JVM 給所有平臺(tái)中安裝的工具都設(shè)計(jì)了一致接口,只需要編譯器面向接口生成對(duì)應(yīng)的代碼即可讓虛擬機(jī)進(jìn)行解析執(zhí)行。JVM 的作用,就是一個(gè)轉(zhuǎn)換器。轉(zhuǎn)換后,主要是一個(gè)字節(jié)碼文件,這種文件帶有一點(diǎn)體系結(jié)構(gòu)中立的特性和可移植性,跟誰(shuí)(任何平臺(tái))都沒(méi)有關(guān)系。
Java 在運(yùn)行前和運(yùn)行時(shí),都會(huì)進(jìn)行一系列的檢查,保證程序的健康可用狀態(tài)。
Java 可以說(shuō)是目前最安全的一種程序設(shè)計(jì)語(yǔ)言,可以另外學(xué)習(xí)一些web 安全,Shiro、Spring Security 安全框架。
Java 還有一個(gè)特別優(yōu)秀的多線程特性,使得很多應(yīng)用的性能得到極大的改善。在面試過(guò)程中,也是面試官特別喜歡進(jìn)行提問(wèn)的。面試的點(diǎn)主要在于考察應(yīng)聘者對(duì)程序更抽象的理解能力。
Java 是一種動(dòng)態(tài)的語(yǔ)言,可以很方便的查詢運(yùn)行的信息,還能給運(yùn)行中的程序加入新的代碼。
靜態(tài)編譯:一次編譯,在編譯的時(shí)候把你所有的模塊都編譯進(jìn)去。
動(dòng)態(tài)編譯:按需編譯,程序在運(yùn)行的時(shí)候,用到哪個(gè)模塊就加載哪個(gè)模塊。
四、搭建 Java 的開(kāi)發(fā)環(huán)境
JDK:Java SE Development kit,Java 的標(biāo)準(zhǔn)開(kāi)發(fā)包。JDK 主要是包括了編譯和運(yùn)行需要用到的各種工具包,比如 Java 編譯器、Java 運(yùn)行時(shí)環(huán)境,還有一個(gè)常用的類庫(kù)。
上面說(shuō)到的運(yùn)行時(shí)環(huán)境,其實(shí)就是 JRE。
1)先雙擊安裝,指定安裝路徑(非中文路徑,不要在 c 盤),取消公共 JRE 選項(xiàng)。
2)右鍵“我的電腦”→“屬性”→“高級(jí)系統(tǒng)設(shè)置”→“環(huán)境變量”按鈕→添加“JAVA_HOME”→ 編輯 Path 的值,在最前面加上 “%JAVA_HOME%\bin;”。
3)Win + R 快捷鍵,調(diào)出運(yùn)行窗口,輸入 cmd 打開(kāi) DOS 命令行工具。輸入 java -version 進(jìn)行驗(yàn)證是否安裝 JDK 成功。
JDK 10
bin:主要存放一些執(zhí)行命令,比如將要使用 javac 和 java 命令。
conf:存放相關(guān)的配置文件。
include:存放平臺(tái)特定的頭文件。
jmods:存放各種模塊,JDK 9 版本后新增的內(nèi)容。
legal:存放模塊的授權(quán)文件。
lib:存放一些補(bǔ)充的 jar 包文件。
DOS 命令
cls:清屏。
: 冒號(hào):盤符。
cd:進(jìn)入指定的目錄。
cd ..:回退上一級(jí)目錄。
cd \:回到根目錄中。
五、HelloWorld
類:所有的 Java 代碼都需要寫在一個(gè)類文件中,文件的后綴名 xxx.java。
main 函數(shù):程序的入口。
工具:Eclipse、STS、Netbean、IDEA。
記事本
javac 的命令格式:javac -d 生成的路徑 源碼文件的路徑
如果路徑是當(dāng)前目錄的話,則可以直接使用實(shí)心點(diǎn)來(lái)表示。
javac -d . One.java
java 的命令格式:java 文件名
java One
directory 目錄 f:\abc\bcd\ee\ww
六、Java 的注釋
注釋的作用,主要是用說(shuō)明性的文字,對(duì)當(dāng)前代碼進(jìn)行解釋,讓合作降低溝通成功。
注釋的作用:多寫注釋,以防忘記。平時(shí)調(diào)錯(cuò)的時(shí)候,也可以用到。
寫好的注釋,系統(tǒng)是不會(huì)執(zhí)行注釋中的內(nèi)容。
單行注釋://
多行注釋:/* */
文檔注釋:/** */ 通過(guò) javadoc 命令可以生成對(duì)應(yīng)的說(shuō)明文檔。
七、關(guān)鍵字
就是系統(tǒng)已經(jīng)定義好的一些單詞,有特殊的含義。直接使用可以實(shí)現(xiàn)某些功能,開(kāi)發(fā)者不能自定義它的功能。
保留字沒(méi)有任何含義,也沒(méi)有任何作用。Java 有可能在某年某月某日會(huì)給它賦值一些功能,但到底是什么功能,它還沒(méi)確定,只是當(dāng)前占用不然其他人使用。
八、標(biāo)識(shí)符
組成元素:英文 a-Z、數(shù)字 0-9、符號(hào) _ 和 $
書寫規(guī)則:
1)數(shù)字不能開(kāi)頭
2)不能使用關(guān)鍵字和保留字
3)嚴(yán)格區(qū)分大小寫,不限制長(zhǎng)度,但要求有意義、可讀性強(qiáng)。
參考“駝峰命名法”,就是每個(gè)單詞的首字母大寫。
九、數(shù)據(jù)
軟件開(kāi)發(fā)其實(shí)就是跟數(shù)據(jù)打交道。
軟件 = 數(shù)據(jù) + 邏輯。

Java 中提供兩種容器來(lái)存放數(shù)據(jù):常量和變量。
常量:就是不會(huì)再改變的數(shù)據(jù)。
變量:就是會(huì)發(fā)生改變的數(shù)據(jù)。
十、變量
容器,其實(shí)就跟我們喝水的時(shí)候用的杯子一樣。將我們需要的數(shù)據(jù)(水)裝載容器(杯子)中。
我們應(yīng)該將對(duì)應(yīng)的數(shù)據(jù)裝載在對(duì)應(yīng)的容器中,不然就會(huì)引發(fā)類型匹配錯(cuò)誤。好比,花生油的瓶子不要裝醋,否則會(huì)串味。
12.21 小數(shù):double、float 浮點(diǎn)類型
double 雙精度浮點(diǎn)類型,范圍最大。
float 使用時(shí),需要加上一個(gè) f 或者 F 作為后綴。2.54F、2.56f
12 整數(shù):int 整型
十進(jìn)制:日常生活中常見(jiàn)的數(shù)據(jù)類型。10、12、88、59...
二進(jìn)制:以 0b 或者0B 開(kāi)頭。0b1100、0B0001
十六進(jìn)制:以 0x 或者 0X 開(kāi)頭。數(shù)字 0-9 和 a-f 組成。0xa2
八進(jìn)制:以 0 開(kāi)頭。0123、0257
true 布爾:boolean 布爾型
true 真
false 假
c 字符:char 字符型
指的是單字符,’a’、1、’中’
要特別注意,a-A 的話,有時(shí)候可以當(dāng)做數(shù)字來(lái)用,在ASCII 碼表中,字母有對(duì)應(yīng)的數(shù)值。比如 a 是 97。
變量值可以被訪問(wèn),還可以被覆蓋,設(shè)置可以被賦 null 值。
數(shù)據(jù)是如何存儲(chǔ)的?
不論是在內(nèi)存還是硬盤,存儲(chǔ)設(shè)備的最小信息單元叫“位 bit”,比特位,一般使用小寫 b 字母表示。
計(jì)算機(jī)最小的存儲(chǔ)單元叫“字節(jié) byte”,一般使用大寫 B 字母表示。字節(jié)是由連續(xù)的 8 個(gè)位組成的。
1 B = 8 bit
1 KB = 1024 B
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
1 PB = 1024 TB
整型
byte 字節(jié) 1 -128 ~ 127
short 短整型 2 -32768 ~ 32767
int 整型 4 -2147483648 ~ 2147483648
long 長(zhǎng)整型 8 -2^63 ~ 2^63-1
浮點(diǎn)型
float 4 - 3.403E38 ~ 3.403E38
double 8 - 1.798E308 ~ 1.798E308
字符型
char 2
布爾型
boolean 1 / 0 1
語(yǔ)法格式:
數(shù)據(jù)類型 變量名 = 數(shù)值;
int i = 12; // 定義變量并且初始化賦值
注意:此處的 = 號(hào),叫賦值符。寫代碼的順序,從右到左。
因?yàn)槲覀冃枰獙⒂疫叺闹担x值給左邊的變量。
在使用變量的時(shí)候,需要注意以下幾個(gè)問(wèn)題:
1)定義變量的時(shí)候,需要注意變量名不能重復(fù)。
2)調(diào)用變量的時(shí)候,需要注意使用范圍。
十一、數(shù)據(jù)類型的轉(zhuǎn)換
如果是范圍大的往范圍小的方向去轉(zhuǎn),比如 double → int,需要強(qiáng)制指定轉(zhuǎn)換的類型。
如果是范圍小的往范圍大的方式去轉(zhuǎn),比如 int → double,數(shù)據(jù)的類型會(huì)自動(dòng)提升。
數(shù)據(jù)類型的大小排列:byte < short < int < long < float < double
十二、運(yùn)算符
+、-、*、/ :加、減、乘、除。
- 號(hào),可以用作加法運(yùn)算,還可以用作“連接符”。
“Hello” + “World” ==> HelloWorld
在使用的時(shí)候,如果連接的對(duì)象一個(gè)是字符串,一個(gè)是數(shù)值類型,最后得到的結(jié)果還是字符串?!盚ello” + 2 = “Hello2”
- 號(hào),還可以作為負(fù)號(hào)使用。
% 取模,簡(jiǎn)單理解就是取余數(shù)。結(jié)果的符號(hào)與被取余數(shù)一致。
++ 自增:當(dāng)運(yùn)算的時(shí)候,會(huì)先對(duì)自己進(jìn)行 +1 操作。
-- 自減:當(dāng)運(yùn)算的時(shí)候,會(huì)先對(duì)自己進(jìn)行 -1 操作。
++/-- 后置:先使用變量原有的值進(jìn)行計(jì)算,計(jì)算完成之后,才會(huì)執(zhí)行自增/自減。
++/-- 前置:先將自身自增/自減后才進(jìn)行運(yùn)算,使用變量值是自增/自減后的值。
擴(kuò)展后的賦值符號(hào),= 賦值符號(hào)主要是將右邊的值賦給左邊。
*= :如果有 a = a * 2; 運(yùn)算,則可簡(jiǎn)寫為:a *= 2;
/= :如果有 a = a / 2; 運(yùn)算,則可簡(jiǎn)寫為:a /= 2;
+= :如果有 a = a + 2; 運(yùn)算,則可簡(jiǎn)寫為:a += 2;
-= :如果有 a = a - 2; 運(yùn)算,則可簡(jiǎn)寫為:a -= 2;
%= :如果有 a = a % 2; 運(yùn)算,則可簡(jiǎn)寫為:a %= 2;
常見(jiàn)的比較運(yùn)算符
<、>、==、===、!=、>=、<=