- 參考書:《Java語言程序設計與數據結構(基礎篇)》—— 樑勇
文章目錄
一、基礎概念
(1)Java語言規範、JDK、JRE、JVM、IDE
-
Java語言規範:是對Java語言語法和語義的技術定義
-
Java的三個版本
-
J2SE/JavaSE【Java的標準版本】
- 基礎,無論是以後走EE還是ME,SE是必須要精通的。
- J2SE是SUN公司爲java程序員準備的一套“基礎類庫”,這套基礎類庫學習之後,可以完成最基本的操作
- 例如,文件的讀寫、線程的控制…
-
J2EE/JavaEE【Java的企業版本】
- 這是SUN公司爲程序員專門準備的一套“類庫”,這套類庫可以協助程序員完成企業級軟件的開發
- 企業級軟件:OA辦公系統、進銷存系統、超市系統…
-
J2ME/JavaME【Java的微型版本】
- 這是SUN公司爲java程序員專門準備的另一套“類庫”,這套類庫可以協助程序員完成微型設備的嵌入式開發,
- Java最初就是做微型設備嵌入式開發的。
-
-
JDK(Java開發工具包):JDK由一組程序組成,由Oracle配合每個Java版本提供,包括編譯器、調試器和其它工具。每個程序都是從命令行調用的,用於編譯、運行和測試Java程序
-
JRE(Java的運行時環境):運行Java程序的程序。它包括Java虛擬機JVM、Java核心類庫和支持文件。
-
JVM(Java虛擬機):JVM是一個解釋Java字節碼的程序。
.java
後綴的java源文件經過編譯成爲.class
後綴的java字節碼文件,這可以用JVM解釋執行。在不同的平臺上有不同的JVM,他們都能解釋.class
文件,這就實現了跨平臺特性,即 “一次編譯,到處執行” -
IDE(集成開發環境):一個圖形界面軟件,把程序編輯、編譯、構建、調試等集中在一起,便於快速開發程序。如Eclipse、NetBeans等
(2)Java的加載與執行
- 程序員在
xxx.java
文件中編寫源代碼,源代碼必須符合java的語法,這些源代碼就是高級語言。存放源代碼的文件被稱爲Java源文件。 - 使用JDK中自帶的javac.exe命令對以上的java源程序進行編譯。DOS命令:
javac 源文件路徑
。如果語法沒問題,編譯通過,生成字節碼文件xxx.class
- 源文件路徑可以是絕對路徑,也可以是相對路徑。
- 編譯之後,其實java源文件刪除不會影響程序的執行。
- 最好不要將java源文件刪除,因爲程序最終運行效果不是預期效果的時候,需要重新修改java源代碼,然後進行重新編譯生成全新的class字節碼文件,再重新運行字節碼程序。
- 在一個安裝了JVM的平臺上,利用java.exe命令解釋運行java字節碼。DOS命令:
java 類名
- 這個類名是源文件中public class的名字
- 以上程序的執行原理:
- java.exe命令執行會啓動JVM
- JVM啓動之後,馬上啓動“類加載器-Class Loader”
- ClassLoader負責去硬盤的“某個位置”上搜索“類名.class”字節碼文件。
- 找不到這個.class文件,一定會出現程序異常現象。
- 找到了這個.class文件之後將.class文件轉換成"二進制",操作系統可以直接識別二進制,操作系統執行二進制碼和底層的硬件平臺進行交互。
(3)java中的源文件名、類名和main方法
- 一個java源文件當中可以定義多個class
- 一個java源文件當中public的class不是必須的
- 一個class定義在編譯後生成一個xxx.class字節碼文件(如果一個源文件中定義了多個class,就會生成多個字節碼文件)
- 一個java源文件中,最多定義一個
public class
- 如果定義了
public class
,該類名稱必須和java源文件名稱一致。如果此源文件中有main
方法,也必須放在這個public class
裏 - 如果沒有定義
public class
,則不必要求類名和源文件同名。如果有main方法,可以任意放在某個類中
- 如果定義了
main
方法是程序的入口,每一個class當中都可以編寫main方法。- 想執行X.class當中的main方法:
java X
- 如果執行命令
java X
,而X.class
中沒有main方法,會出現運行階段的錯誤。 - 同一個java源文件的不同類中可以包含多個
main
方法。當JVM進行編譯時,會提示選擇其中一個main方法作爲編譯的入口。
- 想執行X.class當中的main方法:
(4)關於packet
- 包PACKET 就是一個文件夾,包下的CLASS互相訪問如一個文件。
- java 編譯器在編譯時,直接根據package指定的信息直接將生成的class 文件生成到對應目錄下。例如package aaa.bbb.ccc 編譯器就將該 .java 文件下的各個類生成到 /aaa/bbb/ccc/ 這個目錄下。
- 可以把Java中的一個package(包)看成一個類庫單元,包內包含有一組類,它們在單一的名稱空間之下被組織在了一起,這個名稱空間就是包名。
- 帶package的java編譯與不帶package的java編譯
二、基礎語法規範
(1)java中的標識符
- 標識符必須由字母、數字、下劃線、美元符號($)組成
- 標識符不能以數字開頭
- 標識符不能是保留字
- 標識符不能是true/false/null
- 標識符可以是任意長度
(2)良好的命名習慣
- 變量/方法:小駝峯 carName
- 類名:大駝峯 CarName
- 常量:全大寫 CAR_NAME
(3)java支持的數據類型
- int / double / byte / short / long / float / char / boolean
- byte:8位有符號數
- short:16位有符號數
- int:32位有符號數
- long:64位有符號數
- float:32位標準IEEE754
- double:64位標準IEEE754
- boolean:取值 true 或 false
(4)顯示錶示數據類型
- 表示二進制:加
前綴0b
或0B
- 表示十六進制:加
前綴0x
或0X
- 浮點數加
後綴f/F
:指出是float型,如3.0f - 浮點數加
後綴d/D
:指出是double型(默認是這個) ,如3.0d
(5)常量
- 用
final
修飾變量定義語句,類似C中const
final double PI = 3.1415926;
(6)基本操作
1. 用Scanner從控制檯讀取輸入
-
System.out
用來表示標準輸出設備;
System.in
用來表示標準輸入設備; -
創建一個
Scanner
類對象來讀取來自System.in
的輸入,如:
Scanner input = new Scanner(System.in);
- Scanner是一個掃描器,我們錄取到鍵盤的數據,先存到緩存區等待讀取,它判斷讀取結束的標示是 空白符,比如空格,回車,tab 等等
- Scanner類在
包java.util
中- 明確導入:
import java.util.Scanner
(導入java.util包中的Scanner類) - 通配導入:
import java.util.*
(導入java.util包中的所有類)- 注意:除非代碼中用到了某個類,否則通配導入中的其他類不會在編譯運行時被讀入,所以性能上沒什麼區別
- 明確導入:
- Scanner中的方法:
-
.nextByte()
:返回一個byte數據 -
.nextShort()
:返回一個Short數據 -
.nextInt()
:返回一個int數據 -
.nextLong()
:… -
.nextFloat()
:… -
.nextDouble()
:… -
.next()
:返回一個字符串,讀到第一個空白符結束,不讀空白符 -
.nextLine()
:返回一個字符串,讀到回車結束,回車也讀走,但是返回的字符串中無回車
-
double r = input.nextDouble();
2. 向控制檯輸出
- 四種常見輸出形式
System.out.println(1111); //換行打印
System.out.print(1111); //不換行打印
System.out.write(2222); //字節輸出
System.out.printf("%+8.3f\n", 3.14);//按格式輸出
- 引用自:Java的常用輸入輸出語句
- System.out.println(); 是最常用的輸出語句,它會把括號裏的內容轉換成字符串輸出到輸出窗口(控制檯),並且換行,當輸出的是一個基本數據類型時,會自動轉換成字符串,如果輸出的是一個對象,會自動調用對象的toString();方法,將返回值輸出到控制檯
- System.out.print(); 與第一個很相似,區別就是上一個輸出後會換行,而這個命令輸出後並不換行。
- System.out.printf(); 這個方法延續了C語言的輸出方式,通過格式化文本和參數列表輸出
3. 基本運算
+ - * / % += -= ++ --
和C的特性一樣- 其中對負數進行
%
計算,相當於對正數用%再取負數 - 對整形進行
/
運算,捨去小數部分
- 其中對負數進行
- 冪運算:用
Math.pow(a,b)
計算a的b次方。pow
方法定義在JAVA API中的Math類
中,可以直接用
4. 類型轉換
- 顯式數字間直接強制轉換:
double y = 3/4.0; //自動轉爲 3.0/4.0
int x = 3
double z = x*4.5; //自動轉爲 3.0*4.5
- 強制類型轉換:
(int)1.7 = 1
(double)1/2 = 1.0/2 = 0.5
- 利用類型轉換進行四捨五入:
- 四捨五入到整數:
(int)(x+0.5)
- 向上四捨五入保留兩位:
(int)(x*100+0.5)/100.0
- 向下四捨五入保留兩位:
(int)(x*100)/100.0
- 四捨五入到整數:
5. 賦值語句
- 賦值時必須數據類型一致,不能自動類型轉換
- 特殊的賦值
//以下兩種寫法等價
System.out.println(x=1); // 1
x = 1 // 2
System.out.println(x);
//以下兩種寫法等價
i = j = k = 1; // 1
k = 1 // 2
j = k
i = j