大家好,我是KookNut39也是Tommy,在CSDN寫文,寫Java時候我是Tommy,分享一些自己認(rèn)為在學(xué)習(xí)過程中比較重要的東西,致力于幫助初學(xué)者入門,希望可以幫助你進(jìn)步。以前一直更新C/C++方面的知識,今天是我第一次更新Java方面的知識,以后會持續(xù)更新,感興趣的歡迎關(guān)注博主,和博主一起從0學(xué)習(xí)Java知識。大家可以去專欄查看之前的文章,希望未來能和大家共同探討技術(shù)。
Java 是一個完整的平臺 , 有一個龐大的庫 , 其中包含了很多可重用的代碼和一個提供諸如安全性 、跨操作系統(tǒng)的可移植性以及自動垃圾收集等服務(wù)的執(zhí)行環(huán)境。 ——Java核心技術(shù) 卷一(第十版)
在《Java核心技術(shù)》中說到:Java具有令人賞心悅目的語法和易于理解的語義,提供了可移植性,垃圾收集等,還有一個大型的庫,是一種功能齊全的出色語言。對廣大程序設(shè)計人員有著不可抗拒的吸引力。
Java語言在面世的時候就引起轟動,曾登TIOBE 排行榜榜首,在6月的TIOBE榜排名第三,雖說現(xiàn)在所占市場份額有所下滑,但不可置疑的是Java語言依舊是編程語言中的“大戶”。
1.注釋
注釋就是對程序功能的解釋說明。以特定的符號作為標(biāo)記,程序在運(yùn)行過程中不會執(zhí)行注釋。
Java中標(biāo)記注釋的符號分為三種:
(1)單行注釋
單行注釋用'//'標(biāo)記, 其注釋內(nèi)容從 // 開始到本行結(jié)尾。例如:
(2)多行注釋
多行注釋以 /* 開始,以 */ 結(jié)束,把一段內(nèi)容包起來
/*
注釋內(nèi)容
注釋內(nèi)容
*/
(3)文檔注釋
文檔注釋,用于為類,方法(函數(shù)),屬性進(jìn)行說明(放在前面),調(diào)用時鼠標(biāo)放在上面可以顯示這段注釋,語法是以 /** 開始,以 */ 結(jié)束
注意 : 在 Java 中 ,多行注釋不能嵌套 ? 也就是說,當(dāng)一段代碼中包含一個 /* ,在使用多行注釋包裹是就達(dá)不到注釋目的。
2.關(guān)鍵字
關(guān)鍵字是指 Java 中有特殊含義,用于特定用途的單詞
關(guān)鍵字的特點(diǎn)是關(guān)鍵字中所有字母都為小寫
例如:public,private,int等,我就不一 一列舉了
3.保留字
保留字是指現(xiàn)有Java版本尚未使用,但以后版本可能會作為關(guān)鍵字使用的單詞
例如: goto 、const
自己命名變量名或者方法名等標(biāo)識符時要避免使用這些保留字和關(guān)鍵字
4.標(biāo)識符
Java中對各種變量、方法和類等要素命名時使用的字符序列稱為標(biāo)識符。
Java中規(guī)定了定義標(biāo)識符的規(guī)則:
由26個英文字母大小寫,0-9 ,_或$ 組成
數(shù)字不可以開頭。
不可以使用關(guān)鍵字和保留字,但能包含關(guān)鍵字和保留字。
Java中嚴(yán)格區(qū)分大小寫,長度無限制。
標(biāo)識符不能包含空格。
注意:在起名字時,為了提高閱讀性,要盡量有意義,“見名知意”
5.Java數(shù)據(jù)類型
(1)基本數(shù)據(jù)類型
1.數(shù)值型
整數(shù)類型
byte : 一個字節(jié) 表數(shù)范圍 : -128 ~ 127
short : 二個字節(jié) 表數(shù)范圍 : -215 ~ 215-1
int : 四個字節(jié) 表數(shù)范圍 : -231 ~ 231-1
long : 八個字節(jié) 表數(shù)范圍 : -263 ~ 263-1
Java語言的整型常量默認(rèn)為int型,聲明long型常量可以后加**' l ’或' L ’** ,如:
int i = 600; //正確
long l = 8888888888L; //必須在數(shù)字后加l或L否則會出錯
浮點(diǎn)型
float : 單精度 四個字節(jié) 在儲存大型浮點(diǎn)數(shù)組的時候可節(jié)省內(nèi)存空間
double: 雙精度 八個字節(jié) double類型同樣不能表示精確的值
float和double類型不能表示精確的值
float定義時要在數(shù)后加上f或F
double d = 123.4; float f = 234.5f ;
2.布爾型
boolean :布爾值取值的時候只允許取true或false,不能用其他的代替。
? 該類型適于邏輯運(yùn)算,一般用于程序流程控制 。
3.字符型
char : 字符型的值是一個用單引號引起來的單個字符,例如:
char a = 'a';
char b = '中';
Java采用Unicode編碼,一個字符占倆個字節(jié),16位,所以可以用十六進(jìn)制編碼來表示
char a = '\u0061'; //a的Unicode編碼為97
注意:Unicode 轉(zhuǎn)義序列會在解析代碼之前得到處理 。 例如, ' \u0022 + \u0022'(Unicode值\u0022標(biāo)識雙引號)并不是一個由引號包圍加號構(gòu)成的字符串 。 實際上 ,\u0022 會在解析之前轉(zhuǎn)換為 ' ,這會得到也就是一個空串(''+'') 。
(2)引用數(shù)據(jù)類型
類 :最常用的就是String類型(字符串)
接口 : 如:List< E >:列表( E代表泛型 )
? Map<K,V>:雙鏈的集合,以鍵值對形式存儲的,K(鍵)和V(值)都是泛型
數(shù)組:數(shù)組是指存儲在一個連續(xù)的內(nèi)存塊中的相同數(shù)據(jù)類型的元素集合。因為引用的是內(nèi)存地址,所以數(shù)組屬于引用數(shù)據(jù)類型。
6.基本數(shù)據(jù)類型轉(zhuǎn)換
首先boolean型的值不能與其他類型相互轉(zhuǎn)換
默認(rèn)轉(zhuǎn)換
整形,字符型,浮點(diǎn)型的數(shù)據(jù)在混合運(yùn)算中相互轉(zhuǎn)換,轉(zhuǎn)換時遵循以下原則:
容量小的類型默認(rèn)轉(zhuǎn)換為容量大的數(shù)據(jù)類型;數(shù)據(jù)類型按容量大小排序為:
byte,short,char->int->long->float->double
byte,short,char之間不會互相轉(zhuǎn)換,他們?nèi)咴谟嬎銜r首先會轉(zhuǎn)換為int類型
強(qiáng)制轉(zhuǎn)換
容量大的數(shù)據(jù)類型轉(zhuǎn)換為容量小的數(shù)據(jù)類型時,要加上強(qiáng)制轉(zhuǎn)換符,但可能造成精度降低或溢出;使用時要格外注意。
int i = 100;
double d = i;
double d1 = 10.99;
int i1 = (int) d1;
注意: 有多種類型的數(shù)據(jù)混合運(yùn)算時,系統(tǒng)首先自動的將所有數(shù)據(jù)轉(zhuǎn)換成容量最大的那一種數(shù)據(jù)類型,然后再進(jìn)行計算。
7.運(yùn)算
運(yùn)算符
Java 語言支持如下運(yùn)算符:
算術(shù)運(yùn)算符:
運(yùn)算符 | 運(yùn)算 | 范例 | 結(jié)果 |
---|
+ | 正號 | +3 | 3 | - | 負(fù)號 | b=4; -b | -4 | + | 加 | 5+5 | 10 | - | 減 | 6-4 | 2 | ***** | 乘 | 3*4 | 12 | / | 除 (取整) | 5/5 | 1 | % | 取模 (取余) | 7%5 | 2 | ++ | 自增(前):先運(yùn)算后取值 ; 自增(后):先取值后運(yùn)算 | a=2;b=++a; a=2;b=a++; | a=3;b=3 a=3;b=2 | - - | 自減(前):先運(yùn)算后取值 ; 自減(后):先取值后運(yùn)算 | a=2;b=- -a a=2;b=a- - | a=1;b=1 a=1;b=2 | + | 字符串相加 | “He”+”llo” | “Hello” |
字符串連接運(yùn)算符:+ ;
關(guān)系(比較)運(yùn)算符: >,<,>=,<=,==,!= ;
邏輯運(yùn)算符:
? &—邏輯與 | —邏輯或 !—邏輯非
? && —短路與 || —短路或 ^ —邏輯異或
a | b | a&b | a|b | !a | a^b | a&&b | a||b |
---|
true | true | true | true | false | false | true | true | true | false | false | true | false | true | false | true | false | true | false | true | true | true | false | true | false | false | false | false | true | false | false | false |
異或就是左右的值一樣時就是false,追求一個“異”字。
我們可以看到用邏輯與和短路與計算的值是相同的,那它們的區(qū)別在哪呢?
邏輯與:會把符號倆邊的表達(dá)式都計算一邊,然后判斷
短路與:因為與運(yùn)算符號倆邊的表達(dá)式有一個false就返回false,所以如果計算了符號左邊的表達(dá)式是false,就不會計算符號右邊的表達(dá)式,直接返回false,如果左邊的是true才會計算右邊
邏輯或和短路或同理,短路或左邊的表達(dá)式是true時就不會計算右邊,直接返回true
public static void main(String[] args){
int a = 1;
int b = 2;
if(++a>1||++b>4){
System.out.println(a);
System.out.println(b);
}
System.out.println('-------------');
a = 1; //讓值回到初始值
b = 2;
if(++a>1|++b>4){
System.out.println(a);
System.out.println(b);
}
System.out.println('-------------');
a = 1;
b = 2;
if(++a>3&&++b>4){
} else {
System.out.println(a);
System.out.println(b);
}
System.out.println('-------------');
a = 1;
b = 2;
if(++a>3&++b>4){
}else {
System.out.println(a);
System.out.println(b);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
輸出如下:
賦值運(yùn)算符:
運(yùn)算符 | 用法舉例 | 等效的表達(dá)式 |
---|
+= | a += b | a = a+b | -= | a -= b | a = a-b | *= | a *= b | a = a*b | /= | a /= b | a = a/b | %= | a %= b | a = a%b |
位運(yùn)算:
| 功能 |
---|
<< | 空位補(bǔ)0,被移除的高位丟棄,空缺位補(bǔ)0。 | >> | 被移位的二進(jìn)制最高位是0,右移后,空缺位補(bǔ)0; 最高位是1,空缺位補(bǔ)1。 | >>> | 被移位二進(jìn)制最高位無論是0或者是1,空缺位都用0補(bǔ)。 | & | 二進(jìn)制位進(jìn)行&運(yùn)算,只有1&1時結(jié)果是1,否則是0; | | | 二進(jìn)制位進(jìn)行 | 運(yùn)算,只有0 | 0時結(jié)果是0,否則是1; | ^ | 相同二進(jìn)制位進(jìn)行 ^ 運(yùn)算,結(jié)果是0;1^1=0 , 0^0=0 不相同二進(jìn)制位 ^ 運(yùn)算結(jié)果是1。1^0=1 , 0^1=1 | ~ | 正數(shù)取反,各二進(jìn)制碼按補(bǔ)碼各位取反 負(fù)數(shù)取反,各二進(jìn)制碼按補(bǔ)碼各位取反 |
運(yùn)算順序
單目>算數(shù)運(yùn)算符>移位>比較>按位>邏輯>三目>賦值
單目運(yùn)算符(一元運(yùn)算符,即一個變量):+,-,++,–
算數(shù)運(yùn)算符:+,-,*,/,%
移位運(yùn)算符:<<,>>
關(guān)系運(yùn)算符:>,<,>=,<=,==,!=
位運(yùn)算符:&,|,~,^,
邏輯運(yùn)算符:&&,||
三目運(yùn)算符:表達(dá)式1?表達(dá)式2:表達(dá)式3;
賦值運(yùn)算符:= 等
8.控制臺的輸入 / 輸出
輸入
使用Scanner類取得一個字符串或一組數(shù)字
在使用Scanner類對象時,需要在文件頭帶入 java.util.Scanner; 把類導(dǎo)入寫法為:
import java.util.Scanner;
在創(chuàng)建一個Scanner對象時需要傳入一個System.in參數(shù)給構(gòu)造函數(shù),因為實際上是System.in在取得用戶輸入。Scanner的next()方法用以 取得用戶輸入的字符串;nextInt()將取得的輸入字符串轉(zhuǎn)換為整數(shù)類型;nextFloat()轉(zhuǎn)換成浮點(diǎn)型;nextBoolean()轉(zhuǎn) 換成布爾型。
//寫在方法中
System.out.print('輸入:');
Scanner scan = new Scanner(System.in);
String read = scan.next ();
System.out.println('輸入數(shù)據(jù):'+read);
輸出
可以使用 System.out . print ( x ) 將數(shù)值 x 輸出到控制臺上。 這條命令將以x 對應(yīng)的數(shù)據(jù)類型所允許的最大非 0 數(shù)字位數(shù)打印輸出 X 。 System.out . println ( x ) ,如果將print改為println就會在輸出完之后進(jìn)行換行。 我在這里提到的輸入/輸出都是最基礎(chǔ)的,還有文件的輸入/輸出等該知識更深層次的理解會在日后慢慢積累并分享,盡情期待。
9.控制語句
1. if-else語句
if(條件){
//真執(zhí)行語句
}else {
//假執(zhí)行語句
}
條件必須是一個返回布爾值的表達(dá)式
2. switch語句:
多分支選擇語句,根據(jù)表達(dá)式的值,來執(zhí)行多個操作中的一個。
switch (表達(dá)式){
case V:
//語句1
break ;
case V1:
//語句N
break ;
default :
//如果沒有上面的選項
}
表達(dá)式(變量)可以byte、short、int、char、枚舉類型。jdk 7以后,可以使用String類型;
- case語句后面只能使用常量表達(dá)式;
- case后的值不能重復(fù);
- 每個case之后都必須由一個break語句,不然就達(dá)不到選擇執(zhí)行的效果了。如果沒有,就會一直往下執(zhí)行下一個case中的語句
- 當(dāng)表達(dá)式的值與任一case子句中的值都不匹配時,將執(zhí)行default后面的語句,如果沒有default子句,則程序直接跳出switch語句。
3.循環(huán)語句
循環(huán)語句功能
在某些條件滿足的情況下,反復(fù)執(zhí)行特定代碼的功能
循環(huán)語句的四個組成部分:
- 循環(huán)變量的初始化
- 循環(huán)條件部分
- 循環(huán)體部分
- 循環(huán)變量的更新
循環(huán)語句分類:
1. while 循環(huán)
while 語句為如下形式:
執(zhí)行過程:先判斷邏輯表達(dá)式的值。若=true,則執(zhí)行其后面的語句,然后再次判斷條件并反復(fù)執(zhí)行,直到條件不成立為止
2. do/while 循環(huán)
do {
//語句
}while (邏輯表達(dá)式);
執(zhí)行過程:先執(zhí)行語句,再判斷邏輯表達(dá)式的值,若為true,再執(zhí)行語句,否則結(jié)束循環(huán)。
3. for 循環(huán)
for (表達(dá)式1;表達(dá)式2;表達(dá)式3){
//語句
}
執(zhí)行過程:首先計算表達(dá)式1,接著執(zhí)行表達(dá)式2,若表達(dá)式2的值 =true,則執(zhí)行循環(huán)語句,接著計算表達(dá)式3,再判斷表達(dá)式2的值;依此重復(fù)下去,直到表達(dá)式2的值=false.
4. break & continue
break 語句用于終止某個語句塊的執(zhí)行。用在循環(huán)語句體中,可以強(qiáng)行退出循環(huán);
public static void test(){
int stop = 4;
for (int i = 1; i <= 10; i++) {
//當(dāng)i等于stop時,退出循環(huán)
if (i == stop){
break;
}
System.out.println(' i= ' + i);
}
}
輸出為:
continue 語句用在循環(huán)語句體中,用于終止某次循環(huán)過程,跳過循環(huán)體中continue 語句下面未執(zhí)行的循環(huán),開始下一次循環(huán)過程;
public static void test(){
int stop = 4;
for (int i = 1; i <= 10; i++) {
//當(dāng)i等于stop時,跳過當(dāng)次循環(huán)
if (i == stop){
continue;
}
System.out.println('i = ' + i);
}
}
輸出為:
10. 方法
Java的方法類似于其它語言的函數(shù),方法是解決一類問題的步驟的有序組合,方法包含于類中.
方法的創(chuàng)建,聲明格式:
[訪問權(quán)限修飾符 修飾符…] [返回值類型] 方法名(形式參數(shù)類型 參數(shù)名){
Java語句;… … …
//如果有返回值就由return語句
[return 返回值;]
}
修飾符:告訴編譯器如何調(diào)用該方法。定義了該方法的訪問類型。
形式參數(shù): 在方法被調(diào)用時用于接收外界輸入的數(shù)據(jù)。
實參:調(diào)用方法時實際傳給方法的數(shù)據(jù)。
返回值:方法在執(zhí)行完畢后返還給調(diào)用它的環(huán)境的數(shù)據(jù)。
返回值類型:事先約定的返回值的數(shù)據(jù)類型,如無返回值,必須給出返回值類型void。
調(diào)用方法:
類的對象名.該類下面的方法名(實參列表)
實參的數(shù)目、數(shù)據(jù)類型和次序必須和所調(diào)用方法聲明的形參列表匹配,
11. return語句
用于從當(dāng)前執(zhí)行的方法中退出, 返回到調(diào)用該方法的語句處繼續(xù)執(zhí)行。
有兩種格式:
-
return 表達(dá)式; //將表達(dá)式的值返回 -
return; //不返回任何值,當(dāng)方法說明中用void聲明無返回值時, 可以使用這種格式,有時可省略
我是一個Java的初學(xué)者,文中如有不當(dāng)之處,還希望各路大佬批評指點(diǎn),我會及時 參考書籍:Java核心技術(shù) 卷1(第十版)
|