# 基本語法
## 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類