- 數(shù)組
- 運(yùn)算符
- 包
- 訪問權(quán)限
- 修飾符
數(shù)組
1. 數(shù)組的聲明:
int[] a;
2. 數(shù)組的創(chuàng)建
使用new運(yùn)算符數(shù)組的創(chuàng)建int[] a = new int[100] 數(shù)組的長(zhǎng)度不要求是常量:new int[n]會(huì)創(chuàng)建一個(gè)長(zhǎng)度為n的數(shù)組
3. 數(shù)組的初始化
可以使用for循環(huán)進(jìn)行賦值,或者直接int[] a = {1, 2, 3}進(jìn)行賦值;數(shù)組創(chuàng)建時(shí),數(shù)字?jǐn)?shù)組所有元素初始化為0,Boolean數(shù)組所有元素初始化為false,對(duì)象數(shù)組則初始化為null值。
4. 數(shù)組長(zhǎng)度
每一個(gè)數(shù)組都有成員屬性length,使用a.length獲得數(shù)組a的長(zhǎng)度
5. 數(shù)組的遍歷輸出
a. 傳統(tǒng)for循環(huán)
for(int i = 0; i < a.length; i++)
System.out.print(a[i] + " ");
b. for each循環(huán)
for(int element : a)
System.out.print(element + " ");
//對(duì)于在for循環(huán)語(yǔ)句中需要使用元素下標(biāo)的程序來說不合適
c. 利用Arrays類的toString方法
System.out.println(Arrays.toString(a));
//a為數(shù)值型的數(shù)組或Boolean數(shù)組
6. 數(shù)組拷貝
int[] b = a; //b和a引用同一個(gè)數(shù)組
b[1] = 7; //此時(shí)訪問a[1]也是7
如果希望把一個(gè)數(shù)組的所有值拷貝到一個(gè)新的數(shù)組,使用Arrays類的copyOf方法
int[] b = Arrays.copyOf(a, a.length);
第二個(gè)參數(shù)表示新數(shù)組的長(zhǎng)度,比原數(shù)組長(zhǎng),則多余的元素被賦值為0或者false或者null,比原數(shù)組短,則只復(fù)制前面的對(duì)應(yīng)長(zhǎng)度的元素。
方法Arrays.copyOfRange(type[] a, int start, int end)
type為int, short, byte, long, double, float, Boolean 類型
7. 數(shù)組排序
Arrays.sort(a); //使用優(yōu)化的快速排序
8. 多維數(shù)組
多維數(shù)組創(chuàng)建
int[][] a = new int[2][3]; //正確
int[][] b = new int[2][]; //正確, 第二維的長(zhǎng)度可以動(dòng)態(tài)申請(qǐng),可以不同
int[][] c = new int[][3]; //錯(cuò)誤
多維數(shù)組遍歷
int[][] b = new int[2][];
for (int i = 0; i < b.length; i++) {
b[i] = new int[i + 1];
for (int j = 0; j < b[i].length; j++)
b[i][j] = i + j;
}
//第一種方式
for(int i = 0; i < a.length; i++)
for(int j = 0; j < a[i].length)
System.out.print(a[i][j] + " ");
//第二種方式
for (int[] row : b)
for (int value : row)
System.out.print(value + " ");
//第三種方式
System.out.println(Arrays.deepToString(b));
多維數(shù)組的每一行是可以通過引用進(jìn)行交換的。
運(yùn)算符
除法
float a = 12.3f;
int b = 5;
a = a / 0; //得到Infinity或者NaN
b = b / 0; //除零異常
System.out.println(a);
取模
int a = 5;
int b = -5;
a = a % 3;
b = b % 3;
System.out.println(a + "," + b); //2,-2
a = a % -3;
b = b % -3;
System.out.print(a + "," + b); //2,-2
/*求模運(yùn)算的結(jié)果與左操作數(shù)符號(hào)相同,與右操作數(shù)符號(hào)無關(guān)*/
算術(shù)運(yùn)算的結(jié)果不低于int型
byte a = 3;
byte b = 2;
b = a + b; //錯(cuò)誤,a+b返回int型,int不能賦值給byte
b = (byte)(a + b); //正確,強(qiáng)制轉(zhuǎn)換
b += a; //正確,b += a等價(jià)于b = (byte)(b + a)
int c = 7;
c = c + 5.2; //錯(cuò)誤
c += 5.2; //正確

虛箭頭表示可能有精度損失的轉(zhuǎn)換,實(shí)箭頭表示無信息丟失的轉(zhuǎn)換。
基本數(shù)據(jù)類型的數(shù)組之間不能相互賦值,因?yàn)閖ava中數(shù)組是類。
移位運(yùn)算
<<左移,低位補(bǔ)0,移位中可能會(huì)出現(xiàn)符號(hào)變換
>>右移,高位補(bǔ)符號(hào)位
>>>無符號(hào)右移,高位補(bǔ)0
int a = 5;
// a >> 33等價(jià)于a >> 1,移的位數(shù)和數(shù)值類型的位數(shù)取模
byte b = 5;
// b >> 33等價(jià)于b >> 1,在b >> 33操作中,b自動(dòng)提升為int型
~位反運(yùn)算,每一位取反
位邏輯運(yùn)算
位邏輯運(yùn)算優(yōu)先級(jí) & ^ |
三目運(yùn)算符?:的第二第三操作數(shù)必須是可以賦值的
包
一個(gè)類可以使用所屬包中所有的類,以及其他包中的公有類。
訪問其他包中公有類的兩種方式:在每個(gè)類前添加完整的包名;使用import語(yǔ)句(放在源文件的頂部,package語(yǔ)句的后面)。
package語(yǔ)句對(duì)整個(gè)源文件有效,即同一個(gè)源文件里的所有類都屬于這個(gè)包。
訪問權(quán)限
//public
//private
//protected
//沒有指定則為同包可訪問
修飾符
static 靜態(tài)修飾符
final 常量修飾符,也可以表示一個(gè)類不允許繼承
public class A{
int i;
static int j;
public static void main(String[] args){
i = 3; //錯(cuò)誤,i只有在new了一個(gè)對(duì)象后才會(huì)存在
j = 7; //正確,j是靜態(tài)的,不需要?jiǎng)?chuàng)建對(duì)象就存在
A a = new A();
a.i = 3; //正確
A.i = 3; //錯(cuò)誤
A.j = 4; //正確,j是所有的A類對(duì)象所共有的,所以可以通過類名來訪問
a.j = 4; //正確
}
}