一、安裝注意
- 安裝路徑中不要有中文,所有Java開發工具安裝目錄最好統一。
- 各安裝目錄含義
目錄名稱 用途 bin JDK的各種指令,比如javac java conf 相關配置檔案 include 與平台相關的頭檔案 jmods 各種子產品 legal 各子產品的授權文檔 lib JDK工具補充jar包 - 配置path路徑後,要重新打開指令提示符視窗才能生效。
- Java通過編寫代碼->編譯代碼->運作程式三個步驟
二、SE基本文法
(一)注釋(在程式指定位置添加的說明資訊,不參與程式執行)
1.單行注釋
// 注釋内容
2.多行注釋
/*
注釋内容
。。。
注釋内容
*/
3.文檔注釋
/**
注釋内容
*/
(二)關鍵字(被賦予特定含義的單詞)
- 關鍵字字母全部是小寫
- 代碼編輯器對關鍵字通常有特殊的顔色标記
- java關鍵字有50個左右(public class static void true false null .....)
(三)常量(程式中不允許修改)
- 字元串常量:雙引号括起來的内容,如"HelloWorld"
- 整數常量:不帶小數的數字,如123,234,321
- 小數常量:帶小數的數字,如12.34 123.4
- 字元常量:單引号括起來的内容,'a'
- 布爾值常量:真假常量
- 空常量:null,空常量不能直接輸出
(四)基本資料類型
java是強類型語言,每種資料都有明确的資料類型,不同資料類型配置設定的記憶體空間大小不同。java的資料類型分為基本資料類型和引用資料類型(類、接口、數組)。
整數(byte short int long)
- byte:占1位元組,取值範圍:-128~127
- short:占2位元組,取值範圍:-32768~32767
- int(預設):占4位元組,取值範圍:-2^31~2^31-1
- long:占8位元組,取值範圍:-2^63~2^63-1
浮點數(float double)
- float:占4位元組,取值範圍:負數:-3.402823E+38 ~ -1.401298E-324 正數:1.401298E-45~3.402823E+38
- double(預設):占8位元組,取值範圍:負數:-1.797693E+308~-4.9000000E-324 正數:4.9000000E-324~1.797693E+308
字元(char)
- char:占2個位元組,取值範圍:0~65535
布爾(boolean)
- boolean:占1個位元組,取值範圍:true false
-
注意事項:1.字元串不是基本類型,而是引用類型。
2. 浮點型可能隻是一個近似值,并非精确的值。
3. 資料範圍與位元組數不一定相關,例如float資料範圍比long更加廣泛,但是float是4位元組,long是8位元組。
4. 浮點數當中預設類型是double。如果一定要使用float類型,需要加上一個字尾F。
如果是整數,預設為int類型,如果一定要使用long類型,需要加上一個字尾L。推薦使用大寫字母字尾。
(五)變量
程式運作中可以改變的量,本質上是記憶體中的一小塊區域。
變量的定義:變量類型 變量名 = 變量值
如:int a = 1;
變量的修改:變量名 = 新值
long l = 10000000000;//會報錯
long l = 10000000000L;//不會報錯
//因為給出的整數預設是int類型
//同理,float類型的變量後面要加F
float f = 13.14F
(六)辨別符
- 給類、方法、變量等起名字的符号
- 由數字、字母、下劃線以及$組成
- 數字不能作為辨別符開頭
- 辨別符不能是關鍵字
- 區分大小寫
- 約定:小駝峰命名法,針對方法、變量命名使用(辨別符是一個單詞時,該單詞首字母大寫,如Age;辨別符有多個單詞時,第一個單詞首字母小寫,其餘單詞首字母大寫,如newAge)。大駝峰命名法,針對類使用(辨別符是一個單詞時,該單詞首字母大寫,如Student;辨別符有多個單詞時,所有單詞首字母大寫,如GoodStudent)
(七)類型轉換
自動類型轉換(隐式轉換,把一個表示資料範圍小的數值或變量指派給另一個表示範圍大的變量,這與資料類型所用的位元組數無關,就比如将小瓶子裡的水倒到大瓶子裡面不會出錯一樣)
- byte->short(char)->int->long->float->double
- byte和short不能直接轉換為char
- boolean是非數值類型,不參與類型轉換
強制類型轉換(顯式轉換,把一個表示資料範圍大的數值或變量指派給另一個表示範圍小的變量,這種轉換也稱為縮小轉換 Narrow Conversion)
- 格式:目标資料類型 變量名 = (目标資料類型)值或變量
- 不建議做強制類型轉換,會出現精度丢失。
注意事項:
- 強制類型轉換有可能發生精度丢失、資料溢出的問題。
- byte/short/char這三種類型都可以發生數學運算,這三種類型在運算時,都會被首先提升成為int類型,然後再計算。哪怕操作的兩個數類型相同,也會先提升為int類型,然後再進行計算。比如byte+byte相加也會都提升為int,然後相加,得出int類型的結果。
- boolean類型不能發生資料類型轉換。
- 對于byte/short/char三種類型而言,如果右側指派的數值沒有超過範圍,那麼javac編譯器會自動隐含地補上一個(byte)(short)(char)實作強轉。
-
short a = 5; short b = 8; short result = a + b;//報錯,a+b得到的還是int類型 short result = 5 + 8;//等号右邊全都是常量,沒有任何變量參與運算,編譯之後,得到的.class檔案位元組碼檔案當中相當于(直接就是):short result = 13; 右側常量範圍沒有操作左側範圍,是以正确,這是“編譯器的常量優化”,一旦表達式當中有變量參與,那麼就不能進行這種優化了。
(八)運算符
- 運算符:進行特定操作的符号。
- 算數運算符:+(加) -(減) *(乘) /(除) %(取餘) 除法得到的商(整數相除隻能得到整數,要想得到小數,必須要有浮點數的參與運算),取餘得到餘數。
- 類型的自動提升:提升規則:整個表達式的類型會自動提升到表達式中最高等級操作數相同的類型(等級順序:byte,short,char->int->long->float->double)。整數與字元相加,會根據ASCII表将字元轉換為int類型的數值。一旦運算當中有不同類型的資料,那麼結果将會是資料類型範圍大的那種。
int a = 10 + 13.14;//會報錯 double a = 10 + 13.14; //不會報錯
- 字元串的“+”操作:此時的“+”是将字元串連接配接符,就是将字元串互相首尾拼接,如"abc" +123 = "abc123"。在“+”操作符的左右兩邊隻要出現字元串,此時“+”就是字元串連接配接符。當連續進行“+”操作時,從左往右,依次執行。
“abc”+123+1; // abc1231 123+1+"abc"; // 124abc
- 指派運算符:= ,擴充的指派運算符:+=(加等于,把左邊和右邊的資料做加法操作,并把結果指派給左邊)
除了+=,擴充的指派運算符還有-=、*=、/=、%=short i = 10; i += 20; //不報錯,擴充的指派運算符底層包含了資料類型轉換。 //上式包含了i=i+20(short + int )=>+号兩邊變量類型均提升為int(int+int)=>得出int的計算結果=>自動調用類型強制轉換,轉為short類型。 i = i + 20;//報錯,因為20為int類型,i為short類型
- 自增自減運算符:++(變量值加1)、--(變量值減1)。
++和--既可以放在變量後面,也可以放在變量前面,單獨使用時,放在前面和放在後面效果一樣。參與操作使用時,++或--若放在變量右邊,則是先将變量參與操作,最後執行++或--的操作。若放在變量左邊,則是先進行++或--操作,将加1或減1後的變量參與操作。最常見的用法都是單獨使用。int i = 10; //單獨使用 i++; // i=11 ++i; // i=12 //參與操作使用 int j = i++; //j=11 int k = ++i;//k=12
- 關系運算符: ==(等于) !=(不等于) >(大于) >=(大于等于) <(小于) <=(小于等于),成立為true,不成立為false。
- 基本邏輯運算符:邏輯與(&,有false則false)、邏輯非(!)、邏輯或(|,有true則true)、邏輯異或(^,相同為false,不同為true)
- 短路邏輯運算符:邏輯與(&&)、邏輯或(||)。作用與基本運算符一樣,但其與基本邏輯運算符的差別為:
即對于短路與運算&&,隻要左邊邏輯值為false,則不再計算右邊表達式的邏輯值。同理,對于短路或運算||,隻要左邊表達式邏輯值為true,則不再計算右邊表達式的邏輯值。即具有短路效果。基本運算符始終都要計算左邊和右邊表達式的值。int i = 10; int j = 20; (i++>100) & (j++>100) //此時i=11 j=21 (i++>100) && (j++>100) //此時i=12 j=21
- 三元運算符 格式:關系表達式 ? 表達式1 : 表達式2。計算方法:關系表達式的值為true,表達式1的值為運算結果;關系表達式的值為false,表達式2的值為運算結果。表達式1的值和表達式2的值應滿足等号左邊的資料類型要求。int result = 3 > 4? 2.5:10(錯誤寫法)。三元運算符使用結果一定要被使用,要麼作為等号左右值,要麼被使用。
(九)資料輸入
//導包
import java.util.Scanner;
//建立對象
Scanner sc = new Scanner(System.in);
//接收資料
int i = sc.nextInt();
(十)ASCII碼表與Unicode碼表
- ASCII碼表:American Standard Code for Information Interchange 美國标準資訊交換碼
- Unicode碼表: 萬國碼。也是數字和符号的對照關系,開頭0-127部分和ASCII完全一樣,但是從128開始包含有更多的字元(包括Emoji表情也有)
- ‘0’-48 ‘A'-65 ’a'-97
(十一)分支語句
1.流程控制語句
- 順序結構
- 分支結構(if,switch)
- 循環結構(for,while,do...while...)
2.分支結構
(1)if 語句
結構1:if (關系表達式) {
語句體;
}
結構2(二者選其一):if (關系表達式) {
語句體;
}else {
語句體;
}
結構3:if (關系表達式1) {
語句體1;
}else if (關系表達式2){
語句體2;
}
... ...
else {
語句體 n+1;
}
(2)switch語句
結構:switch(表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體1;
break;
... ...
default:
語句體n+1;
[break;]
}
notes:
表達式:取值為byte,short,int,char,JDK5以後可以是枚舉,JDK7以後可以是String。從滿足條件的case開始向下執行,直到遇到break或者switch語句整體結束。default表示所有情況都不比對時執行。switch語句中的break一定要加,如果不加,switch語句會從滿足條件的值開始,一直向下不判斷case值直接執行語句,直到遇到break或程式執行結束,即case穿透。
3.循環語句
循環結構的基本組成部分:
- 初始化條件:在循環開始最初執行,且整個循環過程中隻執行一次。
- 條件判斷:若條件成立循環繼續,條件不成立則循環退出。
- 循環體:重複要做的事情。
- 步進語句:每次循環之後要做的掃尾工作。
(1)for語句
結構:for(初始化語句;條件判斷語句;條件控制語句){
循環體語句;
}
(2)while語句
結構:while (條件判斷語句) {
循環體語句;
條件控制語句;
}
(3)do ... while語句
結構:do {
循環體語句;
條件控制語句;
} while (條件判斷語句);
(4)三種循環的差別
for與while先判斷條件,do...while語句先執行一次循環體。
4.跳轉控制語句(continue;break;)
(1)continue:用于循環中,基于條件控制,跳過某次循環内容的執行,繼續下一次執行。
(2)break:用在循環中,基于條件控制,終止循環體内容的執行,也就是說結束目前整個循環體。