1 一個(gè)簡(jiǎn)單的Java應(yīng)用程序
public class FirstSample{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
- Java區(qū)分大小寫,如果出現(xiàn)了大小寫拼寫錯(cuò)誤奈辰,程序?qū)o法運(yùn)行
- 關(guān)鍵字public稱為訪問修飾符靶衍,用于控制程序的其他代碼對(duì)這段代碼的訪問級(jí)別
- 關(guān)鍵字class后面緊跟類名邀层,類名必須以字母開頭棕洋,后面可以跟字母和數(shù)字的任意結(jié)合,長(zhǎng)度基本上沒有限制逗扒。但是不能使用Java保留字 (如public或class)作為類名
- 標(biāo)準(zhǔn)的命名規(guī)范為:類名是以大寫字母開頭的單詞古戴,若名字由多個(gè)單詞組成,應(yīng)使用駱駝命名法(又稱駝峰命名法)命名矩肩。
- 源代碼的文件名必須與源代碼的類名相同现恼,并且使用“ .java ”作為擴(kuò)展名
- 運(yùn)行已編譯的程序時(shí),Java虛擬機(jī)將從指定類中的main方法開始執(zhí)行,因此在類的源文件中必須包含一個(gè)main方法叉袍。
- Java中任何方法的代碼都用“{”開始始锚,用“}”結(jié)束
2 注釋
- 三種注釋方法:
1) // (一般使用于單行注釋)
2) 以 / * 開頭,以 * / 結(jié)尾 (一般用于長(zhǎng)篇注釋)
3) 以 / ** 開頭喳逛,以 * / 結(jié)尾 (用于自動(dòng)地生成文檔) - 在Java中瞧捌,/ * * /注釋不能嵌套
3 數(shù)據(jù)類型
- Java是一種強(qiáng)類型語言。這就意味著必須為每一個(gè)變量聲明一種類型润文。
- Java中姐呐,一共有8種基本類型(primitive type),其中有4種整型典蝌,2種浮點(diǎn)類型曙砂,1種用于表示Unicode編碼的字符單元的字符類型char和1種用于表示真值的boolean類型
3.1 整型
-整型用于表示沒有小數(shù)部分的數(shù)值,它允許是負(fù)數(shù)骏掀。
- Java的四種整型:
類型 | 儲(chǔ)存需求 | 取值范圍 |
---|---|---|
int | 4字節(jié) | -2147483648 ~ 2147483647 (正好超過20億) |
short | 2字節(jié) | -32768 ~ 32767 |
long | 8字節(jié) | -9223372036854775808 ~ -9223372036854775807 |
byte | 1字節(jié) | -128 - 127 |
3.2 浮點(diǎn)類型
- Java的兩種浮點(diǎn)類型
類型 | 儲(chǔ)存需求 | 取值范圍 |
---|---|---|
float | 4字節(jié) | 大約±3.40282347E+38F (有效位數(shù)為6~7) |
double | 8字節(jié) | 大約±1.79769313486231570E+308 (有效位數(shù)為15位) |
- double表示這種類型的精度是float類型的兩倍
- float類型的數(shù)值有一個(gè)后綴F或f(如3.14F)
- 沒有后綴F的浮點(diǎn)數(shù)值(如3.14)默認(rèn)為double類型
- 用于表示溢出和出錯(cuò)情況的三個(gè)特殊的浮點(diǎn)數(shù)值:正無窮大鸠澈,負(fù)無窮大,NaN(不是一個(gè)數(shù)字)砖织、
3.3 char類型
- char類型的字面量值需要用單括號(hào)括起來
3.4 Unicode和char類型
- 碼點(diǎn):與一個(gè)編碼表中的某個(gè)字符的代碼值
3.5 boolean類型
- boolean類型有兩個(gè)值:false 和 true款侵,用來判定邏輯條件
- 整型值和布爾值之間不能進(jìn)行互相轉(zhuǎn)換
4 變量
- 在Java中末荐,每個(gè)變量都有一個(gè)類型侧纯。在聲明變量時(shí),變量的類型位于變量名之前甲脏。
- 變量名必須是一個(gè)以字母開頭并由字母或數(shù)字構(gòu)成的序列眶熬。
- 變量名中所有的字符都是有意義的,并且大小寫敏感
- 變量名的長(zhǎng)度基本沒有限制
- 不能使用Java保留字作為變量名
- 可以在一行中聲明多個(gè)變量块请,但不提倡使用這種風(fēng)格娜氏。逐一聲明每一個(gè)變量可以提高程序的可讀性。
4.1 變量初始化
- 聲明一個(gè)變量之后墩新,必須用賦值語句對(duì)變量進(jìn)行顯式初始化贸弥。
- 千萬不要使用未初始化的變量
- 想要對(duì)變量進(jìn)行賦值,就需要將變量名放在等號(hào)左側(cè)海渊,相應(yīng)取值的Java表達(dá)式放在等號(hào)的右側(cè)绵疲。
int vacationDays;
vacationDays = 12;
????也可以將變量的聲明和初始化放在同一行中。
int vacationDays=12;
- 變量的聲明盡可能地靠近變量第一次使用的地方臣疑,這是一種良好的程序編寫風(fēng)格盔憨。
4.2 常量
- 使用關(guān)鍵字final指示常量
- 關(guān)鍵字final表示這個(gè)常量只能賦值一次,一旦賦值之后就不能修改了
- 常量名使用全大寫
- 例子:
public class Constants{
public static void main(String[] args){
final double CM_PER_INCH = 2.54;
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println("Paper size in centimeters:"
+ paperWidth * CM_PER_INCH + "by" +
paperHeight * CM_PER_INCH);
}
}
- 當(dāng)希望某個(gè)常量可以在一個(gè)類中的多個(gè)方法中使用讯沈,通常將這些常量稱為類常量郁岩。可以使用關(guān)鍵字static final設(shè)置一個(gè)類常量。
public class Constants2{
public static final double CM_PER_INCH = 2.54;
public static void main(String[] args){
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println("Paper size in centimeters:"
+ paperWidth * CM_PER_INCH + "by" + paperHeight * CM_PER_INCH);
}
}
5 運(yùn)算符
- 加问慎、減萍摊、乘、除:+如叼、-记餐、*、/
- 取余:%
5.1 數(shù)學(xué)函數(shù)與常量
- 求平方根:Math.sqrt(x)
- 求冪:Math.pow(x)
5.2 數(shù)值類型之間的轉(zhuǎn)換
- 如果兩個(gè)操作數(shù)有一個(gè)是double類型薇正,另一個(gè)操作數(shù)就會(huì)轉(zhuǎn)換為double類型
- 否則片酝,如果其中一個(gè)操作數(shù)是float類型,另一個(gè)操作數(shù)就會(huì)轉(zhuǎn)換為float
- 否則挖腰,如果其中一個(gè)操作數(shù)是long類型雕沿,另一個(gè)操作數(shù)將會(huì)轉(zhuǎn)換為long類型
- 否則,兩個(gè)操作數(shù)都會(huì)被轉(zhuǎn)換為int類型
5.3 強(qiáng)制類型轉(zhuǎn)換
- 在Java中猴仑,允許進(jìn)行這種數(shù)值之間的類型轉(zhuǎn)換
- 當(dāng)然审轮,有可能會(huì)丟失一些信息,在這種情況下辽俗,需要通過強(qiáng)制類型轉(zhuǎn)換(cast)實(shí)現(xiàn)這個(gè)操作疾渣。
- 如果將一個(gè)數(shù)值從一種類型強(qiáng)制轉(zhuǎn)換為另一種類型,而又超過了目標(biāo)類型的表示范圍崖飘,結(jié)果就會(huì)截?cái)喑梢粋€(gè)完全不同的值
5.4 結(jié)合賦值和運(yùn)算符
- 可以在賦值中使用二元運(yùn)算符
x += 4
等價(jià)于
x = x + 4
5.5 自增與自減運(yùn)算符
- 后綴模式: n++ 或 n--
后綴模式在表達(dá)式中會(huì)使用變量原來的值 - 前綴模式: ++n 或 --n
前綴模式在表達(dá)式中會(huì)先完成加1
int m = 7;
int n = 7;
int a = 2 * ++m; //此時(shí)a=16,m=8
int b = 2 * n++; //此時(shí)b=14,n=8
5.6 關(guān)系和boolean運(yùn)算符
- == , !=
- < , > , <= , >=
- && , &
- ? :
條件表達(dá)式 ? 表達(dá)式1 :表達(dá)式2
如果條件為true榴捡,則條件表達(dá)式的值為表達(dá)式1的值;同理當(dāng)條件為false是值為表達(dá)式2的值
x < y? x : y
會(huì)返回x和y中較小的一個(gè)
5.7 位運(yùn)算符
- & 朱浴, | , ∧ (異或) , ~
5.8 括號(hào)與運(yùn)算符級(jí)別
運(yùn)算符 | 結(jié)合性 |
---|---|
[] . () | 從左到右 |
! ~ ++ -- + - () (強(qiáng)制類型轉(zhuǎn)換) new |
從右到左 |
* / % | 從左到右 |
+ - | 從左到右 |
<< >> >>> | 從左到右 |
< <= > >= instanceof | 從左到右 |
= = != | 從左到右 |
& | 從左到右 |
∧ | 從左到右 |
&& | 從左到右 |
?: | 從右到左 |
= += -= *= /= %= &= <<= >>= >>>= ∧ = |
從右到左 |
6 字符串
- 從概念上將吊圾,Java字符串就是Unicode字符序列
- 每個(gè)用雙引號(hào)括起來的字符串都是String類的一個(gè)實(shí)例
6.1 子串
- String 類的substring方法可以從一個(gè)較大的字符串提取出一個(gè)子串
- substring 方法的第二個(gè)參數(shù)是不想復(fù)制的第一個(gè)位置
- substring的工作方式有一個(gè)優(yōu)點(diǎn):容易計(jì)算子串的長(zhǎng)度。
- 例子:s.substring(a,b)
6.2 拼接
- Java 允許使用 + 號(hào)連接(拼接)兩個(gè)字符串
- 當(dāng)將一個(gè)字符串和非字符串的值進(jìn)行拼接是翰蠢,后者會(huì)被轉(zhuǎn)換成字符串
- 如果需要把多個(gè)字符串放在一起项乒,用一個(gè)定界符分隔,可以使用靜態(tài)的join方法
6.3 不可變字符串
- String 類沒有提供用于修改字符串的方法
- 不可變字符串有一個(gè)優(yōu)點(diǎn):編譯器可以讓字符串共享
6.4 檢測(cè)字符串是否相等
- 可以使用equals方法檢測(cè)兩個(gè)字符串是否相等:s.equals(t)
如果字符串s與字符串t相等梁沧,則返回true檀何,否則為false - 不要使用==運(yùn)算符檢測(cè)兩個(gè)字符串是否相等,這個(gè)運(yùn)算符只能確定兩個(gè)字符串是否放在同一個(gè)位置上廷支,如果字符串在同一個(gè)位置上频鉴,那么它們必然相等;但是酥泞,當(dāng)內(nèi)容相同的字符串放在了不同的位置上時(shí)則不相等
6.5 空串 與 null串
- 空串"" 是長(zhǎng)度為0的字符串砚殿,是一個(gè)Java對(duì)象,有自己的串長(zhǎng)度(0)和內(nèi)容(空)
- String變量可以存放一個(gè)特殊的值芝囤,名為null似炎,這表示目前沒有任何對(duì)象與該變量關(guān)聯(lián)
6.6 碼點(diǎn)與代碼單元
- Java字符串由char值序列組成
6.7 String Api
- Java 中的String類包含了50多個(gè)方法
6.8 閱讀聯(lián)機(jī)API文檔
- 文檔地址: docs/api/index.html
6.9 構(gòu)建字符串
- 使用StringBuilder類可以避免每次都構(gòu)建一個(gè)String對(duì)象的問題
- 當(dāng)每次需要添加一部分內(nèi)容時(shí)辛萍,就調(diào)用append方法
- 在需要構(gòu)建字符串就調(diào)用toString方法
7 輸入輸出
7.1 讀取輸入
- 需要通過控制臺(tái)進(jìn)行輸入,首先需要構(gòu)建一個(gè)Scanner對(duì)象羡藐,并與標(biāo)準(zhǔn)輸入流System.in關(guān)聯(lián)
Scanner in = new Scanner(System.in);
- nextLine方法將輸入一行
- 要讀取一個(gè)整數(shù)贩毕,可以調(diào)用nextInt方法
7.2 格式化輸出
- 用于printf的轉(zhuǎn)換符:
轉(zhuǎn)換符 | 類型 | 舉例 |
---|---|---|
d | 十進(jìn)制整數(shù) | 159 |
x | 十六進(jìn)制整數(shù) | 9f |
o | 八進(jìn)制整數(shù) | 237 |
f | 定點(diǎn)浮點(diǎn)數(shù) | 15.9 |
e | 指數(shù)浮點(diǎn)數(shù) | 1.59e+01 |
g | 通用浮點(diǎn)數(shù) | —— |
a | 十六進(jìn)制浮點(diǎn)數(shù) | 0x1.fccdp3 |
s | 字符串 | Hello |
c | 字符 | H |
b | 布爾 | True |
h | 散列碼 | 42628b2 |
tx或Tx | 日期時(shí)間(T強(qiáng)制大寫) | 已經(jīng)過時(shí),應(yīng)當(dāng)改為使用java.time類 |
% | 百分號(hào) | % |
n | 與品臺(tái)有關(guān)的行分隔符 | —— 仆嗦、 |
7.3 文件輸入與輸出
- 想要對(duì)文件進(jìn)行讀取辉阶,就需要用一個(gè)File對(duì)象構(gòu)造一個(gè)Scanner對(duì)象
- 如果文件名中包含反斜杠號(hào),就要在每個(gè)反斜杠號(hào)前在添加一個(gè)反斜杠號(hào)
- 要想寫入文件瘩扼,就需要構(gòu)造一個(gè)PrintWriter對(duì)象
- 不能使用一個(gè)不存在的文件構(gòu)造一個(gè)Scanner谆甜,不能使用一個(gè)不能被創(chuàng)建的文件名構(gòu)造一個(gè)PrintWriter,否則會(huì)發(fā)生異常集绰,Java編譯器認(rèn)為這些異常比“被零除”異常更嚴(yán)重
8 控制流程
8.1 塊作用域
- 塊(即復(fù)合語句)是由一對(duì)大括號(hào)括起來的若干條簡(jiǎn)單的Java語句规辱。
- 塊確定了變量的作用域
- 一個(gè)塊可以潛逃在另一個(gè)塊中
- 不能在嵌套的兩個(gè)塊中聲明同名的變量
8.2 條件語句
- Java條件語句的格式
if(condition) statement
或
if(condition) statement1 else statement2
或if(condition) statement1 else if(condition) statement2 else statement3
這里的條件(condition)必須用括號(hào)括起來
- 使用塊可以在Java程序結(jié)構(gòu)中原本只能放置一條語句的地方放置多條語句
8.3 循環(huán)
- 一般格式:
while(condition) statement
- 當(dāng)條件為true是,while循環(huán)執(zhí)行一條語句(也可以是一個(gè)語句塊)
- 如果開始循環(huán)條件的值就為false栽燕,則while循環(huán)體一次也不執(zhí)行
- do/while:
do statement while(condition)罕袋;
這種循環(huán)語句先執(zhí)行語句(通常是一個(gè)語句塊),在檢測(cè)循環(huán)條件碍岔,然后再重復(fù)語句浴讯,再檢測(cè)條件,以此類推蔼啦。
8.4 確定循環(huán)
- for循環(huán)語句是支持迭代的一種通用結(jié)構(gòu)榆纽,利用每次迭代之后更新的計(jì)數(shù)器或者類似的變量來控制迭代次數(shù)。
- for語句第一部分通常用于對(duì)計(jì)數(shù)器的初始化询吴,第二部分給出每次新一輪執(zhí)行前要檢測(cè)循環(huán)條件掠河,第三部分指示如何更新計(jì)數(shù)器
8.5 多重選擇:switch語句
switch(choice)
{
case 1:
...
break;
case 2:
...
break;
case 3:
...
break;
case 4:
...
break;
defult:
...
break;
}
- switch語句將從與選項(xiàng)值相匹配的case標(biāo)簽處開始執(zhí)行直到遇到break語句亮元,或者執(zhí)行到switch語句的結(jié)束處為止猛计。如果沒有相匹配的case標(biāo)簽,而有default子句爆捞,就執(zhí)行這個(gè)子句奉瘤。
- 注意:如果在case分支語句末尾沒有break語句,那么就會(huì)接著執(zhí)行下一個(gè)case分支語句
- case標(biāo)簽可以是:
1) 類型為char煮甥、byte盗温、short或int的常量表達(dá)式
2) 枚舉常量
3) 從JavaSE 7開始,case標(biāo)簽還可以是字符串字面量
8.6 中斷控制流程語句
- 使用不帶標(biāo)簽break跳出循環(huán)語句
- 使用帶標(biāo)簽的break跳出多重嵌套的循環(huán)語句
9 大數(shù)值
- 如果基本的整數(shù)和浮點(diǎn)數(shù)精度不能滿足需求成肘,那么可以使用java.math包中的兩個(gè)很有用的類:BigInteger和BigDecimal卖局,這兩個(gè)類可以處理包含任何長(zhǎng)度數(shù)字序列的數(shù)值
- BigInteger類實(shí)現(xiàn)了任意精度的整數(shù)運(yùn)算,BigDecimal實(shí)現(xiàn)了任意精度的浮點(diǎn)數(shù)運(yùn)算
- 當(dāng)時(shí)用這兩個(gè)方法時(shí)双霍,不能使用常用的算術(shù)運(yùn)算符(如+和*)砚偶,而需要使用大數(shù)量值類中的add和multiply方法
10 數(shù)組
- 數(shù)組是一種數(shù)據(jù)結(jié)構(gòu)批销,用來存儲(chǔ)同一類型的值的集合
- 聲明數(shù)據(jù)變量時(shí),需要指出數(shù)組類型(數(shù)據(jù)元素類型緊跟[])和數(shù)組變量的名字
例如:
int[] a;
- 數(shù)組的兩種形式:
int[] a;
或
int a[];
- 一旦創(chuàng)建了數(shù)組染坯,就不能再改變它的大芯俊(盡管可以改變每一個(gè)數(shù)組元素)
10.1 for each循環(huán)
- for each循環(huán)可以用來依次處理數(shù)組中的每個(gè)元素(其他類型的元素集合亦可)而不必為指定下標(biāo)值而分心
- for each循環(huán)語句格式
for(variable : collection) statement
-for each循環(huán)語句的循環(huán)變量將會(huì)遍歷數(shù)組中的每個(gè)元素,而不需要下標(biāo)值
10.2 數(shù)組初始化以及匿名數(shù)組
- 在Java中单鹿,提供了一種創(chuàng)建數(shù)組對(duì)象并同時(shí)賦予初始值的簡(jiǎn)寫書寫方式:
如:
int[] smallPrimes = {2,3,5,7,11,13}
請(qǐng)注意掀宋,在使用這種語句時(shí),不需要調(diào)用new
- 甚至還可以初始化一個(gè)匿名的數(shù)組:
new int[] {17,19,23,29,31,37}
這種表示法將創(chuàng)建一個(gè)新數(shù)組并利用括號(hào)提供的值進(jìn)行初始化仲锄,數(shù)組的大小就是初始值的個(gè)數(shù)
10.3 數(shù)組拷貝
- 在Java中劲妙,允許將一個(gè)變量拷貝給另一個(gè)數(shù)組變量,兩個(gè)變量將引用同一個(gè)數(shù)組
- 如果數(shù)組元素是數(shù)值型儒喊,那么多余的元素將被賦值為0是趴;如果數(shù)組元素是布爾型,那么將賦值為false澄惊。相反唆途,如果長(zhǎng)度小于原始數(shù)組的長(zhǎng)度,則只拷貝最前面數(shù)組元素掸驱。
10.4 命令行參數(shù)
- Java應(yīng)用中的String args[] 參數(shù)的main方法表明main方法將接收一個(gè)字符串?dāng)?shù)組肛搬,也就是命令行參數(shù)
10.5 數(shù)組排序
- 要想對(duì)數(shù)值型數(shù)組進(jìn)行排序,可以使用Arrays類中的sort方法:
如:
int [] a = new int[10000];
...
Arrays.sort(a);
10.6 多維數(shù)組
- 多維數(shù)組將使用多個(gè)下標(biāo)訪問數(shù)組元素毕贼,它適用于表示表格或更加復(fù)雜的排序形式
- 一個(gè)簡(jiǎn)單的例子:
double[][] balances;
- 在調(diào)用new對(duì)多維數(shù)組進(jìn)行初始化前不能使用它