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