1. 程式人生 > 實用技巧 >JAVA的學習日記12

JAVA的學習日記12

Java面向過程&面向物件

  • 面向過程思想

步驟清晰簡單,第一步做什麼,第二步做什麼
面對過程適合處理一些較為簡單的問題

  • 面向物件的思想

物以類聚,分類的思維模式,思考問題首先會解決問題需要哪些分類,然後對這些分類進行單獨思考。最後,才對某個分類下的細節進行面向過程的思索。
面向物件適合處理複雜的問題,適合處理需要多人協作的問題

  • 對於描述複雜的事物,為了從巨集觀上把握、從整體上合理分析,我們需要使用面向物件的思路來分析整個系統。但是,具體到微觀操作,仍然需要面向過程的思路去處理。

什麼是面向物件

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

  • 面向物件程式設計的本質是:以類的方式組織程式碼,以物件的組織(封裝)資料

  • 抽象

  • 三大特性:

封裝
繼承
多型

  • 從認識論角度考慮是先有物件後有類。物件,是具體的事物。類,是抽象的,是對物件的抽象。
  • 從程式碼執行角度考慮是先有類後有物件。類是物件的模板。
package com.oop.Demo01;

//Demo01 類
public class Demo01 {
    //main 方法
    public static void main(String[] args) {


    }

    //回顧
    /*
    方法的定義:
        修飾符 返回值型別 方法名(引數){
            語句塊
            返回值
        }
     */
    public String sayHello(){
        return "Hello, World";
    }

    public void sayBye(){
        return;//結束語句,沒有返回值
    }

    public int max(int a, int b){
        return a > b ? a : b;
    }
    /*
    注意break、continue和return的區別:
        break:跳出switch語句,結束迴圈
        return:結束一個方法,返回一個結果【可能是一個值,也可能為空】
     */

    //方法名:符合規範,見名知意【重要的時候不能隨便寫】

    /*
    引數列表:
        引數的型別
        引數名
        引數【定長和不定長(...)】
     */

}

回顧一下方法的呼叫

靜態和非靜態方法

package com.oop.Demo01;

//
public class Demo02 {
    public static void main(String[] args) {
        //靜態方法可以直接呼叫
        Student.say();

        //非靜態方法要先例項化這個類 用new方法
        //物件型別 物件名 = 物件值;
        Student student = new Student();
        student.sayHello();
    }

    //這樣寫會報錯,原因:
    //static是和Demo02這個類一起載入的,在載入的時候b()還沒有被架載入,所以會報錯
    public static void a(){
//        b();
    }

    //物件例項化之後才存在,所以一個已經存在的呼叫一個不存在的會報錯
    public void b(){}
}
package com.oop.Demo01;

public class Student {
    //靜態發方法 static
    public static void say(){
        System.out.println("靜態類");
    }

    //非靜態類
    public void sayHello(){
        System.out.println("非靜態類");
    }
}

值傳遞和引用傳遞

package com.oop.Demo01;

//值傳遞
public class Demo03 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);  //1

        Demo03.change(a);
        
        System.out.println(a);  //1
    }
    public static void change(int a){
        a = 10;
    }
}

package com.oop.Demo01;

import com.cdoudou.method.Demo05;

//一個類裡面只能有一個public class,但是可以有多個class
//引用傳遞:本質還是值傳遞
public class Demo04 {
    public static void main(String[] args) {
        Person person = new Person();

        System.out.println(person.name);    //null

        Demo04.change(person);

        System.out.println(person.name);    //cdoudou
    }

    public static void change(Person person){
        //person是一個物件:指向的是---->Person person = new Person();這是一個具體的人,可以改變屬性!
        person.name = "coudou";
    }
}

//定義了一個person類,有一個屬性:name
class Person{
    String name;
}

this方法:指的就是當前的類

類和物件的關係

  • 類是一種抽象的資料型別,它是對某一類事物整體描述/定義,但是並不能代表某一個具體的事物

動物、植物、手機、電腦....
Person類、Pet類、Car類等,這些類都是用來描述/定義某一類具體的事物應該具備的特點和行為

  • 物件是抽象概念的具體例項
  • 小明就是人的一個具體例項,小明家裡的旺財就是狗的一個具體例項
  • 能夠體現出特點,展現出功能的是具體的例項,而不是一個抽象的概念

建立與初始化物件

  • 使用new關鍵字建立物件
  • 使用new關鍵字建立的時候,除了分配記憶體空間之外,還會給建立好的物件進行預設的初始化以及對類中構造器的呼叫
  • 類中的構造器也稱為構造方法,是在進行建立物件的時候必須要呼叫的。並且構造器有以下兩個特點:

1.必須和類的名字相同
2.必須沒有返回型別,也不能寫void

  • 構造器必須要掌握

主程式

package com.oop.demo02;

//一個專案應該只有一個main方法
public class Application {
    public static void main(String[] args) {
        //類:抽象的,需要例項化
        //類例項化後會返回一個自己的物件
        //student物件就是一個Student類返回的一個具體例項
        Student xiaoming = new Student();
        Student xiaohong = new Student();

        System.out.println(xiaoming.name);  //null
        System.out.println(xiaoming.age);   //0

        xiaoming.name = "cdoudou";
        xiaoming.age = 18;

        System.out.println(xiaoming.name);  //cdoudou
        System.out.println(xiaoming.age);   //18

        xiaohong.name = "doudou";
        xiaohong.age = 18;

        System.out.println(xiaohong.name);  //doudou
        System.out.println(xiaohong.age);   //18

    }
}

Student類


package com.oop.demo02;

public class Student {
    //屬性:
    String name;
    int age;


    //方法:
    public void study(){
        System.out.println(this.name+"在學習");
    }


}