Java基礎(適合新學者和架構師閱讀)
近日為了複習CoreJava故自己收集了很多書籍彙編成以下java最核心的內容:參考出處(Java從入門到精通,Java學習手冊(app))備註:我不留對別人毫無用處的博文,所以如果對你有用處請評論。否則,一個月過後沒有超過500我會自行刪除。
Java的誕生與發展歷史
Java的出生地:SUN Microsystems Inc.
SUN:Stanford University Network
Java之父:James Gosling(詹姆斯·高斯林)
1995年釋出Java第一版
Java發展歷史中的幾個重要版本:
l Java 1.2 從該版本開始,把Java分成Java SE
l Java 5 2004年9月30日18:00PM,J2SE 1.5釋出,成為Java語言發展史上的又一里程碑。為了表示該版本的重要性,J2SE 1.5更名為Java SE 5.0
l Java 6 Java的各種版本更名,以取消其中的數字"2":J2EE更名為Java EE,J2SE更名為Java SE,J2ME更名為Java ME。
2009年04月20日,甲骨文74億美元收購Sun。取得java的版權。
1.2 Java技術體系
Java技術分為三個體系:
l Java SE(J2SE)(Platform Standard Edition
l Java EE(J2EE)(Java 2 Platform,Enterprise Edition,java平臺企業版)開發面向Internet的應用程式
l Java ME(J2ME)(Java 2 Platform Micro Edition,java平臺微型版)開發運行於智慧裝置的程式。
1.3 Java語言的特點
面向物件(OOP)
跨平臺
安全健壯
沒有指標操作
垃圾自動回收機制
多執行緒
分散式
1.4 Java程式的執行機制
1.4.1 JVM與跨平臺
Java程式不是直接在作業系統之上執行,而是運行於JVM
針對不同的作業系統開發相應的JVM,Java程式運行於不同的JVM之上,因此Java程式可以在不同修改的情況下運行於不同的作業系統之上,從而實現了所謂的跨平臺。
Java原始碼(.java檔案)經編譯器編譯成位元組碼(.class檔案),JVM本質上就是一個負責解釋執行Java位元組碼的程式。
JVM執行Java程式的過程:
l 載入.class檔案
l 管理並分配記憶體
l 執行垃圾收集
1.4.2 JVM、JRE、JDK
JVM:Java虛擬機器
JRE:Java執行時環境(JVM+類庫) //後面編寫程式碼時在強調類庫
JDK:Java開發工具包(JRE+編譯工具)
JDK的全稱:Java Development kit
提示:
執行Java程式只需要安裝JRE,開發Java程式則需要安裝JDK。
1.5 java開發環境安裝、配置
1.5.1 安裝JDK
1.5.2 配置環境變數
1.5.2.1 PATH
目的:在任意路徑下能夠直接執行相關命令。
原理:在命令列中執行某個命令時,首先在當前路徑下查詢,如果找不到則到PATH配置的各個路徑下查詢。
配置細節:
JAVA_HOME:C:\Program Files\Java\jdk1.6.0
PATH:%JAVA_HOME%\bin; 或
C:\Program Files\Java\jdk1.6.0\bin; //bin = binary(二進位制)
環境變數之間使用;分割
1.5.2.2 CLASSPATH
(1)目的:在任意路徑下能夠找到要執行的.class檔案。
(2)CLASSPATH:
.;
C:\Program Files\Java\jdk1.6.0\lib\dt.jar; //lib = library(庫)
C:\Program Files\Java\jdk1.6.0\lib\tools.jar;
從其他目錄下找class檔案
(3)注意:Java1.4之後不需要配置上述CLASSPATH環境變數,預設從上述路徑下查詢.class檔案。
1.6 java開發流程
1.6.1 結構化程式設計與面向物件程式設計
結構化程式設計:函式
面向物件程式設計:類
java類的基本結構:變數 +方法
1.6.2 編寫和執行Java程式的三個步驟
l 編寫原始碼,儲存到原始碼檔案中,例如 HelloWorld.java
l 編譯原始碼,例如javac HelloWorld.java
l 執行位元組碼,例如java HelloWorld
案例1.1 HelloWorld
1.6.3 原始檔與class檔案
在Java中原始檔的名稱必須是檔案中主類的名稱,副檔名必須為.java。原始檔中可以包含多個類,但是最多隻能有一個類使用public修飾,使用public修飾的類就是主類。在Java中,原始檔還被作為編譯單元,即一個原始檔就是一個編譯單元。
編譯器會為原始碼中的每個類生成一個.class檔案,.class檔案的名稱是類的名稱,副檔名為.class。
1.6.4 main()方法
方法名:只能是main,不能是Main等形式。
修飾符:public static void 三個缺一不可,多一個不行
引數:
1、引數型別為字串陣列
2、引數名稱只要符合Java中識別符號命名要求即可
3、引數宣告的兩種方式:String[] args,或 String args[]
案例1.2 列印輸出
1、列印:個人資訊
姓名:xxx
年齡:xx
性別:x
2、列印一首古詩
1.7 常用命令
1.7.1 Dos命令
命 令 |
功 能 |
碟符: |
轉換到指定分割槽 |
cd 目錄 |
進入指定的目錄 |
dir |
檢視當前路徑下的目錄和檔案 |
cd.. |
進入上一級目錄,..表示上一級目錄 |
cls |
清屏 |
1.7.2 Java命令
javac //後跟檔名稱,需要包含副檔名.java
javac -d //指明存放類檔案的位置
java //後跟類名
javadoc //生成註釋文件
第2單元 識別符號、關鍵字、資料型別
2.1 註釋
註釋的三種形式:單行註釋、多行註釋、文件註釋
文件註釋(documentation comment)以“/**”開始,以“*/”結束。使用文件註釋可以將關於程式的資訊嵌入到程式自身中。
javadoc命令可以文件註釋中的內容提取出來,將其放入到一個HTML檔案中。文件註釋方便了程式的文件化。
2.2 分隔符、程式碼塊
每行功能程式碼以;作為結束符號
空格沒有實際意義,可以利用空格無意義,將程式碼合理縮排,易讀
{}包含的程式碼稱之為程式碼塊, 例如類if(){}、方法{}、類{}等等
2.3 識別符號
2.3.1 識別符號的概念
Java中類、方法和變數的名稱,稱之為識別符號。
2.3.2 識別符號的語法要求
(1)以字母、數字、_或$組成
(2)不能以數字開頭
(3)不能使用java的關鍵字和保留字
注意:
1、識別符號的長度沒有限制
2、Java是大小寫敏感的,所有識別符號區分大小寫
2.3.2 識別符號的命名規範(駝峰)
Java中的識別符號通常是由多個英文單詞構造,每個單詞除了首字母外其他字母小寫。
2.3.2.1 大駝峰
第一個單詞的首字母大寫。以大寫字母開頭,用於類名、介面名
class Accoun {…} //類名
class HelloWorld{…} //類名
interface AccountBase {…} //介面名
2.3.2.2 小駝峰
第一個單詞的首字母是小寫,其他單詞的首字母大寫。以小寫字母或單詞開頭,用於變數名、方法名
String studentName; //變數名
String getStudentName() {…} //方法名
2.3.2.3 常量命令規範
常量是使用final修飾的儲存單元。(最終的)
全部為大寫字母表示
final public int DAYS_WEEK = 7;
final public double PI = 3.1415926;
2.3.3 識別符號案例
演示識別符號的要求、規範、常量的定義
abc a+b my_city $money class _78
myName _come my&bb 2name public
name#1 age- name3 class5 _$ $a
2.4 Java的關鍵字
2.4.1 Java中的全部關鍵字
目前定義了50個關鍵字
abstract |
continue |
for |
new |
switch |
assert |
default |
goto |
package |
synchronized |
boolean |
do |
if |
private |
this |
break |
double |
implements |
protected |
throw |
byte |
else |
import |
public |
throws |
case |
enum |
instanceof |
return |
transient |
catch |
extends |
int |
short |
try |
char |
final |
interface |
static |
void |
class |
finally |
long |
strictfp |
volatile |
const |
float |
native |
super |
while |
Java保留了const和goto關鍵字,但是沒有使用。Java還保留了下面這些關鍵字:true、false和null。這些關鍵字是Java定義的數值。
2.4.2 目前已經接觸到的關鍵字
public static void class
2.5 基本資料型別
2.5.1 資料型別的分類
注意:基本資料型別也可以分成兩大類:數值型、布林型
2.5.2 整型
Java不支援無符號的、只是正值的整數。
2.5.2.1 型別、寬度、範圍
名 稱 |
寬 度 |
範 圍 |
long |
64/8 |
-9 223 372 036 854 775 808至9 223 372 036 854 775 807 |
int |
32/4 |
-2 147 483 648至2 147 483 647 大約21億 |
short |
16/2 |
-32 768至32 767 |
byte |
8/1 |
-128至127 |
2.5.2.2 字面值
(1)整數字面值預設是int型別
(2)將字面值賦給byte或short變數時,如果字面值位於目標型別的範圍之內,就不產生錯誤。
(3)大寫或小寫的L明確地標識其型別為long
(3)在字面值可以包含下劃線,例如1_000_000_000
(4)十進位制、八進位制(0)、十六進位制(0X/0x)、二進位制(0B/0b)
案例2.1 整型案例
2.5.3 浮點型
浮點數,也稱為實數(real number),當計算需要小數精度的表示式時使用。
2.5.3.1 型別、寬度、範圍
名稱 |
寬度(位) |
大致範圍 |
double(雙精度) |
64/8 |
4.9e-324~1.8e+308 |
float (單精度) |
32/4 |
1.4e-045~3.4e+038 |
2.5.3.2 浮點數字面值
(1)預設為double型別,為了指定float字面值,需要使用字尾F或f
(2)科學計數法。例如6.022E23、314159E-5、2e+100
案例2.2 浮點型案例
2.5.4 字元型
2.5.4.1 char型別與字元編碼
(1)char是16位,Java在內部使用16位的整數表示字元(Unicode編碼),char型別的範圍0~65536。//全世界基本的語言符號基本都包含了
(2)char也可以用作整數型別,可以將整型字面值賦給char型別的變數,可以在char型別上執行算術運算。
(3)26個小寫字母、26個大寫字母、以及10個數字0-9,其編碼是連續的。
2.5.4.2 char型別字面值
(1)字元型字面值使用單引號中的字元表示,例如’a’。
(2)轉義字元
轉義序列 |
描 述 |
\ddd |
八進位制字元(ddd) |
\uxxxx |
十六進位制Unicode字元(xxxx) |
\’ |
單引號 |
\” |
雙引號 |
\\ |
反斜槓 |
\r |
回車符 |
\n |
新行符(也稱為換行符) |
\f |
換頁符 |
\t |
製表符 |
\b |
回格符 |
字串型別:
字串型別是String,String是類,所以是引用型別。字串字面值是使用雙引號包圍起來的內容。
案例2.3 字元型案例
2.5.5 布林型
(1)boolean型別表示邏輯值,它只能是true或false。
(2)boolean型別的值與整數0和1沒有任何關係
案例2.4 boolean型別
2.6 變數與常量
2.6.1 變數的宣告與賦值
說明:變量表示儲存單元,變數名就是儲存單元的名稱,變數初始化之後就可以通過變數名訪問儲存單元。
1、變數宣告 int i; String str; //還沒有分配儲存空間
2、初始化(賦初值) i=10; str=”abc”; //初始化之後就分配了儲存空間
3、宣告並賦值 int i = 10; String str=”abc”; //宣告的同時進行初始化
注意:變數在使用之前必須先初始化(賦初值)。
2.6.2 常量的宣告與賦值
宣告常量需要使用final關鍵字,如,final double PI = 3.1415926。
常量通常在宣告時賦值,並且賦值之後其值不能改變
常量識別符號通常全部為大寫。
案例 2.5 常量案例
2.6.3 例項變數與區域性變數
根據變數宣告的位置,變數可以分為例項變數和區域性變數。
2.6.3.1 例項變數及作用範圍
在類的{}內直接定義的變數,稱為例項變數或成員變數。
作用範圍:整個類中都可以使用
例項變數在建立物件時會自動初始化,並有初始值(預設值)
byte/short/int:0
long:0L
float:0.0f
double:0.0
boolean:false
引用型別:null
2.6.3.2 區域性變數及作用範圍
在方法中或程式碼塊{}中定義的變數,稱之為區域性變數。
作用範圍:直接包含它的{}內有效
區域性變數不會自動初始化,沒有預設值,使用之前必須要初始化。
案例2.6 變數案例
2.7 型別轉換
當將一種型別的變數或字面值賦給另外一種型別的變數時,就會發生型別轉換。
Java中型別轉換分自動型別轉換和強制型別轉換。
總結:對於數值型別,如果目標型別的範圍包含了原型別的範圍,則可以自動轉換,否則就需要強制轉換。
2.7.1 自動型別轉換
型別相容、小型別轉換為大型別
byte-->int short--->int int--->long
long--->float float--->double
String--->Object (子類--->父類)
2.7.2 強制型別轉換
大型別轉換為小型別
int-->byte int--->short long--->int
float--->long double--->float
Object--->String
案例2.7 型別轉換案例
2.8 面向物件初步(瞭解)
2.8.1 瞭解類和物件
2.8.2 建立物件
2.9 原始型別和引用型別(瞭解)
原始型別變數的賦值
int x = 10; int y = x; (將x的值10賦給y,x和y沒有任何關聯關係,改變值互不影響)
引用型別變數的賦值
Teacher teacher = new Teacher(“John Smith”, 30, 10000);
or
Teacher teacher1, teacher2;
teacher1= new Teacher(“John Smith”, 30, 10000);
teacher2 = teacher1;
teacher2=teacher1; 將teacher1的引用的地址值賦給teacher2,這樣兩個引用指向同一個堆記憶體地址,所以任何一個修改屬性,另一個也變化
第3單元 運算子&表示式&選擇結構
3.1 運算子
可以將大部分Java運算子劃分為四組:算術運算子、位運算子、關係運算符以及邏輯運算子。
3.1.1 賦值運算子
賦值運算子有一個有趣的特性:它允許建立賦值鏈。例如,分析下面的程式碼段:
int x, y, z;
x = y = z = 100; // set x, y, and z to 100
3.1.2 算術運算子
算術運算子用於數學表示式,其使用方法與在代數中的使用方法相同。
運算子 |
結 果 |
+ |
加法(也是一元加號) |
- |
減法(也是一元負號) |
* |
乘法 |
/ |
除法 |
% |
求模 |
+= |
加並賦值 |
-= |
減並賦值 |
*= |
乘並賦值 |
/= |
除並賦值 |
%= |
求模並賦值 |
++ |
自增 |
-- |
自減 |
需要注意的地方:
(1)當將除法運算子用於整數型別時,其結果不會包含小數部分。
(2)求模運算子%,返回除法操作的餘數。它既可以用於浮點數也可以用於整數。可以用於判斷一個整數是否是奇數、偶數、是否是某個數的倍數。
案例3.1 基本算數運算子演示
名稱:BasicMathDemo
演示算術運算,特別注意是整除,演示除0效果
案例3.2 求模運算子案例1
專案名稱:ModulusDemo
演示求模運算子的運算規則和應用:
判斷一個數是奇數還是偶數
判斷一個數是否是5的倍數…
案例3.3 求模運算子案例2
名稱:GetDigital
輸入一個三位數,分別獲取個、十、百位上的數字。123
3.1.2.1 算術與賦值複合運算子
int a = 1;
a += 2; //相當於a = a+2;
(1)對於所有的二元算術運算,都有相應的複合賦值運算子。
(2)複合賦值運算子的效率更高。所以在專業的Java程式中,會經常看到複合賦值運算子。
案例3.4 複合運算子案例:
名稱:OpEqualsDemo
演示覆合運算子的規則。
3.1.2.2 自增與自減
(1)自增運算子將其運算元加1。自減運算子將其運算元減1。
(2)自增與自減分字首形式與字尾形式。++、--
字首形式:
int i = 10;
int a = ++ i; //等同於 i++; int a = i;所以a=11,i= 11
字尾形式:
int j = 10;
int b = j++; //等同於 int b = j; j++; 所以b=10,j = 11
案例3.5 自增與自減運算子案例
名稱:IncDecDemo
重點演示字首與字尾形式的區別。
3.1.2.3 表示式
(1)表示式的概念:由運算元與運算子組成 j++; a+b;
(2)表示式的求值:表示式是有值的,需要注意表示式值的型別
(3)表示式中的型別提升規則:
表示式的型別會自動提升為所有運算元的最大型別。
對於運算元全為非long型別整數的表示式,其型別會自動提升為int。
案例3.6 表示式求值案例
名稱:ExpressionDemo
演示型別自動提升
3.1.3 關係運算符
關係運算符也稱為比較運算子
運算子 |
結 果 |
== |
等於 |
!= |
不等於 |
> |
大於 |
< |
小於 |
>= |
大於等於 |
<= |
小於等於 |
(1)關係運算的結果為boolean型數值。
(2)關係運算符最常用於if語句和各種迴圈語句中的控制表示式。
案例3.7 關係運算符應用演示
CompareOperatorDemo
判斷一個字元是否是小寫字母、大寫字母、數字
3.1.4 邏輯運算子
布林邏輯運算子,只能操作boolean型運算元。
運算子 |
結 果 |
&& |
邏輯與(短路形式) |
|| |
邏輯或(短路形式) |
^ |
邏輯異或 |
! |
邏輯一元非 |
& |
邏輯與 |
| |
邏輯或 |
布林邏輯運算規則:
運算元 |
邏輯運算及結果 |
||||
A |
B |
A || B |
A && B |
!A |
A ^ B |
false |
false |
false |
false |
true |
false |
true |
false |
true |
false |
false |
true |
false |
true |
true |
false |
true |
true |
true |
true |
true |
true |
false |
false |
運算規則說明:
對於||,只要有一個運算元為true,則結果為true;
對於&&,只要有一個運算元為false,則結果為false。
對於^,兩個運算元不同,則結果為true,否則結果為false。
注意:&&和||,
這兩個運算子是所謂短路形式的邏輯運算子。假如單獨根據左運算元就能確定表示式的結果,那麼就不會計算右運算元的值。
案例3.8 邏輯運算案例
BoolLogicDemo
演示邏輯運算子的運算子規則