1. 程式人生 > 其它 >程式設計基礎·Java學習筆記·面向物件(上)

程式設計基礎·Java學習筆記·面向物件(上)

Java程式設計基礎之面向物件(上)

(自適應學習進度而進行記錄的筆記,希望有一些小小的用處吧(^∀^●)ノシ)

(新人上路,望多指教,如有錯誤,望指正,萬分感謝(o゚v゚)ノ)

目錄

一、面向物件

(一)面向物件程式設計(Object Oriented Programming,OOP)

(二)包與類(package & class)

(三)物件、方法與屬性(Object & Methods & Properties)

(四)方法(Method)

(五)構造器(Constructor)

 

一、面向物件

  (一)面向物件程式設計(Object Oriented Programming,OOP)

  1.在Java中,程式由面向物件為核心進行設計,該方法認為程式由一系列物件組成。類是對現實世界的抽象,包括表示靜態屬性的資料和對資料的操作,物件是類的例項化。 物件間通過訊息傳遞相互通訊,來模擬現實世界中不同實體間的聯絡。 在面向物件的程式設計中,物件是組成程式的基本模組。

  2.理解:在Java中。如果要實現一個方法,那麼首先,我們需要回答一些問題。1、這個方法所要做的事情是什麼;2、這個方法的物件是誰;

   根據這兩個問題,我們就擁有了建立一個方法最基礎的兩個元素:物件與成員方法,物件是指方法的例項化,即在一個具體的專案事件中的“誰”的問題,回答的就是問題2。除此之外【成員方法】也叫方法,回答的是“所作的事情是什麼?”

   此外,在日常生活中的問題,我們通常是一群人做一些事情,那麼我們“一群人”就是一個“類”,在這個類中,我們會擁有一些相同的特徵,這個相同特徵我們就稱之為“屬性”,也就是【成員變數】,而我們所作的事情,做事情的方法,在Java中我們用【成員方法】進行定義。而理解了“誰”在“做什麼”,我們也就明白了面向物件的基本原理,也就是面向物件程式設計。

   3.面向物件的三個特性:封裝、繼承、多型(在下文中會具體談到)

 

  (二)包與類(package & class)

  1.理解:Java中,可以用包對類進行分類儲存。包與類的形式類似於我們日常使用檔案的資料夾的形式,檔案 = 類,資料夾 = 包;

  2.包名:包名一律用小寫完成,如果多個單詞則直接連線,如:methodloading、methodcall;

  3.類名:類名一般除了每個單詞外都用小寫完成,單詞首字母用大寫,如果多個單詞則直接連線,如:MethodLoading、MethodCall;

  4.包的使用:

   包:包中可以繼續建立包,構成包的疊加,表示方法:package01.package02.package03……使用小數點進行連線

   引包:包的呼叫,需要用到關鍵詞import,如果要呼叫包的所有檔案,則使用 * ;即:

    import package01;  
    import package01.package02;  
    import package01.*;

   第二種引包的方式:在例項化時,例項化物件中加入包名,即可完成呼叫,即:

    package01.getAge a = new package01.getAge;

  5.類的使用:

   類的寫法:修飾詞 class 類名{  };

   類的修飾詞:abstract  final  private  public;  (暫時還沒學到,先不做記錄,插個眼罷)

   類的關鍵詞:extents關鍵詞,通過extents可以將兩個類進行父子類的定義,即將extents前類定義為extents後類的子類

         

 

  (三)物件、方法與屬性(Object & Methods & Properties)

  1.物件:前文說到,物件在Java中是方法的例項化,定義一個新物件,就能對方法進行執行、呼叫等一系列的操作。換而言之,如果要使用呼叫方法,則一定要例項化物件。畢竟,只是有模板還不夠,要實現具體的東西,仍然要往樹丫上填上綠葉與紅花。

  2.方法:在Java中,我們會把要做的事情放入方法中,然後把這個方法進行【封裝】,當下一次要用到時,可以進行呼叫或是【繼承】。

  3.屬性:除了方法以外,我們的每一個物件都會有不同的屬性,這些屬性在很大部分中可能都是重複的,這個時候我們所準備的屬性就可以重複進行呼叫,節約很多的記憶體冗餘。這種【繼承】的思想,也是Java面向物件中的重要思想。

   Example01.有一個代表著人類的Person類,他的屬性有name名字、age年齡、sex性別等,他也有方法可以列印name、age、sex;此時,我們有一個新的類Student,他自然也需要屬性name名字、age年齡、sex性別等,這時,我們就可以從Person類中直接呼叫這些屬性,當然,也可以呼叫Person類中的方法。

  4.屬性的寫法:修飾詞 型別 屬性名;(可以賦值,也可以不賦值。當不賦值時,會自動生成一個為0、null、false……的值)

    修飾詞:由大到小依次為public  protected  default(預設)  private

        //修飾詞所能使用的範圍:

修飾詞 子類 任何地方
private      
default    
protected  
public

  5.方法的寫法:修飾詞 返回值 方法名(  ){  }

   static:靜態方法只能呼叫靜態變數與靜態方法;

   返回值:當返回值為void的時候,方法內不需要寫返回值,此時表示返回0;當返回值為一個確定的型別時,如String、double等,需要手動新增返回值return,返回值必須與確定的型別相同。

   小括號:小括號中是可以加變數的,此時加入進去的變數被稱為形參,形參進行書寫時,格式是(資料型別 形參名),同時如果不需要形參時,括號可以為空但不能不寫。

   大括號:大括號中的內容就是方法的具體內容;

  6.物件的例項化:類名 物件名稱 = new 類名();

   例項化時,前後類名可以不進行對應,此時情況為前後類為父子類。前類為父類,後類為子類。此時如果進行呼叫,那麼呼叫的如果時成員變數,不能呼叫子類中的成員變數,只能在父類的成員變數中進行呼叫一個引用型別變數如果宣告為父類的型別,但實際引用的是子類的物件,那麼該變數就不能再訪問子類中新增的屬性和方法。)。如果此時呼叫的成員方法,那麼呼叫的方法是子類中的方法而不是父類,也就是後類的方法。

 

  (四)方法(Method)

    1.方法也稱成員方法,他類似於函式,用於描述物件的行為;

  2.方法的呼叫:圖解(還沒畫)JVM模型

    3.方法的可變個數的引數:

   方法一:陣列

   我們定義一個數組,通過往陣列中新增成員變數來完成可變個數的引數的記錄

public class Person {
 public void printInfo(String[] args){
        for(int i = 0 ; i < args.length ; i++){
            System.out.println(args[i]);
        }
    }
}

public static void main(String[] args) {
        Person p = new Person();
        //通過陣列定義,輸入字串陣列args,實現方法的可變個數的引數
        String[] x = new String[]{"Tom","10","男"} ;
        p.printInfo(x);
        //如若進行新引數的定義,則進行新陣列的定義即可實現
        String[] y = new String[]{"北京省xxx","13100225588","530225312052552"}  ;
        p.printInfo(y);
}

   方法二:Java特定的迭代方式

   我們通過特定的方式“...”來對引數實現可變個數的記錄

public class Person {
  public void printInfoo(String... args){
        for(int i = 0 ; i <args.length ; i++){
            System.out.println(args[i]);
        }
    }
}

public static void main(String[] args) {
 p.printInfoo("張三","18","女","雲南省xxx","18055663322","568759522568555");
 }

  4.方法的過載:Java中,允許在一個程式中定義多個名稱相同,但是引數的型別或個數不同的方法,這就是方法的過載

public class test03 {
    //方法的過載
    public void mOL (int x){
            System.out.println("x="+(x*x));
        }

    public void mOL(int x,int y){
        System.out.println("x="+(x*x+y*y));
        }

    public  void mOL(String x){
            System.out.println("x="+x);
    }

    public static void main(String[] args) {
        test03 t = new test03();
        t.mOL(2);
        t.mOL(6,5);
        t.mOL("Tom");
    }

  5.方法的遞迴:在Java中,一個方法的內部呼叫自身的過程

   需要注意的是,遞迴必須要有結束條件,不然就會陷入無限遞迴的狀態,永遠無法結束呼叫;

   每次遞迴都需要逐步遞減,直到有結束值;

public static int getSum(int n){
        if(n == 1){
            return 1;
        }
        int temp = getSum(n - 1);
        return temp + n;
    }

    public static void main(String[] args) {
        int sum = getSum(4);
        System.out.println("Sum = " + sum);
    }

  5.匿名呼叫

  匿名呼叫方式: 類名 物件名 = new 呼叫類名().方法名();

public class Circle {
 public double area(double r){
        return r*r*3.14;
    }
}

public class test02 {
    public static void main(String[] args) {
        //匿名呼叫測試
        double area = new Circle().area(3);
        System.out.println("半徑為3的圓的面積為:" + area);
    }
}

 

 

 

  (五)構造器(Constructor)

  1.構造器也就是構造方法,在Java中,構造方法在類例項化物件時會被自動呼叫,可以把他看作類的一個特殊成員;

  2.構造器的寫法:修飾詞 方法名(  ){  }

  3.條件要求:完成構造方法需要同時滿足以下三個條件

   方法名與類名相同;

   在方法名的前面沒有返回型別的宣告;

   在方法中不能使用return語句返回一個值,但是可以單獨寫return語句來作為方法的結束。

  4.構造器的過載:方法可以過載,構造方法也可以過載

   在構造器中對方法進行輸入,直接使用 new 類名 即可完成;

//構造器過載
//使得物件的建立更加靈活,方便建立各種不同的物件
//構造器過載,引數列表必須不同
public class Person {
    public Person(int a){}
    public Person(String b){}
    public Person(int a,String b){}
}

public class test {
    public static void main(String[] args) {
        new Person(10);
        new Person("張三");
        new Person(30,"李四");
    }
}