(2021-08-16)
數(shù)組
Java的數(shù)組被創(chuàng)建后晒来,只能用來存儲指定類型的信息竭宰。比如可以有int
數(shù)組兼贡、String
對象的數(shù)組或數(shù)組的數(shù)組屡拨,但一個數(shù)組不能同時存儲String
對象和int
值只酥。
一個規(guī)避這種限制的方法:一個數(shù)組可同時存儲特定類及其所有子類的對象,因此一個Object
數(shù)據(jù)可包含任何Java對象洁仗,包括與基本類型對應(yīng)的類的對象层皱。
在Java中創(chuàng)建數(shù)組,按下面過程進(jìn)行
- 生命一個用于存儲數(shù)組的變量
- 創(chuàng)建一個數(shù)組對象赠潦,并將它賦給數(shù)組變量
- 在數(shù)組中存儲信息
數(shù)組聲明
聲明的數(shù)組變量指出了數(shù)組將存儲的對象或數(shù)據(jù)類型以及數(shù)組的名稱叫胖。聲明方式有兩種,即類型后加[]
和變量名后加[]
她奥。
String[] a;
Point[] b; //數(shù)組存儲的對象是Point的對象
float[] c;
// 下面這樣的形式與上面等效
String a[];
Point b[];
float c[];
數(shù)組是一個對象瓮增。
(2021.08.18 Wed)
創(chuàng)建數(shù)組對象
因數(shù)組是對象怎棱,創(chuàng)建時需要new
關(guān)鍵字。
String[] players = new String[10]; //定義了一個長度是10的String數(shù)組
使用new
創(chuàng)建數(shù)組對象時绷跑,其所有元素都被自動的初始化拳恋。
類型 | 默認(rèn)初值 |
---|---|
數(shù)字 | 0 |
boolean | false |
char | '\0' |
對象 | null |
數(shù)組賦初值的方式,可逐一賦值砸捏,比如
Interger[] series = new Integer[3];
series[0] = new Integer(10);
series[1] = new Integer(5);
series[2] = new Integer(999);
或者在初始化時將數(shù)組元素放在大括號中谬运,用逗號分隔
Point[] m = {new Point(1,5), new Point(996, 0), new Point(7, 24)};
注意到String
對象可以不用new
來創(chuàng)建和初始化,用作字符串?dāng)?shù)組時垦藏,也可以如下初始化
String[] t = {"Mr.", "Mrs.", "Miss", "Dr."};
所有數(shù)組都有一個名為length
的實(shí)例變量梆暖,指出了數(shù)組包含多少個元素。如剛剛定義的字符串?dāng)?shù)組t
掂骏,有t.length = 4
轰驳。
訪問數(shù)組元素時,index不能超過length
變量弟灼,否則Java編譯器返回錯誤消息ArrayIndexOutOfBoundsException
级解。
訪問數(shù)組和修改數(shù)組的方式同Python。
注:指定整數(shù)字面量時田绑,將每3位編組并用下劃線_
分割勤哗,讓數(shù)字更加容易閱讀。
short[] a = new short[2];
a[0] = 10_000;
多維數(shù)組
數(shù)組可以多維辛馆,僅需在聲明時加入相應(yīng)個數(shù)的中括號俺陋。
int[][] dayValue = new int[53][7]; // 定義了一個53行7列的數(shù)組
int[][][] cen = new int[100][53][7]; // 定義了一個100*53*7的數(shù)組
System.out.println('Elements in 1st dimension: ' + cen.length);
System.out.println('Elements in 2nd dimension: ' + cen[0].length);
System.out.println('Elements in 3rd dimension: ' + cen[0][0].length);
塊語句
用花括號(brace)括起來的內(nèi)容是一個塊語句(block statement)。Java塊中聲明的局部變量創(chuàng)建了作用域昙篙,在塊中定義的變量僅能在塊中使用腊状。在塊執(zhí)行完畢后,在塊中定義的變量將不復(fù)存在苔可。
void testBlock() {
int x = 10;
{
int y = 40;
y = y + x;
} // y的作用域到此結(jié)束
}
判斷和循環(huán)語句
if條件語句
Java要求if的測試返回值只能是boolean
值缴挖,即true/false
,而在Python焚辅、C和C++中映屋,測試可以返回整數(shù)值。
...
String server;
if (arguments.length < 1) {
server = "localhost";
} else {
server = "xxx";
}
// 另一個例子
if (operation == '+')
add(o1, o2);
else if (operation == '-')
subtract(o1, o2)
else if (operation == '*')
multiply(o1, o2)
else if (operation == '/')
divide(o1, o2)
switch條件語句
if
語句的最后一個例子同蜻,是嵌套if
語句棚点。和C/C++相同,Java提供了一個更好的方式處理這種情況湾蔓,也就是switch
語句瘫析。
char grade = 'D';
switch (grade) {
case 'A':
System.out.println("Superb!");
break;
case 'B':
System.out.println("not bad");
break;
case 'C':
System.out.println("so so");
break;
case 'D':
System.out.println("work harder please");
break;
default:
System.out.print("wth");
}
每個case
語句之后,可以有任何數(shù)目的語句,不必像if
語句那樣用花括號括起來贬循。
每個case
都有一個break
語句咸包,用于指出何時停止執(zhí)行語句。如果case
中沒有break
語句杖虾,則找到匹配的情況后烂瘫,該case
中的語句及其后到break
或switch
末尾的所有語句都將執(zhí)行。請記得多數(shù)情況下為每個case
語句加入break
語句奇适。
int x = 5;
switch (x) {
case 2:
case 4:
case 8:
System.out.println("even number");
break;
default:
System.out.println("odd number");
}
上面這個指令返回odd number
坟比。
int month = 10;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
count = 31;
break;
case 4:
case 6:
case 9:
case 11:
count = 30;
break;
case 2:
count = 28
}
上面代碼的返回結(jié)果是31
。
(2021.08.19 Thur)
三目運(yùn)算符
也叫條件運(yùn)算符滤愕,格式為
test? trueResult:falseResult
相當(dāng)于if
判斷温算。比如比較myScore
和yourScore
兩個變量,返回其中比較大的那個并返回賦值給變量bestScore
间影。
bestScore = myScore > yourScore? myScore: yourScore;
該語句等效于
if (myScore > yourScore) {
bestScore = myScore;
} else {
bestScore = yourScore;
}
三目運(yùn)算符的優(yōu)先級很低,通常在所有子表達(dá)式計(jì)算完畢后才被計(jì)算茄茁,唯一比它優(yōu)先級低的運(yùn)算符是賦值運(yùn)算魂贬。
for循環(huán)
格式如下
for (initialisation; test; increment) {
statement;
}
其中的test
部分是boolean
格式的表達(dá)式,當(dāng)不滿足該條件裙顽,則停止循環(huán)付燥。一個例子
String[] salutation = new String[10];
byte i;
for (i = 0; i < salutation.length; i++) {
salutation[i] = "Dr.";
}
一種特殊情況是每次循環(huán)什么都不做,可以簡單的表達(dá)為
for (i = 0; i < salutation.length; i++);
while和do循環(huán)
這兩類循環(huán)讓Java代碼重復(fù)執(zhí)行愈犹,直到滿足條件為止键科。
while
循環(huán)
while (i < 10) {
x += i;
}
這個循環(huán)中因只有一條語句,所以不用花括號也可以使用漩怎,但如果循環(huán)體內(nèi)有多條語句勋颖,用花括號是必需的。
do
循環(huán)與while
循環(huán)類似勋锤,區(qū)別在于檢測條件的位置饭玲,且do
循環(huán)檢測條件之前,至少執(zhí)行循環(huán)體一次叁执。
long i = 1;
do {
i += 1111;
System.out.println(i + " ");
} while (i < 3_000_000_000);
跳出和繼續(xù)循環(huán) break和continue
break
跳出循環(huán)茄厘,continue
執(zhí)行下一次循環(huán)。
Reference
1 R. Cadenhead著谈宛,袁國忠譯次哈,21天學(xué)通Java(第7版),中國工信出版集團(tuán)吆录,人民郵電出版社