建設(shè)網(wǎng)站去工信部備案需要什么資料網(wǎng)站seo的內(nèi)容是什么
Java基礎(chǔ)編程
- Java 基礎(chǔ)語法
- Java 標識符
- 變量
- 變量的類型
- Java 基本數(shù)據(jù)類型
- 基本數(shù)據(jù)類型轉(zhuǎn)換
- 運算符
- 常見運算符
- 運算符的優(yōu)先級
- 程序流程控制
- 分支語句
- 循環(huán)結(jié)構(gòu)
- 常用的循環(huán)結(jié)構(gòu)
- 循環(huán)的嵌套
- break 和 continue 關(guān)鍵字
- 數(shù)組
- 一維數(shù)組
- 多維數(shù)組的使用
- Arrays 工具類的使用
- 數(shù)組中常見的異常
Java 基礎(chǔ)語法
Java 標識符
??Java 對各種變量、方法和類等要素命名時使用的字符序列稱為 標識符,定義合法標識符規(guī)則如下:
- 由 26 個英文字母大小寫、0-9、_ 或 $ 組成
- 數(shù)字不可以開頭
- 不可以使用關(guān)鍵字和保留字,但能包含關(guān)鍵字和保留字
- Java 中嚴格區(qū)分大小寫,長度無限制
- 標識符不能包含空格
??Java 中的名稱命名規(guī)范如下:
- 包名使用多單詞組成時所有字母都小寫(
xxxyyyzzz
) - 類名、接口名使用多單詞組成時,所有單詞的首字母大寫(
XxxYyyZzz
) - 變量名、方法名使用多單詞組成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫(
xxxYyyZzz
) - 常量名的所有字母都要大寫,多單詞時每個單詞用下劃線連接(
XXX_YYY_ZZZ
) - 為了提高閱讀性,要見名知意
- 不建議使用漢字命名
關(guān)于 Java 關(guān)鍵字和保留字
(一)Java 關(guān)鍵字
- 用于定義數(shù)據(jù)類型的關(guān)鍵字:
class
、interface
、enum
、byte
、short
、int
、long
、float
、double
、char
、boolean
、void
- 用于定義流程控制的關(guān)鍵字:
if
、else
、switch
、case
、default
、while
、do
、for
、break
、continue
、return
- 用于定義訪問權(quán)限修飾符的關(guān)鍵字:
private
、protected
、public
- 用于定義類、函數(shù)、變量修飾符的關(guān)鍵字:
abstract
、final
、static
、synchronized
- 用于定義類與類之間關(guān)系的關(guān)鍵字:
extends
、implements
- 用于定義建立實例及引用實例,判斷實例的關(guān)鍵字:
new
、this
、super
、instanceof
- 用于異常處理的關(guān)鍵字:
try
、catch
、finally
、throw
、throws
- 用于包的關(guān)鍵字:
package
、import
- 其他修飾符關(guān)鍵字:
native
、strictfp
、transient
、volatile
、assert
- 用于定義數(shù)據(jù)類型值的字面值:
true
、false
、null
(二)Java 保留字
??Java 保留字是現(xiàn)有 Java 版本尚未使用,但以后版本可能會作為關(guān)鍵字使用,命名標識符時要避免使用這些保留字:goto
、const
。
變量
變量的類型
??變量是程序中最基本的存儲單元(包含變量類型、變量名和存儲的值),用于在內(nèi)存中保存數(shù)據(jù)。Java 中使用變量時需要注意:
- Java 中每個變量必須先聲明后使用
- 使用變量名來訪問這塊區(qū)域的數(shù)據(jù)
- 變量的作用域在其定義所在的一對
{ }
內(nèi) - 變量只有在其作用域內(nèi)才有效
- 同一個作用域內(nèi)不能定義重名的變量
??對于每一種數(shù)據(jù)都定義了明確的數(shù)據(jù)類型(強類型語言),在內(nèi)存中分配了不同大小的內(nèi)存空間:
??按照變量聲明的位置不同,可以分為:成員變量和局部變量:
Java 基本數(shù)據(jù)類型
??整數(shù)類型包括:byte
、short
、int
和 long
,使用案例如下:
// byte: -128 ~ 127
byte b = 125;
// short:-2^15 ~ 2^15-1
short s = 126;
// int: 默認的整型,-2^31 ~ 2^31-1
int i = 129;
// long -2^63 ~ 2^63-1
long l = 1258L;
??浮點型包括:float
、double
,使用案例如下:
// float 4字節(jié) -3.403E38 ~ 3.403E38
float f = 12.34f;
// double 8字節(jié) -1.798E308 ~ 1.798E308 默認類型
double d = 12.34;
??字符型包括:char
,使用案例如下:
/*
* char 可以有三種表現(xiàn)形式
*/
// 1. 單個字符
char c1 = 'a';
// 2. 轉(zhuǎn)義字符
char c2 = '\n';
// 3. Unicode值
char c3 = '\u000f';
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
??布爾類型包括:boolean
,一般用來判斷邏輯條件:
// 注意:Java 中的 boolean 類型只能取值 true 和 false
boolean isMan = false;
基本數(shù)據(jù)類型轉(zhuǎn)換
(一)自動類型轉(zhuǎn)換
??自動類型轉(zhuǎn)換是指容量小的類型自動轉(zhuǎn)換為容量大的數(shù)據(jù)類型。數(shù)據(jù)類型按容量大小排序為:
- 有多種類型的數(shù)據(jù)混合運算時,系統(tǒng)首先自動將所有數(shù)據(jù)轉(zhuǎn)換成容量最大的那種數(shù)據(jù)類型,然后再進行計算
byte
、short
、char
之間不會相互轉(zhuǎn)換,它們?nèi)咴谟嬎銜r首先轉(zhuǎn)換為int
類型boolean
類型不能與其它數(shù)據(jù)類型運算- 當(dāng)把任何基本數(shù)據(jù)類型的值和字符串進行連接運算時(
+
),基本數(shù)據(jù)類型的值將自動轉(zhuǎn)化為字符串類型
// 全部提升為double類型
byte b1 = 12;
byte b2 = 22;
// 下面的代碼報錯,因為byte和byte運算也會自動轉(zhuǎn)換為 int
// byte b3 = b1 + b2;
int i = b1 + b2;
(二)強制類型轉(zhuǎn)換
??強制類型轉(zhuǎn)換是自動類型轉(zhuǎn)換的逆過程,能夠?qū)⑷萘看蟮臄?shù)據(jù)類型轉(zhuǎn)換為容量小的數(shù)據(jù)類型。使用時要加上強制轉(zhuǎn)換符 ()
,但可能造成精度降低或溢出,需要格外要注意。
int number = (int)12.23;
??通常字符串不能直接轉(zhuǎn)換為基本類型,但通過基本類型對應(yīng)的包裝類則可以實現(xiàn)把字符串轉(zhuǎn)換成基本類型:
int number = Integer.parseInt("123");
??boolean
類型不可以轉(zhuǎn)換為其它的數(shù)據(jù)類型。
運算符
常見運算符
(一)算術(shù)運算符
??常見的算術(shù)運算符如下:
運算符 | 運算 | 案例 | 結(jié)果 |
---|---|---|---|
+ | 正號 | +3 | 3 |
- | 負號 | b=4;-b | -4 |
+ | 加 | 5+5 | 10 |
- | 減 | 6-4 | 2 |
* | 乘 | 3*4 | 12 |
/ | 除 | 5/5 | 1 |
% | 取模(取余) | 7%5 | 2 |
++ | 自增(前):先運算后取值 | a=2;b=++a; | a=3;b=3 |
++ | 自增(后):先取值后運算 | a=2;b=a++; | a=3;b=2 |
– | 自減(前):先運算后取值 | a=2;b=–a; | a=1;b=1 |
– | 自減(后):先取值后運算 | a=2;b=a–; | a=1;b=2 |
+ | 字符串連接 | “He” + “l(fā)lo” | “Hello” |
算術(shù)運算符需要注意的問題
- 如果對負數(shù)取??梢园涯?shù)的負號忽略不記(如:
5 % -2 = 1
),但被模數(shù)是負數(shù)則不可忽略(如:-5 % -2 = -1
);此外,取模運算的結(jié)果不一定總是整數(shù)- 對于除號
/
,它的整數(shù)除和小數(shù)除是有區(qū)別的:整數(shù)之間做除法時只保留整數(shù)部分而舍棄小數(shù)部分+
除字符串相加功能外,還能把非字符串轉(zhuǎn)換成字符串
(二)賦值運算符
??賦值運算符是=
,當(dāng) =
兩側(cè)數(shù)據(jù)類型不一致時,可以使用自動類型轉(zhuǎn)換或使用強制類型轉(zhuǎn)換原則進行處理(支持連續(xù)賦值)。此外,賦值運算符還包括下面的擴展賦值運算符:+=
、-=
、*=
、/=
、%=
。
(三)比較運算符(關(guān)系運算符)
運算符 | 運算 | 案例 | 結(jié)果 |
---|---|---|---|
== | 相等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
< | 小于 | 4<3 | false |
> | 大于 | 4>3 | true |
<= | 小于等于 | 4<=3 | false |
>= | 大于等于 | 4>=3 | true |
instanceof | 檢查是否是類的對象 | “Hello” instanceof String | true |
注意
- 比較運算符的結(jié)果都是
boolean
型- 比較運算符
==
不能誤寫成=
(四)邏輯運算符
a | b | a&b | a&&b | a|b | a||b | !a | a^b |
---|---|---|---|---|---|---|---|
true | true | true | true | true | true | false | false |
true | false | false | false | true | true | false | true |
false | true | false | false | true | true | true | true |
false | false | false | false | false | false | true | false |
& 和 && 的區(qū)別
- 單
&
時,左邊無論真假,右邊都進行運算- 雙
&
時,如果左邊為真,右邊參與運算;如果左邊為假,那么右邊不參與運算|
和||
的區(qū)別同理,||
表示當(dāng)左邊為真,右邊不參與運算。int a = 20; // ++a > 10 不會執(zhí)行 if (false && ++a > 10) {} System.out.println(a); // 20 // ++a > 10 會執(zhí)行 if (false & ++a > 10) {} System.out.println(a); // 21 // ++a > 10 不會執(zhí)行 if (true || ++a > 10) {} System.out.println(a); // 21 // ++a > 10 會執(zhí)行 if (false | ++a > 10) {} System.out.println(a); // 22
(五)位運算符
運算符 | 運算 | 范例 | 結(jié)果 |
---|---|---|---|
<< | 左移 | 3 << 2 | 12 |
>> | 右移 | 3 >> 1 | 1 |
>>> | 無符號右移 | 3 >>> 1 | 1 |
& | 與運算 | 6 & 3 | 2 |
| | 或運算 | 6 | 3 | 7 |
^ | 異或運算 | 6 ^ 3 | 5 |
~ | 取反運算 | ~6 | -7 |
位運算符是直接對整數(shù)的二進制進行的運算。
運算符 | 說明 |
---|---|
<< | 空位補0,被移除的高位丟棄,空缺位補0 |
>> | 被移位的二進制最高位是0,右移后空缺位補0;最高位是1,空缺位補1 |
>>> | 被移位二進制最高位無論是0或者是1,空缺位都用0補 |
& | 二進制位進行&運算,只有1&1時結(jié)果是1,否則是0 |
| | 二進制位進行 | 運算,只有 0|0 時的結(jié)果是0,否則是1 |
^ | 相同二進制位進行 ^ 運算,結(jié)果是0;不相同二進制位 ^ 運算結(jié)果是1 |
~ | 正數(shù)取反,各二進制碼按補碼各位取反;負數(shù)取反,各二進制碼按補碼各位取反 |
(六)三元運算符
??三元運算符的格式如下 (條件表達式?表達式1:表達式2)
,當(dāng)條件表達式為 true
的時候運算結(jié)果是表達式 1,否則是表達式2:
int number = 3 > 2 ? 3 : 2;
運算符的優(yōu)先級
??運算符有不同的優(yōu)先級,所謂優(yōu)先級就是表達式運算中的運算順序。如圖,上一行運算符總優(yōu)先于下一行:
程序流程控制
??流程控制語句是用來控制程序中各語句執(zhí)行順序的語句,可以把語句組合成能完成一定功能的小邏輯模塊。流程控制方式采用結(jié)構(gòu)化程序設(shè)計中規(guī)定的三種基本流程結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
分支語句
(一)if-else
語句
import java.util.Scanner;public class HelloWorld {public static void main(String[] args) {int ticket = (int)(Math.random() * 90 + 10);Scanner sc = new Scanner(System.in);System.out.print("請輸入彩票號碼(兩位數(shù)):");int number = sc.nextInt();String tStr = "" + ticket;String nStr ="" + number;System.out.println("彩票號碼:" + ticket);System.out.println("輸入的號碼:" + number);if (tStr.equals(nStr)) {System.out.println("獎金 10000 美元");} else if (tStr.charAt(0) == nStr.charAt(1) && tStr.charAt(1) == nStr.charAt(0) ) {System.out.println("獎金 3000 美元");} else if (tStr.charAt(0) == nStr.charAt(0) || tStr.charAt(1) == nStr.charAt(1) ) {System.out.println("獎金 1000 美元");} else if (tStr.charAt(0) == nStr.charAt(1) || tStr.charAt(1) == nStr.charAt(0) ) {System.out.println("獎金 500 美元");} else {System.out.println("毛都沒有");}}
}
if-else 使用說明
- 條件表達式必須是布爾表達式(關(guān)系表達式或邏輯表達式)、布爾變量
- 語句塊只有一條執(zhí)行語句時,一對
{}
可以省略,但建議保留if-else
語句結(jié)構(gòu)根據(jù)需要可以嵌套使用- 當(dāng)
if-else
結(jié)構(gòu)是多選一時,最后的else
是可選的,根據(jù)需要可以省略- 當(dāng)多個條件是互斥關(guān)系時,條件判斷語句及執(zhí)行語句間順序無所謂;當(dāng)多個條件是包含關(guān)系時,需要遵循 小上大下 / 子上父下
int score = 80; if (score >= 90) {System.out.println("優(yōu)秀"); } else if (score >= 80) {System.out.println("良好"); } else if (score >= 60) {System.out.println("及格"); } else {System.out.println("不及格"); }
(二)switch-case
語句
import java.util.Scanner;public class HelloWorld {public static void main(String[] args) {// 根據(jù)用于指定月份,打印該月份所屬的季節(jié)// 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季Scanner sc = new Scanner(System.in);System.out.print("請輸入月份:");int month = sc.nextInt();switch (month) {case 3:case 4:case 5:System.out.println("春季");break;case 6:case 7:case 8:System.out.println("夏季");break;case 9:case 10:case 11:System.out.println("秋季");break;case 12:case 1:case 2:System.out.println("冬季");break;default:System.out.println("出入月份不對");break;}}
}
switch-case 使用說明
switch(表達式)
中表達式的值必須是下述幾種類型之一:byte
,short
,char
,int
,枚舉
,String
case
子句中的值必須是常量,不能是變量名或不確定的表達式值- 同一個
switch
語句,所有case
子句中的常量值互不相同break
語句用來在執(zhí)行完一個case
分支后使程序跳出switch
語句塊。如果沒有break
,程序會順序執(zhí)行到switch
結(jié)尾default
子句是可任選的,其位置也是靈活的,當(dāng)沒有匹配的case
時執(zhí)行default
switch 和 if 語句的對比
- 如果判斷的具體數(shù)值不多,而且符合
byte
、short
、char
、int
、String
、枚舉
等幾種類型,雖然兩個語句都可以使用,但建議使用swtich
語句,因為效率稍高- 其他情況,如:對區(qū)間判斷、對結(jié)果為
boolean
類型判斷等,則使用if
,因為if
的使用范圍更廣??也就是說,使用
switch-case
的,都可以改寫為if-else
,反之不成立。
循環(huán)結(jié)構(gòu)
常用的循環(huán)結(jié)構(gòu)
??循環(huán)結(jié)構(gòu)能夠?qū)崿F(xiàn)在某些條件滿足的情況下反復(fù)執(zhí)行特定代碼的功能,一般循環(huán)語句由四個部分組成:初始化部分(init_statement)、循環(huán)條件部分(test_exp)、循環(huán)體部分(body_statement)和迭代部分(alter_statement)
(一)for
循環(huán)
public class HelloWorld {public static void main(String[] args) {int sum = 0;for (int i = 0; i < 100; i++) {if (i % 2 == 0) {sum += i;}}System.out.println("100 以內(nèi)的偶數(shù)的和是:" + sum);}
}
(二)while
循環(huán)
public class HelloWorld {public static void main(String[] args) {int sum = 0;int i = 0;while (i < 100) {if (i % 2 == 0) {sum += i;}i++;}System.out.println("100 以內(nèi)的偶數(shù)的和是:" + sum);}
}
(三)do-while
循環(huán)
public class HelloWorld {public static void main(String[] args) {int sum = 0;int i = 0;do {if (i % 2 == 0) {sum += i;}i++;} while (i < 100);System.out.println("100 以內(nèi)的偶數(shù)的和是:" + sum);}
}
循環(huán)的嵌套
??循環(huán)是可以嵌套的,將一個循環(huán)放在另一個循環(huán)體內(nèi)就形成了嵌套循環(huán):
public class HelloWorld {public static void main(String[] args) {for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {System.out.print(i + "*" + j + "=" + (i * j) + "\t");}System.out.println();}}
}
break 和 continue 關(guān)鍵字
??break
語句用于終止某個語句塊的執(zhí)行:
public class HelloWorld {public static void main(String[] args) {for (int i = 0; i < 3; i++) {for (int j = 0; j < 10; j++) {if (j % 2 == 0) {System.out.print(j + "\t");break;}}System.out.println();}}
}
??break
語句出現(xiàn)在多層嵌套的語句塊中時,可以通過標簽指明要終止的是哪一層語句塊:
public class HelloWorld {public static void main(String[] args) {out: for (int i = 0; i < 3; i++) {for (int j = 0; j < 10; j++) {if (j % 2 == 0) {System.out.print(j + "\t");break out;}}System.out.println();}}
}
??continue
語句用于跳過其所在循環(huán)語句塊的一次執(zhí)行,繼續(xù)下一次循環(huán)(continue
只能使用在循環(huán)結(jié)構(gòu)中):
public class HelloWorld {public static void main(String[] args) {for (int i = 0; i < 3; i++) {for (int j = 0; j < 10; j++) {if (j % 2 == 0) {System.out.print(j + "\t");continue;}}System.out.println();}}
}
??continue
語句出現(xiàn)在多層嵌套的循環(huán)語句體中時,可以通過標簽指明要跳過的是哪一層循環(huán):
public class HelloWorld {public static void main(String[] args) {out: for (int i = 0; i < 3; i++) {for (int j = 0; j < 10; j++) {if (j % 2 == 0) {System.out.print(j + "\t");continue out;}}System.out.println();}}
}
特殊流程控制語句說明
break
只能用于switch
語句和循環(huán)語句中continue
只能用于循環(huán)語句中continue
是終止本次循環(huán),break
是終止本層循環(huán)break
、continue
之后不能有其他的語句,因為程序永遠不會執(zhí)行其后的語句- 標號語句必須緊接在循環(huán)的頭部,標號語句不能用在非循環(huán)語句的前面
return
并非專門用于結(jié)束循環(huán)的,它的功能是結(jié)束一個方法,當(dāng)一個方法執(zhí)行到一個return
語句時,這個方法將被結(jié)束- 與
break
和continue
不同的是,return
直接結(jié)束整個方法,不管這個return
處于多少層循環(huán)之內(nèi)
數(shù)組
??數(shù)組(Array
)是多個相同類型數(shù)據(jù)按一定順序排列的集合,使用一個名字命名,并通過編號的方式對這些數(shù)據(jù)進行統(tǒng)一管理:
- 數(shù)組本身是 引用數(shù)據(jù)類型,而數(shù)組中的元素可以是 任何數(shù)據(jù)類型(包括:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型)
- 創(chuàng)建數(shù)組對象會在內(nèi)存中開辟一整塊 連續(xù)的空間,而數(shù)組名中引用的是這塊連續(xù)空間的 首地址
- 數(shù)組的 長度一旦確定,就不能修改
- 可以直接通過下標(或索引)的方式調(diào)用指定位置的元素,速度很快
- 數(shù)組的分類:
- 按照維度:一維數(shù)組、二維數(shù)組、三維數(shù)組、…
- 按照元素的數(shù)據(jù)類型分:基本數(shù)據(jù)類型元素的數(shù)組、引用數(shù)據(jù)類型元素的數(shù)組
一維數(shù)組
??數(shù)組的初始化方式如下:
// 方法一
int arr1[];
arr1 = new int[3];// 方法二
int arr2[] = new int[3];// 方法三
int arr3[] = new int[] {1, 2, 3};// 方法四
int arr4[] = {1, 2, 3, 4};
arr4[0] = 1;
System.out.println(arr4[0]);
關(guān)于數(shù)組的幾點說明
- 定義并用運算符
new
為之分配空間后,才可以引用數(shù)組中的每個元素- 數(shù)組元素的引用方式:
數(shù)組名[數(shù)組元素下標]
- 每個數(shù)組都有一個屬性
length
指明它的長度(數(shù)組一旦初始化,其長度是不可變的)
??數(shù)組是引用類型,它的元素相當(dāng)于類的成員變量,因此數(shù)組一經(jīng)分配空間,其中的每個元素也被按照成員變量同樣的方式被隱式初始化:
- 對于基本數(shù)據(jù)類型而言,默認初始化值各有不同
- 對于引用數(shù)據(jù)類型而言,默認初始化值為
null
數(shù)組元素類型 | 元素默認初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0F |
double | 0.0 |
char | 0 或 ‘\u0000’ |
boolean | false |
引用類型 | null |
多維數(shù)組的使用
??Java 語言里提供了支持多維數(shù)組的語法,但是從數(shù)組底層的運行機制來看,其實沒有多維數(shù)組:
// 方法一
int[][] arr1 = new int[3][2];// 方法二
int[][] arr2 = new int[3][];// 方法三
int[][] arr3 = new int[][]{{3,8,2},{2,7},{9,0,1,6}
};
Arrays 工具類的使用
??java.util.Arrays
類是操作數(shù)組的工具類,包含了用來操作數(shù)組(比如:排序和搜索)的各種方法:
方法 | 說明 |
---|---|
boolean equals(int[] a, int[] b) | 判斷兩個數(shù)組是否相等 |
String toString(int[] a) | 輸出數(shù)組信息 |
void fill(int[] a, int val) | 將指定值填充到數(shù)組之中 |
void sort(int[] a) | 對數(shù)組進行排序 |
int binarySearch(int[] a, int key) | 對排序后的數(shù)組進行二分法檢索指定的值 |
public class HelloWorld {public static void main(String[] args) {int[] array = {2,4,1,2,7,9,5,6,7};System.out.println(Arrays.toString(array));Arrays.sort(array);System.out.println(Arrays.toString(array));}
}
數(shù)組中常見的異常
// 數(shù)組腳標越界異常(ArrayIndexOutOfBoundsException)
// 訪問到了數(shù)組中的不存在的腳標時發(fā)生
int[] arr = new int[2];
System.out.println(arr[2]);
System.out.println(arr[-1]);// 空指針異常(NullPointerException)
// arr引用沒有指向?qū)嶓w,卻在操作實體中的元素時。
int[] arr = null;
System.out.println(arr[0]);