1. 程式人生 > >java基礎3

java基礎3

java基礎

1.二維數組
定義:元素為一維數組的數組。
動態初始化方式一(指定有多少個長度相同的一維數組):
數據類型[][] 變量名 = new 數據類型[m][n];
m表示有多少個一維數組
n表示一維數組中有多少個元素
動態初始化方式二(指定二維數組中有多少個一維數組,每一個一維數組的長度不固定):
數據類型[][] 變量名 = new 數據類型[m][];
註:m這個數據必須給出,後面的數據可以不給
二維數組的靜態初始化
數據類型[][] 變量名 = new 數據類型[][]{{元素…},{元素…},{元素…}};

簡化格式:
數據類型[][] 變量名 = {{元素…},{元素…},{元素…}};

public class arrayarraydemo {
//  二維數組的遍歷
    public static void main(String[] args) {
//      定義一個靜態數組
        int [][]arr1={{1,2},{1,2,3},{21,4,5},{23,45,5}};
//      定義一個含有三個一維數組的二維數組,一維數組有4個元素
        int [][]arr=new int[3][4];
//      定義一個含有三個一維數組的數組
        int [][]arr2=new int[3][];
        showarray(arr1);
    }    public static void showarray(int arr1[][]){        
    for (int i = 0; i < arr1.length; i++) {            
               for (int j = 0; j < arr1[i].length; j++) {
            System.out.print(arr1[i][j]+" ");
            }
        }
    }

}

2.形式參數問題
如果形式參數是基本類型:
形式參數的改變,不影響實際參數。
如果形式參數是引用類型:
形式參數的改變,直接影響實際參序。

3 .冒泡排序
基本規則:相鄰兩個比較,大的放後面第一次排序完畢最大的元素在索引最大處,依此類推。
代碼實現

public class bubblesort {    public static void main(String[] args) {    
        int []a={1,223,34,532,64,8,56};
        bubbleSort(a);
        printArray(a);
    }    public static void bubbleSort(int[] a){    
    //冒泡排序方法,外層循環控制大的輪回,內層循環進行相鄰兩個元素比較把大的在
    //後面第一次輪回結束最大的元素在最後一位。
        for (int i = 0; i < a.length-1; i++) {           
         for (int j = 0; j < a.length-1-i; j++) {                
         if(a[j]>a[j+1]){                    
                  int temp=a[j];
                 a[j]=a[j+1];
                 [j+1]=temp;
                }               
            }
        }
    }    //構造一個遍歷數組的方法
    public static void printArray(int[] a){
        System.out.print("[");        
        for (int i = 0; i < a.length; i++) {            
           if(i==a.length-1){
           System.out.print(a[i]);
            }  else{
              System.out.print(a[i]+",");
                 }
        }
        System.out.println("]");
    }
}

3.選擇排序
基本規則:從0索引處開始依次與後面的比較,第一次結束後最小的位於0索引處,依次進行
代碼實現

public class selectSort {    
       public static void main(String[] args) {        
             int []arr={1,24,5,34,6,367,434,378};
        printArray(arr);
    }    
    //選擇排序
    public static void selectSort(int []arr){        
    //使用兩個for循環嵌套,假設i為最小數,用它跟數組中其他元素比較,
    //如果有比他小的就交換位置
        for (int i = 0; i < arr.length-1; i++) {           
         for (int j = 0; j < arr.length; j++) {                if(arr[i]>arr[j]){                    int temp=arr[i];
             arr[i]=arr[j];
             arr[j]=arr[i];      
                }
            }
        }
    }    
    //寫一個遍歷數組的方法
    public static void printArray(int[] arr){
        System.out.print("[");        
        for (int i = 0; i < arr.length; i++) {            
             if(i==arr.length-1){
            System.out.print(arr[i]);
            }else{
            System.out.print(arr[i]+",");
            
        }
        System.out.print("]");
    }
}

4.Arrays數組工具類
針對數組進行操作的工具類。提供了排序,轉換等功能。

成員方法:
public static String toString(int[] a):把數組轉成字符串
public static void sort(int[] a):對數組進行排序(有重載)
5.繼承
extends關鍵字可以進行類與類之間的繼承
格式:
class 子類名 extends 父類名 {

        } 

    父類:基類,超類
    子類:派生類

學生類:
        成員變量:name,age
        構造方法:無參,帶參
        成員方法:getXxx()/setXxx(),eat(),sleep()


    老師類:
        成員變量:name,age
        構造方法:無參,帶參
        成員方法:getXxx()/setXxx(),eat(),sleep()    

按照我們剛才對繼承的概述,我們可以找一個父類。

    人類:
        成員變量:name,age
        構造方法:無參,帶參
        成員方法:getXxx()/setXxx(),eat(),sleep()    

    學生類:繼承人類就可以了。
    老師類:繼承人類就可以了。

繼承的好處:
    A:提高了代碼的復用性
        多個類相同的成員可以放到同一個類中
    B:提高了代碼的維護性
        如果功能的代碼需要修改,修改一處即可
    C:讓類與類之間產生了關系,是多態的前提
方法重寫(子類的方法名,參數和父類完全一樣,將父類方法覆蓋):
1.必須存在繼承關系
2.父類的方法滿足不了你的需求,此時你就需要重寫父類的方法,實現自己想要實現的功能
繼承的特點:(代碼演示)
    A:Java只支持單繼承,不支持多繼承。
    B:Java支持多層(重)繼承(繼承體系)。

什麽時候使用繼承呢?
    繼承中類之間體現的是:”is a”的關系。就是子類必須是父類的對象。
    舉例:水果,香蕉
    舉例:水杯,水果 (不能采用繼承。)
    舉例:動物,狗

6.類的組成:
成員變量
構造方法
成員方法

繼承間的成員變量關系:
    A:名字不同,非常簡單。
    B:名字相同
        首先在子類局部範圍找
        然後在子類成員範圍找
        最後在父類成員範圍找(肯定不能訪問到父類局部範圍)
        如果還是沒有就報錯。(僅能在父類找)
        就近原則。

super
關鍵字

可以調用父類的方法
super:
super代表父類存儲空間的標識(可以理解為父類對象)

this和super的使用區別:
    A:成員變量
        this.成員變量   本類的成員變量
        super.成員變量  父類的成員變量
    B:成員方法
        this.成員方法() 本類的成員方法
        super.成員方法()父類的成員方法 
繼承間構造方法的關系:
    子類中所有的構造方法默認都會訪問父類中空參數的構造方法(super())


    因為子類會繼承父類中的數據,可能還會使用父類的數據。
    所以,子類初始化之前,一定要先完成父類數據的初始化。
    每個子類的構造方法的第一行,有一條默認的語句:
        super();

    註意:僅僅是完成數據的初始化,創建對象目前必須用new申請空間。

假如父類沒有無參構造方法,該怎麽辦呢?
    A:調用父類的其他構造方法。帶參構造。
        怎麽訪問呢?
            super(...)

註意:
    super(…)或者this(….)必須出現在第一條語句上。
    因為如果可以放後面的話,就會對父類的數據進程多次初始化。所以,只能放在第一條語句上。

建議:
    永遠給出無參構造方法。

7.final關鍵字
在實際開發的時候,有些方法的內容一旦寫定後,就不允許被改動。
即使是子類,也不允許。
Java為了解決這樣的問題就提供了一個關鍵字:final
最終的意思。它可以修飾類,方法,變量。
特點:
修飾方法,方法不能被重寫。
修飾類,類不能被繼承。
修飾變量,變量的值不能再改動。其實這個時候變量已經變成了常量。

常量:
    A:字面值常量
        ‘a‘,12,"hello"
    B:自定義常量
        就是把變量用final修飾。
        定義一個常量。
        final 數據類型 變量名;

8.多態
定義:同一個對象,在不同時刻表現出來的不同狀態。
多態的前提:
A:有繼承關系
B:有方法重寫(不是必要條件,但是只有有了方法重寫多態才有意義)
C:有父類引用指向子類對象
成員訪問特點
A:成員變量
編譯看左邊,運行看左邊
B:構造方法
子類構造默認訪問父類的無參構造
C:成員方法(重點理解)
編譯看左邊,運行看右邊

        為什麽變量和方法不一樣呢?
            方法重寫。
    D:靜態成員方法
        編譯看左邊,運行看左邊
        因為靜態的內容是和類相關的,與對象無關。

9.抽象類
抽象類特點:
A:抽象類和抽象方法必須用abstract關鍵字修飾
B:抽象類不一定有抽象方法,有抽象方法的類一定是抽象類
C:抽象類不能實例化
實例化並使用
按照多態的方式,由具體的子類實例化。其實這也是多態的一種,抽象類多態。
D:抽象類的子類
要麽是抽象類
,要麽重寫抽象類中的所有抽象方法

抽象類的作用:
    強制要求子類必須要重寫某些方法。    
類的組成:
    成員變量:
    構造方法:
    成員方法:
抽象類的成員:
    成員變量:可以是變量,也可以是常量。
    構造方法:有構造方法
      構造方法作用:用於子類訪問父類數據的初始化。
    成員方法:既可以是抽象的,也可以是非抽象的。

抽象類練習
以後我們在寫代碼的時候,有這樣的分析過程。
分析:
從具體到抽象。
實現:
從抽象到具體。
使用:

使用具體的類。


java基礎3