JAVA后端開發(fā)學(xué)習(xí)路線列表
1. 一個(gè)簡單的JAVA應(yīng)用程序
public class FirstSample
{
public static void main(String[] args)
{
System.out.println("hello world!");
}
}
程序執(zhí)行后菲盾,控制臺上將會顯示hello world!
2.注釋
符號 | 作用 |
---|---|
//注釋內(nèi)容 | 其注釋內(nèi)容從//開始到本行末尾 |
/*注釋內(nèi)容*/ | 可以將一段比較長的注釋括起來 |
/**注釋內(nèi)容*/ | 這種注釋可以用來自動生成文檔 |
3.數(shù)據(jù)類型
java數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型麦乞。
基本數(shù)據(jù)類型有int搅方、short廊蜒、long局雄、byte驳庭、float兼丰、double肘交、char笆载、boolean,其余數(shù)據(jù)類型都為引用數(shù)據(jù)類型,引用數(shù)據(jù)類型的默認(rèn)值為null凉驻,常見的引用數(shù)據(jù)類型有:String腻要,StringBuffer,ArrayList涝登,HashMap等雄家。
3.1整型
類型 | 存儲需求 | 默認(rèn)值 | 取值范圍 |
---|---|---|---|
int | 4字節(jié) | 0 | -2 147 483 648 ~ 2 147 483 647(正好超過20億) |
short | 2字節(jié) | 0 | -32 768 ~ 32767 |
long | 8字節(jié) | 0 | -9 223 372 036 854 775 808 ~ 9223 372 036 854 775 807 |
byte | 1字節(jié) | 0 | -128 ~ 127 |
3.2浮點(diǎn)類型
類型 | 存儲需求 | 默認(rèn)值 | 取值范圍 |
---|---|---|---|
float | 4字節(jié) | 0.0f | 大約±3.402 823 47E+38F |
double | 8字節(jié) | 0.0d | 大約±1.797 693 134 862 315 70E+308 |
浮點(diǎn)數(shù)值不適用于無法接受舍入誤差的金融計(jì)算中,如果在數(shù)值計(jì)算中不允許有任何舍入誤差胀滚,就應(yīng)該使用BigDecimal類
3.3char類型
默認(rèn)值:'\u000'
char類型原本用于表示單個(gè)字符趟济。不過,現(xiàn)在情況已經(jīng)有所變化蛛淋。Unicode打破了傳統(tǒng)字符編碼機(jī)制的限制咙好。
我們強(qiáng)烈建議不要在程序中使用char類型,除非確實(shí)需要處理UTF-16代碼單元褐荷。最好將字符串作為抽象數(shù)據(jù)處理類型勾效。
<center><font size=4>特殊字符的轉(zhuǎn)義序列</font></center>
轉(zhuǎn)義序列 | 名稱 | Unicode值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表 | \u0009 |
\n | 換行 | \u000a |
\r | 回車 | \u000d |
" | 雙引號 | \u0022 |
' | 單引號 | \u0027 |
\ | 反斜杠 | \u005c |
3.4boolean類型
默認(rèn)值:false
boolean(布爾)類型有兩個(gè)值:false和true,用來判斷邏輯條件叛甫。整型值和布爾值之間不能進(jìn)行互相轉(zhuǎn)換层宫。
3.5數(shù)據(jù)類型之間的轉(zhuǎn)換
-
合法轉(zhuǎn)換
實(shí)心箭頭表示無信息丟失的轉(zhuǎn)換,虛箭頭表示可能有精度損失的轉(zhuǎn)換其监。
- 強(qiáng)制轉(zhuǎn)換
例如有時(shí)需要將double轉(zhuǎn)換為int萌腿。
double x = 9.997;
int nx = (int) x;
//變量nx的值為9
4變量與常量
- 類變量:獨(dú)立于方法之外的變量,用 static 修飾抖苦。
- 實(shí)例變量:獨(dú)立于方法之外的變量毁菱,不過沒有 static 修飾。
- 局部變量:類的方法中的變量锌历。
public class Variable{
static int allClicks=0; // 類變量
String str="hello world"; // 實(shí)例變量
public void mehod(){
int i =0; // 局部變量
}
}
4.1變量命名規(guī)范
變量名必須是一個(gè)以字母開頭并由字母或數(shù)字構(gòu)成的序列贮庞。大小寫敏感。
字母包括'A' ~ 'Z'究西、'a' ~ 'z'窗慎、'_'、'$'
數(shù)字包括‘0~9’
變量名不能是java中的保留關(guān)鍵字
4.2類變量
- 類變量也稱為靜態(tài)變量卤材,在類中以 static 關(guān)鍵字聲明遮斥,但必須在方法之外。
- 無論一個(gè)類創(chuàng)建了多少個(gè)對象扇丛,類只擁有類變量的一份拷貝术吗。
- 靜態(tài)變量除了被聲明為常量外很少使用,靜態(tài)變量是指聲明為 public/private帆精,final 和 static 類型的變量较屿。靜態(tài)變量初始化后不可改變材蹬。
- 靜態(tài)變量儲存在靜態(tài)存儲區(qū)。經(jīng)常被聲明為常量吝镣,很少單獨(dú)使用static聲明變量堤器。
- 靜態(tài)變量在第一次被訪問時(shí)創(chuàng)建,在程序結(jié)束時(shí)銷毀末贾。
- 與實(shí)例變量具有相似的可見性闸溃。但為了對類的使用者可見,大多數(shù)靜態(tài)變量聲明為public類型拱撵。
- 默認(rèn)值和實(shí)例變量相似辉川。數(shù)值型變量默認(rèn)值是0,布爾型默認(rèn)值是false拴测,引用類型默認(rèn)值是null乓旗。變量的值可以在聲明的時(shí)候指定,也可以在構(gòu)造方法中指定集索。此外屿愚,靜態(tài)變量還可以在靜態(tài)語句塊中初始化。
- 靜態(tài)變量可以通過:ClassName.VariableName的方式訪問务荆。
- 類變量被聲明為public static final類型時(shí)妆距,類變量名稱一般建議使用大寫字母。如果靜態(tài)變量不是public和final類型函匕,其命名方式與實(shí)例變量以及局部變量的命名方式一致娱据。
4.3實(shí)例變量
- 實(shí)例變量聲明在一個(gè)類中,但在方法盅惜、構(gòu)造方法和語句塊之外中剩;
- 當(dāng)一個(gè)對象被實(shí)例化之后,每個(gè)實(shí)例變量的值就跟著確定抒寂;
- 實(shí)例變量在對象創(chuàng)建的時(shí)候創(chuàng)建结啼,在對象被銷毀的時(shí)候銷毀;
- 實(shí)例變量的值應(yīng)該至少被一個(gè)方法蓬推、構(gòu)造方法或者語句塊引用妆棒,使得外部能夠通過這些方式獲取實(shí)例變量信息澡腾;
- 實(shí)例變量可以聲明在使用前或者使用后沸伏;
- 訪問修飾符可以修飾實(shí)例變量;
- 實(shí)例變量對于類中的方法动分、構(gòu)造方法或者語句塊是可見的毅糟。一般情況下應(yīng)該把實(shí)例變量設(shè)為私有。通過使用訪問修飾符可以使實(shí)例變量對子類可見澜公;
- 實(shí)例變量具有默認(rèn)值姆另。數(shù)值型變量的默認(rèn)值是0喇肋,布爾型變量的默認(rèn)值是false,引用類型變量的默認(rèn)值是null迹辐。變量的值可以在聲明時(shí)指定蝶防,也可以在構(gòu)造方法中指定;
- 實(shí)例變量可以直接通過變量名訪問明吩。但在靜態(tài)方法以及其他類中间学,就應(yīng)該使用完全限定名:ObejectReference.VariableName。
4.4局部變量
- 局部變量聲明在方法印荔、構(gòu)造方法或者語句塊中低葫;
- 局部變量在方法、構(gòu)造方法仍律、或者語句塊被執(zhí)行的時(shí)候創(chuàng)建嘿悬,當(dāng)它們執(zhí)行完成后,變量將會被銷毀水泉;
- 訪問修飾符不能用于局部變量善涨;
- 局部變量只在聲明它的方法、構(gòu)造方法或者語句塊中可見草则;
- 局部變量是在棧上分配的躯概。
- 局部變量沒有默認(rèn)值,所以局部變量被聲明后畔师,必須經(jīng)過初始化娶靡,才可以使用。
4.5常量
在Java中看锉,利用關(guān)鍵字final指示常量姿锭。關(guān)鍵字final表示這個(gè)變量只能被賦值一次。一旦被賦值以后伯铣,就不能再被更改了呻此。習(xí)慣上,常量名使用全大寫腔寡。
在Java中焚鲜,經(jīng)常希望某個(gè)常量可以在一個(gè)類中的多個(gè)方法中使用,通常將這些常量稱為類常量放前》薨酰可以使用關(guān)鍵字 static final 設(shè)置一個(gè)類常量,類常量定義于main方法的外部凭语。
5運(yùn)算符
5.1算術(shù)運(yùn)算符
- 整數(shù)被0除會產(chǎn)生一個(gè)異常葱她,而浮點(diǎn)數(shù)被0除將會得到無窮大或NaN結(jié)果。
- x++前綴形式會先完成加一似扔,而++x后綴形式會使用變量原來的值吨些。
建議不要在表達(dá)式中使用++豪墅,不易讀且易出bug泉手。int m = 7; int n = 7; int a = 2 * ++m;//a為16搓谆,m為8 int b = 2 * n++;//b為14,n為8
5.2位運(yùn)算符
設(shè)a = 60 (0011 1100),b = 13 (0000 1101)
5.2結(jié)合賦值和運(yùn)算符
x += 4 等價(jià)于 x = x + 4
一般的偶器,要把運(yùn)算符放在 = 號左邊螃诅,如 *= 或 %=。
5.3關(guān)系運(yùn)算符
設(shè)A為10状囱,B為20.
5.4邏輯運(yùn)算符
設(shè)布爾值A(chǔ)為真术裸,B為假
5.5三元運(yùn)算符
condition ? expression1:expressionw2
如果condition為true,則返回expression1亭枷,如果condition為false袭艺,則返回expression2.
//設(shè)x=1,y=2
x < y ? x : y
//結(jié)果會返回x
5.6運(yùn)算符的優(yōu)先級
6字符串
6.1String類與常用方法
//創(chuàng)建一個(gè)簡單的字符串
String a = "hello world!";
- 求長度(length)
String a = "hello world!";
int b = a.length();
//b為12
空格也算一個(gè)字符
- 拼接( + )
String a = "hello";
String b = "world";
String c = a + b;
//c為helloworld
- 碼點(diǎn)(charAt)
String a = "hello world!";
char b = a.charAt(4);
//b為o
charAt(4)叨粘,取索引位置4猾编,即從左到右數(shù)第5個(gè)字符。
- 子串(substring):
String a = "hello world!";
String b = a.substring(0,3);
//b為hel
substring(0,3)升敲,取索引位置從0到2答倡,即從左到右數(shù)第1、2驴党、3個(gè)字符瘪撇。
- 比較(equals)
String a = "hello";
boolean b = a.equals("hello");
//b為true
可以用equals方法檢測兩個(gè)字符串是否相等。
- 替換(replace)
String a = "hello world";
String b = a.replace("world" , "java");
//a為hello java
replace("舊的字符串","新的字符串")
- 分割(split)
String a = "hello-world-!";
String[] words = a.split("-");//此時(shí)words數(shù)組為[hello,world,!]
for (String word : words) {
System.out.print(word);
}
//控制臺輸出helloworld!
split() 方法根據(jù)匹配給定的正則表達(dá)式來拆分字符串港庄,返回字符串?dāng)?shù)組倔既。
6.2字符串比較(==與equals)
- ==:基本數(shù)據(jù)類型==比較的是值,引用數(shù)據(jù)類型==比較的是內(nèi)存地址鹏氧。
-
equals:不能比較基本數(shù)據(jù)類型渤涌。
equals() 方法存在兩種使用情況:
情況 1:類沒有覆蓋 equals()方法。則通過 equals()比較該類的兩個(gè)對象時(shí)把还,等價(jià)于通過“==”比較這兩個(gè)對象实蓬。使用的默認(rèn)是 Object類equals()方法。
情況 2:類覆蓋了 equals()方法吊履。一般安皱,我們都覆蓋 equals()方法來兩個(gè)對象的內(nèi)容相等;若它們的內(nèi)容相等率翅,則返回 true(即练俐,認(rèn)為這兩個(gè)對象相等)袖迎。
String a = new String("ab"); // a 為一個(gè)引用
String b = new String("ab"); // b為另一個(gè)引用,對象的內(nèi)容一樣
String aa = "ab"; // 放在常量池中
String bb = "ab"; // 從常量池中查找
if (aa == bb) // true
System.out.println("aa==bb");
if (a == b) // false冕臭,非同一對象
System.out.println("a==b");
if (a.equals(b)) // true
System.out.println("aEQb");
if (42 == 42.0) { // true
System.out.println("true");
String 中的 equals 方法是被重寫過的腺晾,因?yàn)?Object 的 equals 方法是比較的對象的內(nèi)存地址,而 String 的 equals 方法比較的是對象的值辜贵。
當(dāng)創(chuàng)建 String 類型的對象時(shí)悯蝉,虛擬機(jī)會在常量池中查找有沒有已經(jīng)存在的值和要創(chuàng)建的值相同的對象,如果有就把它賦給當(dāng)前引用托慨。如果沒有就在常量池中重新創(chuàng)建一個(gè) String 對象鼻由。
6.3空串與null串
- 空串是一個(gè)java對象,有自己的串長度(0)和內(nèi)容(空)厚棵。
//檢查一個(gè)字符串是否為空串
if(str.length() == 0)
//或
if(str.equals(""))
- null表示沒有任何對象與該變量關(guān)聯(lián)
//檢查一個(gè)字符串是否為null
if(str == null)
有時(shí)需要檢查一個(gè)字符串既不是null也不是空串
if(str !=null && str.length() != 0)
6.4StringBuilder與StringBuffer
String對象不可變蕉世,而StringBuilder與StringBuffer對象是可變的。
StringBuffer線程安全婆硬,StringBuilder線程不安全狠轻。
StringBuilder相比于StringBuffer有10%~15%的性能提升。
操作少量的數(shù)據(jù): 適用 String彬犯。
單線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù): 適用 StringBuilder向楼。
多線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù): 適用 StringBuffer。
7輸入輸出
7.1讀取輸入
Scanner in = new Scanner(System.in);//可以實(shí)現(xiàn)輸入操作
System.out.println("你的名字是谐区?");
String name = in.nextLine();//使用nextLine方法是因?yàn)樵谳斎胄兄锌赡馨崭?
System.out.println("你的年齡是湖蜕?");
int age = in.nextInt();
System.out.println("你好," + name + "宋列,明年你" + (age + 1) +"歲昭抒。");
輸出結(jié)果
你的名字是?
小明
你的年齡是炼杖?
20
你好戈鲁,小明,明年你21歲嘹叫。
7.2文件輸入輸出
要想對文件進(jìn)行讀取婆殿,就需要一個(gè)用File對象構(gòu)造一個(gè)Scanner對象,如下所示:
Scanner in = new Scanner(Paths.get("myfile.txt"),"UTF-8");
如果文件名中包含反斜杠符號罩扇,就要記住在每個(gè)反斜杠之前再加一個(gè)額外的反斜杠:“c:\mydirectory\myfile.txt”婆芦。
現(xiàn)在就可以利用任何一個(gè)Scanner方法對文件進(jìn)行讀取。
要想寫入文件喂饥,就需要構(gòu)造一個(gè)PrintWriter對象消约。在構(gòu)造器中,只需要提供文件名:
PrintWriter out = new PrintWriter("myfile.txt","UTF-8");
如果文件不存在员帮,創(chuàng)建該文件或粮。可以向輸入到System.out一樣使用print捞高、println以及printf命令氯材。
PrintWriter out = new PrintWriter("D:\\myfile.txt","UTF-8");
out.println("hello world");
out.close();
Scanner in = new Scanner(Paths.get("D:\\myfile.txt"),"UTF-8");
while (in.hasNext()){
String str = in.nextLine();
System.out.println(str);
}
8流程控制
8.1塊作用域
塊(block)
塊(即復(fù)合語句)是指有一對大括號括起來的若干條簡單的Java語句渣锦。塊確定了變量的作用域。一個(gè)塊可以嵌套在另一個(gè)塊中氢哮。
public static void main(String[] args)
{
int n;
...
{
int k;
...
}//k的只作用域到此為止
}
但是袋毙,不能再嵌套的兩個(gè)塊中聲明同名的變量。例如冗尤,下面的代碼就有錯誤听盖,而無法通過編譯:
public static void main(String[] args)
{
int n;
...
{
int k;
int n;//Error--不能在這個(gè)區(qū)塊中定義
...
}
}
8.2條件語句
- if條件語句
int a = 100;
if(a == 100) {
System.out.println(a);
}
//控制臺輸出100
- if-else條件語句
int grade = 80; // 聲明,成績?yōu)?0
if(grade >= 60) { // if判斷語句判斷成績是否大于等于60
System.out.println("及格");
} else { // if條件不成立
System.out.println("不及格");
}
//控制臺輸出及格
- if-else-if條件語句
int grade = 70; // 聲明裂七,成績?yōu)?0
if (grade == 100){ //不滿足條件皆看,跳過塊
System.out.println("滿分");
} else if (grade >= 80) { //不滿足條件,跳過塊
System.out.println("優(yōu)秀");
} else if (grade >= 60){ //滿足條件背零,執(zhí)行塊
System.out.println("及格");
} else {
System.out.println("不及格");
}
//控制臺輸出及格
- switch多分支語句
在處理多個(gè)選項(xiàng)時(shí)悬蔽,使用if/else結(jié)構(gòu)顯得有些笨拙。用以使用switch語句
//建立一個(gè)包含4個(gè)選項(xiàng)的菜單系統(tǒng)
Scanner in = new Scanner(System.in);
System.out.println("請輸入1捉兴、2蝎困、3、4其中一個(gè)數(shù)字");
int choice = in.nextInt();
switch (choice){
case 1:
...
break;
case 2:
...
break;
case 3:
...
break;
case 4:
...
break;
default:
...
break;
}
switch語句將從與選項(xiàng)值相匹配的case標(biāo)簽處開始執(zhí)行直到遇到break語句倍啥,或者執(zhí)行到switch語句結(jié)束處為止禾乘。如果沒有相匹配的case標(biāo)簽,而有default子句虽缕,就執(zhí)行這個(gè)子句始藕。
case的標(biāo)簽可以是:
類型為char、byte氮趋、short或int的常量表達(dá)式伍派。
枚舉常量
從Java SE 7開始,case標(biāo)簽還可以是字符串字面量剩胁。
8.3循環(huán)語句
- while循環(huán)
while循環(huán)語句的循環(huán)方式為利用一個(gè)條件來控制是否要繼續(xù)反復(fù)執(zhí)行這個(gè)語句诉植。
int count = 3;
while (count > 0)
{
count--;
System.out.println("剩余" + count +"次");
}
輸出結(jié)果:
剩余2次
剩余1次
剩余0次
- do-while循環(huán)
do-while循環(huán)語句先執(zhí)行一次循環(huán)體后,再判斷條件是否成立昵观。
int a = 3;
int b = 3;
while (a == 2)
{
a--;
System.out.println("while成功執(zhí)行");
}
do {
b--;
System.out.println("do-while成功執(zhí)行");
}while (b == 2);
輸出結(jié)果:
do-while成功執(zhí)行
do-while成功執(zhí)行
由于while的條件不成立晾腔,所以不執(zhí)行while的循環(huán)體。
do-while先執(zhí)行一次循環(huán)體啊犬,輸出一次灼擂,由于b-1,滿足了b==2的條件觉至,再執(zhí)行一次循環(huán)體剔应,b再減一,不滿足條件,結(jié)束峻贮。
- for循環(huán)
for循環(huán)語句是Java程序設(shè)計(jì)中最有用的循環(huán)語句之一席怪。一個(gè)for循環(huán)可以用來重復(fù)執(zhí)行某條語句,直到某個(gè)條件得到滿足月洛。
for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3)
{
循環(huán)體何恶;
}
表達(dá)式1為初始化表達(dá)式孽锥;表達(dá)式2為循環(huán)條件判斷表達(dá)式嚼黔;表達(dá)式3為循環(huán)后操作表達(dá)式負(fù)責(zé)修整變量,改變循環(huán)條件惜辑。
//用for循環(huán)語句求100以內(nèi)所有偶數(shù)的和唬涧。
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
//控制臺輸出5050
- for each循環(huán)
是一種增強(qiáng)的for循環(huán),可以用來依次處理數(shù)組中的每個(gè)元素(其他元素的元素集合亦可)而不必為指定下標(biāo)值而分心盛撑。
//遍歷一個(gè)數(shù)組
int array[] = {1, 2, 3};
for (int arr : array) {
System.out.println(arr);
}
8.4跳轉(zhuǎn)語句
- break
break語句剛剛在switch中已經(jīng)見過了碎节,是用來中止case的。實(shí)際上break語句在for抵卫、while狮荔、do···while循環(huán)語句中,用于強(qiáng)行退出當(dāng)前循環(huán)介粘。假設(shè)有兩個(gè)循環(huán)嵌套使用殖氏,break用在內(nèi)層循環(huán)下,則break只能跳出內(nèi)層循環(huán)
for(int i=0; i<n; i++) { // 外層循環(huán)
for(int j=0; j<n ;j++) { // 內(nèi)層循環(huán)
break;
}
}
- continue
continue語句只能用于for姻采、while雅采、do···while循環(huán)語句中,用于跳過本次循環(huán)慨亲,進(jìn)行下一次循環(huán)婚瓜。
- return
return語句可以從一個(gè)方法返回,并把控制權(quán)交給調(diào)用它的語句刑棵。
9數(shù)組
數(shù)組是一種數(shù)據(jù)結(jié)構(gòu)巴刻,用來存儲同一類型值的集合。通過一個(gè)整型下標(biāo)可以訪問數(shù)組中的每一個(gè)值蛉签。
9.1數(shù)組的聲明
//兩種方式
int[] a;
int b[];
創(chuàng)建一個(gè)可以存儲100個(gè)整數(shù)的數(shù)組并賦值:
int[] a = new int[100];
for (int i = 0; i < 100; i++) {
a[i] = i;
}
這個(gè)數(shù)組的下標(biāo)從099(不是1100)冈涧,如果試圖訪問元素a[100](或任何在0~100之外的下標(biāo)),程序就會引發(fā)"array index out of bounds"異常而終止執(zhí)行正蛙。
一旦創(chuàng)建了數(shù)組督弓,就不能再改變它的大小。如果經(jīng)常需要在運(yùn)行過程中擴(kuò)展數(shù)組的大小乒验,就應(yīng)該使用另一種數(shù)據(jù)結(jié)構(gòu)——數(shù)組列表(array list)
9.2數(shù)組的初始化
- 方式一
//分配長度為 4 個(gè) int 型的內(nèi)存空間愚隧,并分別賦初始值1,2,3狂塘,4
int[] array = new int[]{1, 2, 3, 4};
- 方式二
//方式一的簡寫
int[] array = {1, 2, 3, 4};
- 方式三
//分配長度為 4 的內(nèi)存空間录煤,并全部賦為默認(rèn)值 0
//相當(dāng)于 int[] array = new int[4]{0, 0, 0, 0} 的簡寫
int[] array = new int[4];
- 數(shù)組的默認(rèn)值
數(shù)組類型 | 默認(rèn)初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
char | 編碼為0的字符 |
float | 0.0 |
double | 0.0 |
String | null |
boolean | false |
- 數(shù)組拷貝
// 一、淺拷貝荞胡,兩個(gè)變量將引用同一個(gè)數(shù)組妈踊。
int[] arrays1 = new int[]{1, 2, 3, 4};
int[] arrays2 = arrays1;
System.out.println(arrays1 == arrays2);
System.out.println(Arrays.toString(arrays1));
System.out.println(Arrays.toString(arrays2));
// 二、clone方法泪漂,深拷貝廊营,將一個(gè)數(shù)組的所有值拷貝到一個(gè)新的數(shù)組中
int[] arrays3 = new int[]{1, 2, 3, 4};
int[] arrays4 = arrays3.clone();
System.out.println(arrays3 == arrays4);
System.out.println(Arrays.toString(arrays3));
System.out.println(Arrays.toString(arrays4));
// 三、copyOf方法萝勤,深拷貝露筒,將一個(gè)數(shù)組的所有值拷貝到一個(gè)新的數(shù)組中
int[] arrays5 = new int[]{1, 2, 3, 4};
//第二個(gè)參數(shù)是新數(shù)組的長度,這個(gè)方法通常用來增加數(shù)組的大小
//如果新數(shù)組小于原始數(shù)組的長度敌卓,則只拷貝最前面的數(shù)據(jù)元素
int[] arrays6 = Arrays.copyOf(arrays5, arrays5.length);
System.out.println(arrays5 == arrays6);
System.out.println(Arrays.toString(arrays5));
System.out.println(Arrays.toString(arrays6));
9.3數(shù)組的常用方法
- 排序
static void sort(type[] a)
這個(gè)方法使用了優(yōu)化的快速排序算法慎式。
- 轉(zhuǎn)成字符串
static String toString(type[] a)
返回一個(gè)包含數(shù)組元素的字符串,這些元素被放置在括號內(nèi)趟径,并用逗號分隔瘪吏,如[2,3,5,7,11,13]
。
- 填充
static void fill(type[] ,type v)
將數(shù)組的所有數(shù)據(jù)元素值設(shè)置為v蜗巧。
- 比較(equals)
static boolean equals(type[] a, type[] b)
如果兩個(gè)數(shù)組大小相同掌眠,并且下標(biāo)相同元素都對應(yīng)相等,返回true惧蛹。
9.4多維數(shù)組
實(shí)質(zhì)上扇救,Java 高維數(shù)組還是一維數(shù)組,只不過這個(gè)一維數(shù)組的元素比較特殊香嗓,是由低一維的數(shù)組這種引用類型的引用構(gòu)成的迅腔。
- 方式一
int[][] array = new int[3][2];
即創(chuàng)建了一個(gè) 3*2 的二維數(shù)組,array 里有三個(gè)數(shù)組元素靠娱,三個(gè)數(shù)組元素都是長度為 2 的一維數(shù)組的引用沧烈。
- 方式二
int[][] array = new int[3][];
//由于二維數(shù)組相當(dāng)于是一維數(shù)組這種引用類型的引用組成的
//所以此時(shí)等價(jià)于 int[][] array = {null, null, null}
//下面可以為 array 數(shù)組分別賦上長度不同的一維數(shù)組
array[0] = new int[1];
array[1] = new int[2];
array[2] = new int[3];
- 方式三
int[][] array = {{1, 2}, {1, 3, 5}, {2}};