Java中陣列 列舉 內部類

2021-07-16 05:23:19 字數 4565 閱讀 8634

二 列舉

三 內部類

非靜態內部類

匿名內部類

一系列相同型別的元素

有序的

連續的記憶體空間

初始化時固定大小

//new int[10] : 申請10個int的記憶體空間, 並初始化所有的元素為0

int a = new

int[10];

//只有在宣告時使用

int b = ;

//可以在非宣告時使用

int c = new

int;

system.out.println(c[0]);

//陣列長度

system.out.println(c.length);

普通for迴圈, 增強for迴圈:

//陣列遍歷:

for (int i = 0; i < c.length; i++)

//增強for迴圈: 只能訪問不能賦值

for (int i : c)

注: idea中迴圈的快捷鍵

itar:普通迴圈遍歷

iter:增強for迴圈

準備: 一種交換的寫法

public

static

void

swap(int a, int i, int j)

//^異或

a[i] ^= a[j];

a[j] ^= a[i];

a[i] ^= a[j];

}

排序演算法

選擇排序

從0開始 , 把當前位置最小數字置, 然後從後面開始找到最小數, 跟當前位置的數交換

//選擇排序

private static void sort(int a)

}if (min != i)

}}

插入排序

前面是排好序的, 將後續的數字插入到前面合適位置

//插入排序

private

static

void

sort2(int a) else }}

}

氣泡排序

迴圈(n-1)次每次將最大的放到最後

//氣泡排序

private

static

void

sort3(int a) }}

}

快速排序

隨機選擇乙個下標,通過該下標將陣列分成兩個陣列, 將比該下標下的數值小的放在前面, 大的放到後面

步驟:

只考慮迴圈一次, 首先找個隨機值(陣列下標以內)index, 找到將index位置的數和end位置的交換, 之後將start的值賦值給index, 此時index表示要插入的位置, 然後用index位置的值迴圈跟end位置的值進行比較, 比end位置值大的不動, 小的就將該位置的值與index位置的值交換,當該迴圈結束後說明, 說明index左邊小, 右邊大, 將end位置值與index交換

//快速排序

private

static random random;

private

static

void qsort(int a)

private

static

void qsort(int a, int start, int end)

//隨機乙個數字

intindex = random.nextint(end - start + 1) + start;

//和最後一位交換位置

swap(a, index, end);

index = start;

for (int i = start; i < end; i++)

}swap(a, index, end);

qsort(a, start, index - 1);

qsort(a, index + 1, end);

}

定義一些不太好定義的量, 例如,一周中的七天或者人類中的性別等等

列舉中可以有屬性和方法

列舉型別和類最大的區別就是: 列舉型別是不能被new出來的!!!!!!

列舉型別可以重寫方法

可以用switch做分支

列舉的預設的構造方法時private, 並且不能修改!

public

enum gender

switch (human.getgender())
public

enum gender

}, female("女性");

private string chinese;

gender(string chinese)

public string getchinese()

}

測試

system.out

.println(gender.male);

system.out

.println(gender.male

.getchinese());

類載入到記憶體的時機: 建立物件 和 使用類中靜態屬性或方法, 其中宣告變數不算

new human();

human.getinstance();

懶漢式

用到例項的時候建立

public

static

synchronized human getinstance()

return instance;

}private

human()

}

餓漢式

類被第一次使用時建立

//放在靜態**塊中可以初始化該類的物件

//類被第一次使用時呼叫

private

static human instance;

static

public

static

synchronized human getinstance()

private

human()

以上方法不能絕對保證它是單例, 可以通過反射機制獲取到新的例項

我們可以通過下面的列舉實現完全的單例模式!

public

enum human02

public

void

setage(int age)

static

public

static human02 getinstance()

human02()

}

內部類分為靜態內部類和靜態外部類

使用方式和普通類完全一樣. 可以使用外部類中所有的靜態屬性和方法以及所有的構造方法.

構建者設計模式
構建者設計模式就是通過靜態內部類實現:

以下案例是用來解決 建立使用者時必填項和選填項的問題

使用者類

public

class user

//靜態內部類

//使用方法, 和普通類完全一樣

//可以使用外部類中所有的靜態的屬性和所有的構造方法

public

static

class builder

public builder setnickname(string nickname)

public builder setage(int age)

public builder setgender(gender gender)

public builder setemail(string email)

public user build()

}}

測試類

public

static

void

main(string args)

注意下面幾點

匿名內部類在android中經常使用

在匿名內部類中, 只能建立乙個物件

java 內部類 列舉

一 內部類 1 概念 類的裡面定義的類 2 例項內部類 非靜態的成員內部類 outer.inner inner new outer new inner 靜態內部類 outer.inner inner new outer.new inner 區域性內部類 方法裡面定義的內部類 匿名內部類 只使用一次的...

Java中內部類

內部類的規則 1.內部類可以直接訪問外部類中的成員,包括私有。之所以可以直接訪問外部類中的成員,是因為內部類中持有乙個外部類的引用,格式 外部類名.this 2.外部類要訪問內部類,必須建立內部類物件 訪問格式 1.當內部類定義在外部類的成員位置了,而且非私有,可以在外部其他類中。可以直接建立內部類...

java中內部類

下面我列出個程式,能看懂這個程式的錯誤相信對內部類的理解就變得容易多了 class innerclassdemo6 public void method public static void main string args 在這個程式中有兩個錯誤的地方 另外乙個程式,補足程式,用到匿名內部類的知識...