那些年做的java基礎(chǔ)筆記

# 基本語法

## java基本數(shù)據(jù)類型

1. 數(shù)值型

* 整數(shù)類型:byte(8)、short(16)讥邻、int(32)迫靖、long(64)

* 浮點類型:float、double <strong>(double兴使,雙精度數(shù)值系宜,表示的數(shù)據(jù)類型是float類型的雙倍)</strong>

2. 字符型:char ('a')

3. 布爾型:boolean (true,false)

注意:

1. JAVA默認(rèn)正數(shù)類型是int類型,如果需要聲明正數(shù)是long類型发魄,必須在數(shù)字末尾添加字母“L”

long lon = -1245L蜈首;

2. float類型數(shù)值要以F作為后綴,沒有后綴,默認(rèn)為double類型欢策;

## 數(shù)據(jù)類型轉(zhuǎn)換

1. <strong>自動類型轉(zhuǎn)換:低精度向高精度類型轉(zhuǎn)換吆寨,適合于整數(shù)類型和浮點類型</strong>

byte類型-short類型-int類型-long類型-float類型-double類型

2. <strong>強制類型轉(zhuǎn)換:高精度向低精度類型轉(zhuǎn)換</strong>

注意:boolean不能被強制轉(zhuǎn)換為其他數(shù)據(jù)類型,反之亦然

## 賦值運算符

自增自減運算符:

++X:先將變量X的值+1踩寇,然后再引用該變量的值參與運算

X++:先將引用的變量參與表達(dá)式的運算啄清,然后再將其做+1處理

```java

public calss Operation{

? ? public static void main(String[] args){

? ? ? ? ? ? int m=5;

? ? ? ? ? ? int b=m++;

? ? ? ? ? ? System.out.println("變量b的值為:"+b);? // 5

? ? ? ? ? ? System.out.println("變量m的值為:"+m);? //6

? ? }

}

```

## 變量與常量

變量:type 標(biāo)識符? int age;

常量:final type 變量名稱[=值]? final float PI=3.1415926f俺孙;

## 變量的有效范圍

1. 成員變量(全局變量):定義在類體中辣卒,有效范圍是整個類的代碼段。在類體中的任何位置都可使用該變量睛榄。

? ? * 靜態(tài)變量:

? ? ? ? 1. 有效范圍是整個類荣茫,被類的所有實例共享。

? ? ? ? 2. 使用static定義场靴,調(diào)用變量啡莉,通過“類名.變量名”方式訪問。


? ? ? ? ```java

? ? ? ? public calss Variable{

? ? ? ? ? ? static int age=5;

? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? int m=5;

? ? ? ? ? ? ? ? int b=m++;

? ? ? ? ? ? ? ? System.out.println("靜態(tài)變量值為:"+Variable.age);? // 5

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? ```

? ? * 實例變量:

? ? ? ? 1. 與類的實例對應(yīng)旨剥,有效范圍為整個實例咧欣。


? ? ? ? ```java

? ? ? ? public calss Student{

? ? ? ? ? ? public static int amount=50;

? ? ? ? ? ? public int average=18;

? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? Student stu = new Student();

? ? ? ? ? ? ? ? System.out.println("班級人數(shù)為:"+Student.amount);? // 50

? ? ? ? ? ? ? ? System.out.println("平均年齡為:"+stu.average);? // 18

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? ```


2. 局部變量:

? ? * 局部變量只在當(dāng)前代碼塊才有效,不能用于其他類的方法中轨帜。

? ? * 局部變量可與全局變量的變量名稱相同魄咕,此時全局變量將被隱藏,可以使用“this”關(guān)鍵字訪問局部變量蚌父。



? ? ```java

? ? ? ? public calss Student{

? ? ? ? ? ? static String words = "全局變量";

? ? ? ? ? ? public void getStu(){

? ? ? ? ? ? ? ? String words ="局部變量";

? ? ? ? ? ? ? ? System.out.println("words變量現(xiàn)在是:" + words);? // 局部變量

? ? ? ? ? ? ? ? System.out.println("訪問全局變量:" + this.words);? // 全局變量

? ? ? ? ? ? }

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? Student stu = new Student();

? ? ? ? ? ? ? ? stu.getStu();

? ? ? ? ? ? }

? ? ? ? }

? ? ```


# 流程控制語句

## if條件判斷語句

1. 簡單的if條件語句


? ? ```java

? ? ? ? if(關(guān)系表達(dá)式){

? ? ? ? ? ? 復(fù)合語句

? ? ? ? }

? ? ```

? ? ```java

? ? ? ? public calss IfExercise{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? float price=60.89f;

? ? ? ? ? ? ? ? if(price<100){

? ? ? ? ? ? ? ? System.out.println("價格可以接受");?

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? System.out.println("over");

? ? ? ? ? ? }

? ? ? ? }

? ? ```

2. if...else語句


? ? ```java

? ? ? ? if(條件表達(dá)式){

? ? ? ? ? ? 復(fù)合語句1

? ? ? ? }

? ? ? ? else{

? ? ? ? ? ? 復(fù)合語句2

? ? ? ? }

? ? ```

? ? ```java

? ? ? ? public calss IfElseExercise{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? float price=60.89f;

? ? ? ? ? ? ? ? if(price<100){

? ? ? ? ? ? ? ? System.out.println("價格可以接受");?

? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? System.out.println("太貴了哮兰,拒絕購買");?

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? System.out.println("over");

? ? ? ? ? ? }

? ? ? ? }

? ? ```

? ? <strong>注意:if...else語句可使用三元運算符代替,if(price<100)?"價格可接受":"太貴了苟弛,拒絕購買"</strong>?

3. if...else if多分支語句


? ? ```java

? ? ? ? if(條件表達(dá)式1){

? ? ? ? ? ? 復(fù)合語句1

? ? ? ? }

? ? ? ? else if(條件表達(dá)式2){

? ? ? ? ? ? 復(fù)合語句2

? ? ? ? }

? ? ? ? ...

? ? ? ? else if(條件表達(dá)式n){

? ? ? ? ? ? 復(fù)合語句n

? ? ? ? }

? ? ```


? ? ```java

? ? ? ? public calss Verdict{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? int number=14;

? ? ? ? ? ? ? ? if(number>20){

? ? ? ? ? ? ? ? System.out.println("變量number大于20");?

? ? ? ? ? ? ? ? }else if(number>10){

? ? ? ? ? ? ? ? System.out.println("變量number大于10小于20");?

? ? ? ? ? ? ? ? }else if(number>0){

? ? ? ? ? ? ? ? System.out.println("變量number大于0小于10");?

? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? System.out.println("變量number小于等于0");

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ```?

## switch語句

? ? ```java

? ? ? ? switch(條件表達(dá)式){

? ? ? ? ? ? case 常量表達(dá)式1:

? ? ? ? ? ? ? ? 語句塊1

? ? ? ? ? ? ? ? [break;]

? ? ? ? ? ? ...

? ? ? ? ? ? case 常量表達(dá)式n:

? ? ? ? ? ? ? ? 語句塊n

? ? ? ? ? ? ? ? [break;]

? ? ? ? ? ? default;

? ? ? ? ? ? ? ? 語句塊n+1;

? ? ? ? ? ? ? ? [break;]

? ? ? ? }

? ? ```?


? ? 1. 條件表達(dá)式為必要參數(shù)奠蹬;

? ? 2. 常量表達(dá)式必須與條件表達(dá)式類型相兼容的值;

? ? 3. 語句塊:可選參數(shù)嗡午,一條或多條語句囤躁,不需要大括號。當(dāng)表達(dá)式的值域常量表達(dá)式的值匹配時執(zhí)行荔睹,否則繼續(xù)判斷其他值狸演,直到常量表達(dá)式n;

? ? 4. break:可選參數(shù)僻他,用于跳出switch語句宵距;

? ? 5. default:可選參數(shù),如果沒有該語句吨拗,switch語句不與任何case語句常量值相同時满哪,不做任何處理婿斥。


? ? ```java

? ? ? ? public calss SwitchExercise{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? int week=3;

? ? ? ? ? ? ? ? switch(week){

? ? ? ? ? ? ? ? case 1:

? ? ? ? ? ? ? ? ? ? System.out.println("周一");

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? case 2:

? ? ? ? ? ? ? ? ? ? System.out.println("周二");

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? case 3:

? ? ? ? ? ? ? ? ? ? System.out.println("周三");

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? default:

? ? ? ? ? ? ? ? ? ? System.out.println("I dont't know");

? ? ? ? ? ? ? ? }

? ? ? ? }

? ? ```?

注意:如果不加break,則匹配之后哨鸭,會繼續(xù)判斷并執(zhí)行其他case民宿。比如,上述例子中像鸡,去除break之后活鹰,則會打印“周三”和"I dont't know"。

## 循環(huán)語句

1. for循環(huán)語句

? ? ```java

? ? ? ? for(初始化語句;循環(huán)語句;迭代語句){

? ? ? ? ? ? 語句序列

? ? ? ? }

? ? ```

? ? ```java

? ? ? ? public calss CountSum{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? int sum=0;

? ? ? ? ? ? ? ? for(int i=1;i<=100;i++){

? ? ? ? ? ? ? ? sum+=i;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? System.out.println("1~100的和為:"+sum);

? ? ? ? ? ? }

? ? ? ? }

? ? ```?

2. while循環(huán)語句:先進(jìn)行條件判斷只估,再執(zhí)行循環(huán)體中的內(nèi)容志群。

? ? ```java

? ? ? ? while(條件表達(dá)式){

? ? ? ? ? ? 循環(huán)體

? ? ? ? }

? ? ```

? ? ```java

? ? ? ? public calss GetSum{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? int x=1;

? ? ? ? ? ? ? ? int sum=0;

? ? ? ? ? ? ? ? while(x<=10){

? ? ? ? ? ? ? ? sum+=x;

? ? ? ? ? ? ? ? x++;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? System.out.println("1~10的和為:"+sum);

? ? ? ? ? ? }

? ? ? ? }

? ? ```

3. do...while循環(huán)語句:先執(zhí)行循環(huán)體中的內(nèi)容,再進(jìn)行條件判斷蛔钙,如果條件不滿足锌云,則不執(zhí)行循環(huán)體中內(nèi)容,即循環(huán)體中內(nèi)容至少執(zhí)行一次吁脱。

? ? ```java

? ? ? ? do{

? ? ? ? ? ? 語句序列? ? ? ?

? ? ? ? }while(條件表達(dá)式);

? ? ```

? ? ```java

? ? ? ? public calss Cycle{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? int number=100;

? ? ? ? ? ? ? ? while(number==60){

? ? ? ? ? ? ? ? ? ? System.out.println("使用while循環(huán)");

? ? ? ? ? ? ? ? ? ? number--;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? do{

? ? ? ? ? ? ? ? ? ? System.out.println("使用do...while循環(huán)");

? ? ? ? ? ? ? ? ? ? number--;

? ? ? ? ? ? ? ? }while(number==60);

? ? ? ? ? ? }

? ? ? ? }

? ? ```


? ? ## 結(jié)束本次循環(huán)的continue語句

? ? 1. continue語句用于終止當(dāng)前循環(huán)桑涎,返回到循環(huán)開始處,接著開始新的循環(huán)豫喧;

? ? 2. continue語句只能出現(xiàn)在循環(huán)語句:while、for幢泼、do...while語句中紧显;


? ? ```java

? ? ? ? public calss Continue{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? System.out.println("可以被10整除的數(shù)有:");

? ? ? ? ? ? ? ? for(int i=1;i<=100;i++){

? ? ? ? ? ? ? ? ? ? if(i%10!=0){

? ? ? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? System.out.println(i+"、");

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }? ? ? ?

? ? ? ? }

? ? ```


? ? ## 強行退出循環(huán)的break語句

? ? 1. 中途中斷循環(huán)執(zhí)行缕棵,可使用break強迫跳出循環(huán)孵班;

? ? 2. continue語句可出現(xiàn)在循環(huán)語句:while、for招驴、do...while語句中篙程;


? ? ```java

? ? ? ? public calss BreakPractice{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? int sum=0;

? ? ? ? ? ? ? ? int control=0;

? ? ? ? ? ? ? ? while(true){

? ? ? ? ? ? ? ? ? ? control++;

? ? ? ? ? ? ? ? ? ? if(control>100){

? ? ? ? ? ? ? ? ? ? ? ? System.out.println("1~100所有整數(shù)的和是:"+sum);

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? sum+=control;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ```


? ? ## 循環(huán)中使用標(biāo)簽

? ? 1. 指定程序跳轉(zhuǎn)至哪一行。

? ? 2. 使用break只能退出當(dāng)前循環(huán)别厘,如果想通過break語句退出嵌套的循環(huán)時虱饿,需要使用帶標(biāo)簽的break語句實現(xiàn)。

? ? 3. break和continue都可以配合標(biāo)簽使用。


? ? ```java

? ? ? ? 標(biāo)簽名稱:? //標(biāo)簽名稱的命名規(guī)則與變量的命名規(guī)則一致,可添加到程序的任意位置

? ? ```


? ? ```java

? ? ? ? public calss Multiplication{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? loop:

? ? ? ? ? ? ? ? for(int i=1;i<=9;i++){

? ? ? ? ? ? ? ? ? ? for(int j=1;j<=i;j++){

? ? ? ? ? ? ? ? ? ? ? ? System.out.println(i+"*"+j+"="+i*j+" ");

? ? ? ? ? ? ? ? ? ? ? ? if(j==5){

? ? ? ? ? ? ? ? ? ? ? ? ? ? break loop;

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? System.out.println();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ```


? ? 注意:


? ? 1. for循環(huán)主要針對有限循環(huán)而言哨免,也就是說叭莫,循環(huán)有上限的時候,一般使用for循環(huán)谐岁;

? ? 2. while循環(huán)則針對無限循環(huán)的代碼而言,當(dāng)程序沒有明確的上限,則一般使用while循環(huán)颈畸。

# 數(shù)組

## 一維數(shù)組

1. 創(chuàng)建數(shù)組的語法格式


? ? ```java

? ? ? ? 數(shù)組類型 數(shù)組名[];

? ? ? ? 或

? ? ? ? 數(shù)組類型[] 數(shù)組名;

? ? ```


? ? ```java

? ? ? ? // 如:

? ? ? ? int arr[];

? ? ? ? char arr[];

? ? ```


? ? ```java

? ? ? ? // 為數(shù)組分配內(nèi)存空間的格式如下:

? ? ? ? 數(shù)組名字 = new 數(shù)組類型[數(shù)組長度];


? ? ? ? // 如:

? ? ? ? int[] arr = new int[5];

? ? ```

2. 數(shù)組初始化


? ? ```java

? ? ? ? // 第一種初始化方式

? ? ? ? int arr[] = new int[] {1,3,5,7};


? ? ? ? // 第二種初始化方式

? ? ? ? int arr[] = {1,3,5,7};

? ? ```


? ? ```java

? ? ? ? int arr[] = new int[4];

? ? ? ? int arr[0]=1;

? ? ? ? int arr[1]=3;

? ? ? ? int arr[2]=5;

? ? ? ? int arr[3]=7;

? ? ```

3. 遍歷一維數(shù)組


? ? ```java

? ? ? ? public calss SearchArray{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? int day[]=new int[]{31,28,31,30,31};

? ? ? ? ? ? ? for(int i=0;i<5;i++){

? ? ? ? ? ? ? ? ? ? System.out.println((i+1)+"月有"+day[i]+"天");

? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ```

? ? ```java

? ? // length表示數(shù)組長度

? ? ? ? public calss SearchArray{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? int day[]=new int[]{31,28,31,30,31};

? ? ? ? ? ? ? for(int i=0;i<day.length;i++){

? ? ? ? ? ? ? ? ? ? System.out.println((i+1)+"月有"+day[i]+"天");

? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ```


##二維數(shù)組? ?

1. 聲明數(shù)組對象的語法格式


? ? ```java

? ? ? ? 數(shù)組類型 數(shù)組名[][];

? ? ? ? 或

? ? ? ? 數(shù)組類型[][] 數(shù)組名;

? ? ```


? ? ```java

? ? ? ? // 如:

? ? ? ? int arr[][];

? ? ? ? char arr[][];

? ? ```


? ? ```java

? ? ? ? // 為數(shù)組分配內(nèi)存空間的格式如下:

? ? ? ? 數(shù)組名字 = new 數(shù)組類型[數(shù)組長度][數(shù)組長度];


? ? ? ? // 如:

? ? ? ? int arr[][] = new int[5][5];

? ? ```


2. 二維數(shù)組初始化


? ? ```java

? ? ? ? 數(shù)組類型 變量名稱 [][]={

? ? ? ? ? ? {value1,value2,value3...valuen},

? ? ? ? ? ? {value1,value2,value3...valuen}

? ? ? ? ? ? ...

? ? ? ? }

? ? ? ? // 如:

? ? ? ? int arr[][]={{23,12,2},{12,45}} ;


? ? ? ? // arr[1]的第一個元素賦值為12:

? ? ? ? arr[1][0]=12;

? ? ```

3. 使用嵌套的for循環(huán)語句遍歷二維數(shù)組


? ? ```java

? ? ? ? public calss CountMark{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? int grades[][]={

? ? ? ? ? ? ? {77,68,86,73},

? ? ? ? ? ? ? {96,87,89,81},

? ? ? ? ? ? ? {70,90,86,81}

? ? ? ? ? ? ? } ;

? ? ? ? ? ? ? int lowGrade =? grades[0][0];

? ? ? ? ? ? ? for(int i=0;i<grades.length;i++){

? ? ? ? ? ? ? ? ? ? for(int column=0;column<grades[i].length;column++){

? ? ? ? ? ? ? ? ? ? ? ? if(grades[i][column]<lowGrade)

? ? ? ? ? ? ? ? ? ? ? ? ? ? lowGrade=grades[i][column];

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? }?

? ? ? ? ? ? ? int highGrade =? grades[0][0];

? ? ? ? ? ? ? for(int j=0;j<grades.length;j++){

? ? ? ? ? ? ? ? ? ? for(int column=0;column<grades[j].length;column++){

? ? ? ? ? ? ? ? ? ? ? ? if(grades[j][column]>highGrade)

? ? ? ? ? ? ? ? ? ? ? ? ? ? highGrade=grades[j][column];

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? }?

? ? ? ? ? ? ? System.out.println("最低分?jǐn)?shù)為:"+lowGrade);

? ? ? ? ? ? ? System.out.println("最高分?jǐn)?shù)為:"+highGrade);?

? ? ? ? ? ? }? ?

? ? ? ? }

? ? ```


4. 使用嵌套的for循環(huán)語句遍歷二維數(shù)組


? ? ```java

? ? ? ? public calss CountMark{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? int grades[][]={

? ? ? ? ? ? ? {77,68,86,73},

? ? ? ? ? ? ? {96,87,89,81},

? ? ? ? ? ? ? {70,90,86,81}

? ? ? ? ? ? ? } ;

? ? ? ? ? ? ? int lowGrade =? grades[0][0];

? ? ? ? ? ? ? for(int i=0;i<grades.length;i++){

? ? ? ? ? ? ? ? ? ? for(int column=0;column<grades[i].length;column++){

? ? ? ? ? ? ? ? ? ? ? ? if(grades[i][column]<lowGrade)

? ? ? ? ? ? ? ? ? ? ? ? ? ? lowGrade=grades[i][column];

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? }?

? ? ? ? ? ? ? int highGrade =? grades[0][0];

? ? ? ? ? ? ? for(int j=0;j<grades.length;j++){

? ? ? ? ? ? ? ? ? ? for(int column=0;column<grades[j].length;column++){

? ? ? ? ? ? ? ? ? ? ? ? if(grades[j][column]>highGrade)

? ? ? ? ? ? ? ? ? ? ? ? ? ? highGrade=grades[j][column];

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? }?

? ? ? ? ? ? ? System.out.println("最低分?jǐn)?shù)為:"+lowGrade);

? ? ? ? ? ? ? System.out.println("最高分?jǐn)?shù)為:"+highGrade);?

? ? ? ? ? ? }? ?

? ? ? ? }

? ? ```


5. 使用foreach遍歷二維數(shù)組

? ? ```java

? ? ? ? for(元素變量:遍歷對象){

? ? ? ? ? ? 循環(huán)體

? ? ? ? }

? ? ```


? ? ```java

? ? ? ? // 一維數(shù)組遍歷

? ? ? ? int[] array={12,34,43,22,13,58};

? ? ? ? for(int i :array){

? ? ? ? ? ? System.out.println(i);

? ? ? ? }

? ? ```


? ? ```java

? ? ? ? // 使用嵌套foreach循環(huán)語句遍歷二維數(shù)組

? ? ? ? public calss ArrayForEach{

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? ? ? int array[][]={{1,2,3},{7,8,9},{13,14,15}};

? ? ? ? ? ? ? ? ? ? for(int[] is:array){

? ? ? ? ? ? ? ? ? ? ? ? for(int is2:is){

? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println(is2+"\t");

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? System.out.println();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }? ?

? ? ? ? }

? ? ```


## 使用sort() 方法實現(xiàn)數(shù)組排序?

1. 語法:

? ```java

? ? Arrays.sort(array)

? ```


2. example:

? ```java

? ? public static void main(String[] args){

? ? ? ? int arr[]=new int[]{61,30,52,40,12,21};

? ? ? ? System.out.println("聲明的數(shù)組原有內(nèi)容如下:");

? ? ? ? for (int i = 0; i < arr.length; i++){

? ? ? ? ? ? System.out.println(arr[i]+"\t");

? ? ? ? }

? ? ? ? System.out.println("\n排序后的數(shù)組內(nèi)容如下:");

? ? ? ? Arrays.sort(arr);

? ? ? ? for (int i = 0; i < arr.length; i++){

? ? ? ? ? ? System.out.println(arr[i]+"\t");

? ? ? ? }

? ? }

? ```


##復(fù)制數(shù)組

1. Arrarys類的copyOf()方法:

? ```java

? ? // 語法

? ? copyOf(arr,int newlength)

? ? 注意:

? ? 如果新數(shù)組的長度乌奇,大于數(shù)組arr的長度,則用0填充眯娱。

? ? 根據(jù)復(fù)制數(shù)組的類型來決定填充的值礁苗,整型數(shù)組用0填充,char型數(shù)組則會使用null填充困乒。

? ? 如果復(fù)制后的數(shù)組長度小于數(shù)組arr的長度寂屏,會從數(shù)組arr的第一個元素開始,截取至滿足新數(shù)組長度為止娜搂。

? ```

? ```java

? ? public static void main(String[] args){

? ? ? ? int arr[]=new int[]{61,30,52};

? ? ? ? int newarr[]=Arrays.copyOf(arr,6);

? ? ? ? System.out.println("復(fù)制后新數(shù)組的元素為:");

? ? ? ? for (int i = 0; i < newarr.length; i++){

? ? ? ? ? ? System.out.println(newarr[i]+"");

? ? ? ? }

? ? }

? ```


2. Arrarys類的copyOfRange()方法:

? ```java

? ? // 語法

? ? copyOfRange(arr,int formIndex,int toIndex)

? ? 注意:

? ? formIndex:開始復(fù)制數(shù)組的索引位置迁霎,formIndex必須在0與整個數(shù)組的長度之間。新數(shù)組包括索引是formIndex的元素百宇。

? ? toIndex:復(fù)制范圍的最后索引位置考廉,可以大于數(shù)組arr的長度,新數(shù)組不包括索引是toIndex的元素携御。

? ```

? ```java

? ? public static void main(String[] args){

? ? ? ? int arr[]=new int[]{61,30,52,23,47};

? ? ? ? System.out.println("原數(shù)組的元素為:");

? ? ? ? for (int i = 0; i < arr.length; i++){

? ? ? ? ? ? System.out.println(arr[i]+"");

? ? ? ? }

? ? ? ? int newarr[]=Arrays.copyOfRange(arr,0,4);

? ? ? ? System.out.println("復(fù)制后的元素為:");

? ? ? ? for (int i = 0; i < newarr.length; i++){

? ? ? ? ? ? System.out.println(newarr[i]+"");

? ? ? ? }

? ? }

? ```


# 類與對象

## 類的定義

1. 聲明類的具體語法格式:

? ? ``` java

? ? class className{

? ? ? ? 成員變量

? ? ? ? ...

? ? ? ? 成員方法

? ? ? ? ...

? ? }

? ? ```

? ? ``` java

? ? public class Person{

? ? ? ? int age;

? ? ? ? public void say(){

? ? ? ? System.out.println("在類體中定義的方法");

? ? ? ? }

? ? }

? ? ```

## Java中的類包

1. 如何定義包:

? ? ```java

? ? package 包名昌粤;

? ? ```


? ? 將類Person定義在包com.cdd.util中:


? ? ```java

? ? package com.cdd.util;

? ? public class Person{

? ? ? ? int age;

? ? ? ? ... // 省略類體中的其他代碼

? ? }

? ? ```


2. 實現(xiàn)在類中導(dǎo)入包:

在每個類名之前添加完整的包名:

? ? ```java

? ? java.util.Date date=new java.util.Date();

? ? ```

import語句引入包中的類:

? ? ```java

? ? import com.wgh.Circ;

? ? ```

? ? ```java

? ? import com.wgh.*;

? ? ```


## Java中的類

1. 成員方法

成員方法定義了Java類的行為,類的成員方法由方法的聲明和方法體兩部分組成啄刹。

? ? ```java

? ? [修飾符]<方法返回值的類型><方法名>([參數(shù)列表]){

? ? ? ? [方法體]

? ? ? ? }

? ? ```


? ? ```java

? ? public class Person{

? ? ? ? public void print(){? ? ? ? //在類中定義成員方法

? ? ? ? ? ? System.out.println("類的成員方法d套!");

? ? ? ? }

? ? }

? ? ```


2. 靜態(tài)方法

在使用成員變量和成員方法時誓军,必須通過對象才能訪問袱讹。靜態(tài)方法則不同,直接通過類名就能調(diào)用昵时,或者通過類的實例來調(diào)用捷雕,還可以在類的非靜態(tài)方法中像訪問其他非靜態(tài)方法一樣去訪問靜態(tài)成員方法。

? ? ```java

? ? [修飾符]<方法返回值的類型><方法名>([參數(shù)列表]){

? ? ? ? [方法體]

? ? }

? ? ```

? ? ```java

? ? public class Chinese {

? ? ? ? public static void say() {? ? ? //創(chuàng)建靜態(tài)方法

? ? ? ? ? ? System.out.println("JavaClass類中的靜態(tài)方法壹甥!");

? ? ? ? }

? ? ? ? public void sing(){

? ? ? ? ? ? System.out.println("JavaClass類中的非靜態(tài)方法救巷!");

? ? ? ? }

? ? }

? ? ```

? ? ```java

? ? public class TestChinese {

? ? ? ? public static void main(String[] args){

? ? ? ? ? ? Chinese.say();? ? ? //調(diào)用Chinese類的靜態(tài)方法

? ? ? ? ? ? Chinese javaClass =new Chinese();? //創(chuàng)建Chinese類對象

? ? ? ? ? ? javaClass.sing();? //調(diào)用Chinese類的非靜態(tài)方法

? ? ? ? ? ? javaClass.say();? ? //調(diào)用Chinese類的靜態(tài)方法

? ? ? ? }

? ? }

? ? ```


3. 靜態(tài)塊

靜態(tài)塊是指不包含在任何方法體中的靜態(tài)代碼塊,應(yīng)用static關(guān)鍵字包圍句柠。當(dāng)類被加載時浦译,靜態(tài)塊就會被執(zhí)行且只被執(zhí)行一次。

? ? ```java

? ? public class Test {

? ? ? ? static{

? ? ? ? ? ? int age=32;

? ? ? ? ? ? System.out.println("int類型變量中age的值為:"+age);

? ? ? ? }

? ? public static void main(String[] args){

? ? ? ? ? ? new Test();

? ? ? ? ? ? new Test();

? ? ? ? }

? ? }

? ? ```


4. 權(quán)限修飾符

private:成員變量只能在本類中使用,在子類中不可見溯职,并且對其他包的類也是不可見的

public:不僅可以在本類中使用管怠,在子類和其他包的類也可以使用

protected:只有本包內(nèi)的該類的子類或其他類可以訪問此類中的成員變量和成員方法

5. 方法重載

在一個類中,出現(xiàn)多個方法名相同缸榄,但參數(shù)個數(shù)或者參數(shù)類型不同的方法渤弛,Java在執(zhí)行具有重載關(guān)系的方法時,將根據(jù)調(diào)用參數(shù)的個數(shù)和類型區(qū)分具體執(zhí)行的是哪個方法甚带。

? ? ```java

? ? public class Calculate {

? ? ? ? final float PI = 3.14159f;

? ? ? ? public float getArea(float r) {

? ? ? ? ? ? float area = PI * r * r;

? ? ? ? ? ? return area;

? ? ? ? }

? ? ? ? public float getArea(float l, float w) {

? ? ? ? ? ? float area = l * w;

? ? ? ? ? ? return area;

? ? ? ? }

? ? ? ? public void draw(int num) {

? ? ? ? ? ? System.out.println("畫" + num + "個任意形狀的圖形");

? ? ? ? }

? ? ? ? public void draw(String shape) {

? ? ? ? ? ? System.out.println("畫一個" + shape);

? ? ? ? }

? ? ? ? public static void main(String[] args) {

? ? ? ? ? ? Calculate calculate = new Calculate();

? ? ? ? ? ? float l = 20;

? ? ? ? ? ? float w = 30;

? ? ? ? ? ? float areaRectangle=calculate.getArea(l, w);

? ? ? ? ? ? System.out.println("長為"+l+"她肯,寬為"+w+"佳头,的矩形面積是:"+areaRectangle);


? ? ? ? ? ? float r=7;

? ? ? ? ? ? float areacirle=calculate.getArea(r);

? ? ? ? ? ? System.out.println("半徑為"+r+",的圓形面積是:"+areacirle);

? ? ? ? ? ? int num=7;

? ? ? ? ? ? calculate.draw(num);;

? ? ? ? ? ? calculate.draw("三角形");

? ? ? ? }

? ? }

? ? ```


6. 構(gòu)造方法

構(gòu)造方法是一種特殊的方法晴氨,它的名字必須與它所在的類的名字完全相同康嘉,并且沒有返回值,也不需要使用void進(jìn)行標(biāo)識籽前,在方法中不能用return語句返回一個值亭珍。構(gòu)造方法用于對對象中的所有成員變量進(jìn)行初始化,在創(chuàng)建對象時立即被調(diào)用枝哄。一個類中可以有多個構(gòu)造方法肄梨。

? ? ```java

? ? package com.practice;

? ? public class Fruit {

? ? ? ? public String color;

? ? ? ? public Fruit(){? ? ? //定義構(gòu)造方法

? ? ? ? ? ? color="綠色";

? ? ? ? }

? ? ? ? public void harvest(){

? ? ? ? ? ? String color="紅色";

? ? ? ? ? ? System.out.println("水果是:"+color+"的!");

? ? ? ? ? ? System.out.println("水果已經(jīng)收獲~");

? ? ? ? ? ? System.out.println("水果原來是:"+this.color);

? ? ? ? }

? ? ? ? public static void main(String[] args) {

? ? ? ? ? ? Fruit fruit=new Fruit();

? ? ? ? ? ? fruit.harvest();

? ? ? ? }

? ? }

? ? ```


7. 對象

? ? ```java

? ? 類名 對象名=new 類構(gòu)造方法();

? ? ```


? ? 構(gòu)造方法:是類創(chuàng)建對象時必須執(zhí)行的方法挠锥,用于構(gòu)造一個新的對象并初始化對象屬性众羡;


8. 匿名對象


? ? ```java

? ? Calculate calculate = new Calculate();

? ? calculate.draw();


? ? new calculate.draw();

? ? ```


# 字符的集合-字符串

## 創(chuàng)建字符串

1. 產(chǎn)生String對象

? ? ```java

? ? String str=new String("java編程詞典");? //使用String類的構(gòu)造方法創(chuàng)建字符串對象

? ? String str="java編程詞典";? //指定運算

? ? ```? ?

2. 獲取字符串的長度

? ? ```java

? ? str.length();

? ? ```


? ? ```java

? ? package com.practice;

? ? public class GetLength {

? ? ? ? public static void main(String[] args) {

? ? ? ? ? ? String name="一棵椰子樹";

? ? ? ? ? ? String address="一座孤島上";

? ? ? ? ? ? String message="在"+address+"有"+name;

? ? ? ? ? ? System.out.println("字符串"+name+"\t\t長度為:"+name.length());? ? //字符串一棵椰子樹 長度為:5

? ? ? ? ? ? System.out.println("字符串"+address+"\t\t長度為:"+address.length());? //字符串一座孤島上 長度為:5

? ? ? ? ? ? System.out.println("字符串"+message+"\t\t長度為:"+message.length());? //字符串在一座孤島上有一棵椰子樹 長度為:12

? ? ? ? }

? ? }

? ? ```? ?

3. 對字符串進(jìn)行截取

? ? ```java

? ? str.substring(int beginIndex)? //指定從某一索引處開始截取字符串

? ? ```

? ? ```java

? ? String str="Hello World";

? ? String substr=str.substring(3);? ? //lo World

? ? ```

? ? ```java

? ? substring(int beginIndex,endIndex)? //返回從字符串某一索引位置開始截取,至某一索引位置結(jié)束的子字符串

? ? ```

? ? ```java

? ? String str="Hello World";

? ? String substr=str.substring(0蓖租,7);? ? //Hello W 不包含endIndex這個索引位置的字符

? ? ```

4. 分割字符串

? ? ```java

? ? str.split(String sign)? //根據(jù)給定的分隔符對字符串進(jìn)行拆分

? ? sign:分割字符串的分隔符粱侣,也可以使用正則表達(dá)式

? ? ```

? ? ```java

? ? str.split(String sign,int limit) //根據(jù)給定的分隔符對字符串進(jìn)行拆分,并限定拆分的次數(shù)

? ? ```

? ? ```java

? ? package com.practice;

? ? public class SubString {

? ? ? ? public static void main(String[] args) {

? ? ? ? ? ? String str = "公司名稱:明日科技蓖宦!公司所在城市:長春市齐婴。公司電話:********";

? ? ? ? ? ? String[] info = null;

? ? ? ? ? ? info = str.split("!|稠茂。");

? ? ? ? ? ? for (int i = 0; i < info.length; i++) {

? ? ? ? ? ? ? ? System.out.println(info[i]);

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? ```? ?

5. 去除字符串尾部空格

? ? ```java

? ? str.trim()?

? ? ```

6. 查找字符串

? ? ```java

? ? str.indexOf(ch) //用于獲取字符串中指定字符第一次出現(xiàn)處的索引柠偶,若字符沒有出現(xiàn)則返回-1

? ? ```

? ? ```java

? ? str.lastindexOf(ch) //用于獲取字符串中指定字符最后一次出現(xiàn)處的索引,若字符沒有出現(xiàn)則返回-1

? ? ```

? ? ```java

? ? str.indexOf(substr) //用于獲取字符串中指定字符串首次出現(xiàn)的索引位置主慰,如果子字符串作為該字符串的子字符串出現(xiàn)嚣州,則返回該子字符串的第一個字符的索引鲫售,如果沒有作為一個子字符串出現(xiàn)則返回-1

? ? ```

? ? ```java

? ? str.lastindexOf(substr) //用于獲取字符串中指定字符串最后一次出現(xiàn)的索引位置共螺,如果子字符串作為該字符串的子字符串出現(xiàn)了一次或更多次,則返回最后一次出現(xiàn)該子字符串的第一個字符的索引情竹,如果沒有作為一個子字符串出現(xiàn)則返回-1

? ? ```

? ? ```java

? ? indexOf(ch,startIndex) //根據(jù)指定的搜索起點藐不,搜索指定字符首次出現(xiàn)的位置

? ? ch:一個字符,unicode代碼點

? ? ```

? ? ```java

? ? int lastindexOf(ch,startIndex) //根據(jù)指定的搜索起點秦效,搜索指定字符最后一次出現(xiàn)的位置

? ? ch:一個字符雏蛮,unicode代碼點

? ? ```


7. 比較字符串是否相等

? ? ```java

? ? boolean equals(String str)? ? ? //嚴(yán)格區(qū)分大小寫

? ? boolean equalsIgnoreCase(otherString)? ? ? //不區(qū)分大小寫

? ? ```


# 繼承與多態(tài)

## 父類與子類

1. 定義子類

? ? ```java

? ? [修飾符]class 子類名 extends 父類名

? ? 修飾符:可選參數(shù),用于指定類的訪問權(quán)限阱州,可選值為:public挑秉,abstract,final

? ? 子類名:必須參數(shù)苔货,一般要求首字母大寫

? ? ```

? ? ```java

? ? package com.practice;

? ? public class Car {

? ? ? ? public String color="黑色";

? ? ? ? public int speed=1;

? ? ? ? public int level;

? ? ? ? public void gear(int num){

? ? ? ? ? ? level=num;

? ? ? ? ? ? speed=10*level*level;

? ? ? ? }

? ? ? ? public void driver(){

? ? ? ? ? ? System.out.println("我是一輛"+color+"的轎車犀概。");

? ? ? ? ? ? System.out.println("現(xiàn)在以時速"+speed+"公里每小時的速度形式中立哑。");

? ? ? ? ? ? System.out.println("車檔位是"+level+"檔。");

? ? ? ? }

? ? }

? ? ```

? ? ```java

? ? package com.practice;

? ? public class SonCar extends Car {

? ? ? ? public static void main(String[] args){

? ? ? ? ? ? SonCar sonCar=new SonCar();

? ? ? ? ? ? sonCar.gear(5);

? ? ? ? ? ? sonCar.driver();

? ? ? ? }

? ? }

? ? ```

? ? ```

? ? --------------

? ? 我是一輛黑色的轎車姻灶。

? ? 現(xiàn)在以時速250公里每小時的速度形式中铛绰。

? ? 車檔位是5檔。

? ? --------------

? ? ```

2. 子類覆蓋父類

? ? ```

? ? 1. 方法的覆蓋也叫做方法的重寫产喉,被覆蓋的方法必須和覆蓋方法具有相同的方法名稱捂掰、參數(shù)以及返回值類型;

? ? 2. 子類不能覆蓋父類中聲明為final或者static的方法曾沈;

? ? 3. 子類必須覆蓋父類中聲明為abstract的方法这嚣,或者子類也將該方法聲明為abstract;

? ? 4. 子類覆蓋父類中的同名方法時晦譬,子類中方法的聲明也必須和覆蓋中被覆蓋的方法的聲明相同疤苹;

? ? 5. 子類的訪問權(quán)限必須要比父類的訪問權(quán)限大;

? ? ```

? ? ```java

? ? package com.practice;

? ? public class Person {

? ? ? ? public String name;

? ? ? ? public int age;

? ? ? ? public void getInfo(){

? ? ? ? ? ? System.out.println("姓名為:"+name);

? ? ? ? ? ? System.out.println("年齡為:"+age);

? ? ? ? }

? ? }

? ? ```

? ? ```java

? ? package com.practice;

? ? public class Worker extends Person{

? ? ? ? String company;

? ? ? ? public void getInfo(){

? ? ? ? ? ? System.out.println("姓名為:"+name);

? ? ? ? ? ? System.out.println("年齡為:"+age);

? ? ? ? ? ? System.out.println("公司為:"+company);

? ? ? ? }


? ? ? ? public static void main(String[] args){

? ? ? ? ? ? Worker worker=new Worker();

? ? ? ? ? ? worker.name="張三";

? ? ? ? ? ? worker.age=18;

? ? ? ? ? ? worker.company="科技公司";

? ? ? ? ? ? worker.getInfo();

? ? ? ? }

? ? }

? ? ```

3. super關(guān)鍵字

如果在子類中想調(diào)用父類中被覆蓋的方法敛腌,可以使用super關(guān)鍵字卧土。

? ? * 使用super關(guān)鍵字操作父類中被覆蓋的方法


? ? 如果要在子類中使用被父類隱藏的成員變量或方法,就可以使用super關(guān)鍵字像樊。

? ? 例如訪問父類的成員變量x:

? ? ```java

? ? super.x

? ? ```

例如訪問父類中的方法play(),代碼為:

? ? ```java

? ? super.play()

? ? ```

? ? ```java

? ? package com.practice;

? ? public class Worker extends Person{

? ? ? ? String company;

? ? ? ? public void getInfo(){

? ? ? ? ? ? super.getInfo();

? ? ? ? ? ? System.out.println("公司為:"+company);

? ? ? ? }


? ? ? ? public static void main(String[] args){

? ? ? ? ? ? Worker worker=new Worker();

? ? ? ? ? ? worker.name="張三";

? ? ? ? ? ? worker.age=18;

? ? ? ? ? ? worker.company="科技公司";

? ? ? ? ? ? worker.getInfo();

? ? ? ? }

? ? }

? ? ```

? ? * 使用super關(guān)鍵字操作父類中被覆蓋的方法調(diào)用父類的構(gòu)造方法


? ? 子類并不繼承父類的構(gòu)造方法尤莺。如果子類要使用父類的構(gòu)造方法,需要使用super關(guān)鍵字生棍,并且一定要在子類的構(gòu)造方法中使用颤霎。



? ? ```java

? ? super([構(gòu)造參數(shù)列表])

? ? ```?

4. 方法重載

在一個類中,出現(xiàn)多個相同名稱的方法涂滴,但是參數(shù)類型與參數(shù)個數(shù)不相同友酱。

# 接口與抽象類

## 接口

1. 接口定義

? ? ```java

? ? [修飾符]interface 接口名 [extends 父接口名列表]{

? ? [public][static][final] 常量;

? ? [public][abstract]方法柔纵;

? ? }

? ? ```

? ? ```java

? ? public interface Calculate{

? ? ? ? final float PI=3.14159f;

? ? ? ? float getArea(float r);

? ? ? ? float gerCircumference(float r);

? ? }

? ? ```?

2. 實現(xiàn)接口

在實現(xiàn)接口時缔杉,一次則可以實現(xiàn)多個接口,每個接口間使用逗號分隔搁料。


? ? ```java

? ? [修飾符] class <類名> [extends 父類名] [implemennts 接口列表]{

? ? }

? ? ```

? ? ```java

? ? package com.practice;

? ? public interface Calculate1 {

? ? ? ? final float PI=3.14159f;

? ? ? ? float getArea(float r);

? ? ? ? float getCircumference(float r);

? ? }

? ? ```

? ? ```java

? ? package com.practice;

? ? public class Round implements Calculate1 {

? ? ? ? @Override

? ? ? ? public float getArea(float r) {

? ? ? ? ? ? float area = PI * r * r;

? ? ? ? ? ? return area;

? ? ? ? }

? ? ? ? @Override

? ? ? ? public float getCircumference(float r){

? ? ? ? ? ? float circumference=2*PI*r;

? ? ? ? ? ? return circumference;

? ? ? ? }


? ? ? ? public static void main(String[] args){

? ? ? ? ? ? Round round=new Round();

? ? ? ? ? ? float r=3f;

? ? ? ? ? ? float area=round.getArea(r);

? ? ? ? ? ? float circumference=round.getCircumference(r);


? ? ? ? ? ? System.out.println("半徑為:"+r+"的圓的面積為:"+area);

? ? ? ? ? ? System.out.println("半徑為:"+r+"的圓的周長為:"+circumference);

? ? ? ? }

? ? }

? ? ```?

3. 定義抽象類

抽象類只聲明方法的存在或详,而不去具體實現(xiàn)它的類。

抽象類不能被實例化郭计,不能使用new關(guān)鍵字來創(chuàng)建對象霸琴。

使用抽象類的好處在于,當(dāng)有的方法在父類中不想實現(xiàn)時昭伸,可以不用實現(xiàn)梧乘。

? ? ```java

? ? abstract class 類名{

? ? ? ? 類體

? ? }

? ? ```

? ? ```java

? ? abstract class Fruit{

? ? ? ? public String color;

? ? ? ? public Fruit(){

? ? ? ? ? ? color="綠色";

? ? ? ? }

? ? }

? ? ```

4. 解析抽象方法

在一個抽象類中,可以定義一個或多個抽象方法庐杨;

定義抽象方法需要在方法的聲明處使用關(guān)鍵字abstract.

? ? ```java

? ? abstract <方法返回值類型> 方法名(參數(shù)列表);

? ? ```

? ? ```java

? ? public abstract void harvest();

? ? ```

? ? ```java

? ? package com.practice;

? ? abstract class Fruit1 {

? ? ? ? public String color;


? ? ? ? public Fruit1() {

? ? ? ? ? ? color = "綠色";

? ? ? ? }

? ? ? ? public abstract void harvest();

? ? }

? ? ```

? ? ```java

? ? package com.practice;

? ? public abstract class Apple extends Fruit1{

? ? ? ? public String color;

? ? ? ? public Apple(){

? ? ? ? ? ? color="綠色";

? ? ? ? }

? ? ? ? public abstract void harvest();

? ? }

? ? ```

? ? ```java

? ? package com.practice;

? ? public class Pear extends Fruit1{

? ? ? ? public void harvest(){

? ? ? ? ? ? System.out.println("大白梨成熟啦选调!");

? ? ? ? }

? ? }

? ? ```

? ? ```java

? ? package com.practice;

? ? public class Farm {

? ? ? ? public static void main(String[] args) {

? ? ? ? ? ? Apple apple= new Apple() {

? ? ? ? ? ? ? ? @Override

? ? ? ? ? ? ? ? public void harvest() {

? ? ? ? ? ? ? ? ? ? System.out.println("大蘋果成熟啦嗡善!");

? ? ? ? ? ? ? ? }

? ? ? ? ? ? };

? ? ? ? ? ? apple.harvest();

? ? ? ? ? ? Pear pear=new Pear();

? ? ? ? ? ? pear.harvest();

? ? ? ? }

? ? }

? ? ```

5. 創(chuàng)建內(nèi)部類

一個類定義在另一個類的內(nèi)部,那么就稱之為內(nèi)部類学歧,也叫做嵌套類罩引。

在類中直接定義的內(nèi)部類的使用范圍,僅限于這個類的內(nèi)部枝笨。

例如袁铐,在類A中定義了類B,那么類B為類A所知横浑,但卻不被A的外部所知剔桨。

在內(nèi)部類中可以引用它所在的外部類的所有變量和方法。

內(nèi)部類可以使用private或protected來修飾徙融。

? ? ```java

? ? package com.practice;

? ? public class Outer {

? ? ? ? private String strOut = "我是外部類中的變量";


? ? ? ? private void test() {

? ? ? ? ? ? Inner inner = new Inner();

? ? ? ? ? ? inner.transfer();

? ? ? ? }


? ? ? ? class Inner {

? ? ? ? ? ? void transfer() {

? ? ? ? ? ? ? ? System.out.printf("在內(nèi)部類中調(diào)用外部類中變量: %s", strOut);

? ? ? ? ? ? }

? ? ? ? }


? ? ? ? public static void main(String[] args) {

? ? ? ? ? ? Outer outer = new Outer();

? ? ? ? ? ? outer.test();

? ? ? ? }

? ? }

? ? ```


# 集合

## collection集合

1. Collection集合

? ? collection集合又稱為容器洒缀,他們與數(shù)組不同,數(shù)組的長度是固定的欺冀,集合的長度是可變的树绩,數(shù)組用來存放基本類型的數(shù)據(jù),集合用來存放類對象的引用隐轩。

2. collection接口

? ? collection接口是List接口和Set接口的父接口饺饭,通常情況下不被直接使用。

3. collection接口中的常用方法

? ? * add()方法? ? ? 向指定的集合中添加對象职车。

? ? ? ? ```java

? ? ? ? package com.practice;

? ? ? ? import java.util.ArrayList;

? ? ? ? import java.util.Collection;

? ? ? ? import java.util.Iterator;


? ? ? ? public class Append {

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? Collection list=new ArrayList();

? ? ? ? ? ? ? ? list.add("apple");

? ? ? ? ? ? ? ? list.add("pear");

? ? ? ? ? ? ? ? list.add("apple");

? ? ? ? ? ? ? ? Iterator it=list.iterator();

? ? ? ? ? ? ? ? System.out.println("集合中的元素有:");


? ? ? ? ? ? ? ? while (it.hasNext()){

? ? ? ? ? ? ? ? ? ? String str=(String)it.next();

? ? ? ? ? ? ? ? ? ? System.out.println(str);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? ```


? ? * addAll()方法? ? 將指定集合中的所有對象都添加到集合中瘫俊,如果對該集合進(jìn)行了泛化,則要求指定集合中的所有對象都符合泛化類型悴灵,否則編譯程序時將拋出異常扛芽。

? ? ? ? ```java

? ? ? ? package com.practice;

? ? ? ? import java.util.ArrayList;

? ? ? ? import java.util.Collection;

? ? ? ? import java.util.Iterator;


? ? ? ? public class AddGather {

? ? ? ? ? ? public static void main(String[] args){

? ? ? ? ? ? ? ? String apple="Apple";

? ? ? ? ? ? ? ? String pear="Pear";

? ? ? ? ? ? ? ? String orange="Orange";

? ? ? ? ? ? ? ? Collection<String> list =new ArrayList<String>();

? ? ? ? ? ? ? ? list.add("apple");

? ? ? ? ? ? ? ? list.add("pear");

? ? ? ? ? ? ? ? list.add("orange");

? ? ? ? ? ? ? ? Collection<String> list2 =new ArrayList<String>();

? ? ? ? ? ? ? ? list2.addAll(list);

? ? ? ? ? ? ? ? Iterator<String> it=list2.iterator();


? ? ? ? ? ? ? ? System.out.println("集合中的對象為:");

? ? ? ? ? ? ? ? while(it.hasNext()){

? ? ? ? ? ? ? ? ? ? String str=it.next();


? ? ? ? ? ? ? ? ? ? System.out.println(str);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? ```? ?

4. iterator() 方法? ? 在指定的集合對象中創(chuàng)建迭代器,返回在此Collection的元素上進(jìn)行迭代的迭代器积瞒。當(dāng)獲取迭代器后川尖,通過迭代器Iterator對象的hasNext()方法,判斷集合中是有仍有元素可以迭代赡鲜,如果有則返回true空厌,否則返回false庐船。hasNext()方法通常被用在循環(huán)語句中银酬,作為判斷循環(huán)的條件。

5. removeAll()方法? ? 用來從該集合中移除同時包含在指定參數(shù)集合中的對象筐钟。如果集合中包含符合條件的對象揩瞪,則返回true,否則返回false篓冲。

? ? ```java

? ? package com.practice;

? ? import java.util.ArrayList;

? ? import java.util.Collection;

? ? import java.util.Iterator;


? ? public class RemoveCollection {

? ? ? ? public static void main(String[] args){

? ? ? ? ? ? Collection <String>? list=new ArrayList<String>();

? ? ? ? ? ? list.add("Java編程詞典");

? ? ? ? ? ? list.add("C++編程詞典");

? ? ? ? ? ? list.add("VB編程詞典");

? ? ? ? ? ? list.add("C#編程詞典");

? ? ? ? ? ? list.add(".net編程詞典");


? ? ? ? ? ? Iterator<String> it=list.iterator();

? ? ? ? ? ? System.out.println("集合中原有的對象為:");


? ? ? ? ? ? while(it.hasNext()){

? ? ? ? ? ? ? ? String obj=(String)it.next();

? ? ? ? ? ? ? ? System.out.println(obj);

? ? ? ? ? ? }


? ? ? ? ? ? Collection <String> list2=new ArrayList<String>();

? ? ? ? ? ? list2.add(".net編程詞典");

? ? ? ? ? ? list2.add("C#編程詞典");

? ? ? ? ? ? list.removeAll(list2);

? ? ? ? ? ? Iterator<String> it2=list.iterator();

? ? ? ? ? ? System.out.println("移除指定對象后集合中的對象為:");


? ? ? ? ? ? while(it2.hasNext()){

? ? ? ? ? ? ? ? String obj=(String)it2.next();

? ? ? ? ? ? ? ? System.out.println(obj);

? ? ? ? ? ? }


? ? ? ? }

? ? }

? ? ```

? ? ```

? ? --------------------

? ? 集合中原有的對象為:

? ? Java編程詞典

? ? C++編程詞典

? ? VB編程詞典

? ? C#編程詞典

? ? .net編程詞典

? ? 移除指定對象后集合中的對象為:

? ? Java編程詞典

? ? C++編程詞典

? ? VB編程詞典

? ? --------------------

? ? ```

## List集合

List集合包括List接口與List接口的所有實現(xiàn)類李破。List接口繼承Collection接口宠哄,因此具有該接口的所有方法。List集合中的對象允許重復(fù)嗤攻。Set集合中的對象沒有順序毛嫉。Map集合是按照Key-value形式進(jìn)行存儲的。

1. List接口

List集合為列表類型妇菱,以線性方式存儲對象承粤,可以通過對象的索引操作對象。因此該接口中包含一些與索引相關(guān)的方法闯团。

2. ArrayList類

ArrayList類實現(xiàn)了List接口辛臊,由ArrayList類實現(xiàn)的List集合采用數(shù)組結(jié)構(gòu)保存對象。

3. LinkedList類

LinkedList類實現(xiàn)了List接口房交,用LinkedList類實現(xiàn)的List集合采用鏈表結(jié)構(gòu)保存對象彻舰。

## Set集合

Set集合為集類型,集時最簡單的一種集合候味,存放于集中的對象不按特定方式排序刃唤,只是簡單地把對象加入集合中,類似于向口袋中放東西白群。不能存放重復(fù)對象透揣。

## Map集合

Map沒有繼承Collection接口,其提供的是key到value的映射川抡。Map中不能包含相同的key值辐真,每個key只能映射一個value。

1. Map接口

Map接口提供了將鍵映射到值的對象崖堤,集合中不能包含重復(fù)的鍵侍咱。

2. HashMap類

HashMap類實現(xiàn)了Map接口,由HashMap類實現(xiàn)的Map集合密幔,允許以null作為鍵對象楔脯,但是因為健對象不可以重復(fù),所以這樣的鍵對象只能有一個胯甩。

3. TreeMap類

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昧廷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子偎箫,更是在濱河造成了極大的恐慌木柬,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淹办,死亡現(xiàn)場離奇詭異眉枕,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門速挑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谤牡,“玉大人,你說我怎么就攤上這事姥宝〕嵊” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵腊满,是天一觀的道長断序。 經(jīng)常有香客問我,道長糜烹,這世上最難降的妖魔是什么违诗? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮疮蹦,結(jié)果婚禮上诸迟,老公的妹妹穿的比我還像新娘。我一直安慰自己愕乎,他們只是感情好阵苇,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著感论,像睡著了一般绅项。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上比肄,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天快耿,我揣著相機與錄音,去河邊找鬼芳绩。 笑死掀亥,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妥色。 我是一名探鬼主播搪花,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嘹害!你這毒婦竟也來了撮竿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤笔呀,失蹤者是張志新(化名)和其女友劉穎幢踏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凿可,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡惑折,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了枯跑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惨驶。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖敛助,靈堂內(nèi)的尸體忽然破棺而出粗卜,到底是詐尸還是另有隱情,我是刑警寧澤纳击,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布续扔,位于F島的核電站,受9級特大地震影響焕数,放射性物質(zhì)發(fā)生泄漏纱昧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一堡赔、第九天 我趴在偏房一處隱蔽的房頂上張望识脆。 院中可真熱鬧,春花似錦善已、人聲如沸灼捂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悉稠。三九已至,卻和暖如春艘包,著一層夾襖步出監(jiān)牢的瞬間的猛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工想虎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留衰絮,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓磷醋,卻偏偏與公主長得像猫牡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子邓线,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355