二 列舉
三 內部類
非靜態內部類
匿名內部類
一系列相同型別的元素有序的
連續的記憶體空間
初始化時固定大小
普通for迴圈, 增強for迴圈://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 (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 在這個程式中有兩個錯誤的地方 另外乙個程式,補足程式,用到匿名內部類的知識...