java學(xué)習(xí)-1

  1. 數(shù)組
  2. 運(yùn)算符
  3. 訪問權(quán)限
  4. 修飾符

數(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; //正確
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容