1. 程式人生 > 其它 >java面向物件及值傳遞和引用傳遞

java面向物件及值傳遞和引用傳遞

java面向物件

java的核心是面向物件(oop)

屬性+方法=類

java:

  • 面向過程:(線性)步驟簡單,第一步做XX,第二步XX...適合處理一些較為簡單的問題。
  • 面向物件:分類的思維:先思考解決問題需要哪些類-->對這些類進行單獨思考-->對某個分類下的細節進行面向過程的分析,適合處理複雜與多人協作的問題。

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

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

抽象的思想

三大特性:

  • 封裝
  • 繼承
  • 多型

從認識論角度:先有物件後有類,物件是具體事物。類是抽象的,是對物件的抽象。

從程式碼執行角度:先有類再有物件,類是物件的模板。

java方法呼叫

  • 靜態方法:含static修飾的方法,通過類名.方法名呼叫

  • 非靜態方法:通過例項化這個類來呼叫

package com.yuanyu.study;

public class Oop {
    public static void main(String[] args) {
        Oop.say(); //靜態方法直接 類名.方法名呼叫
        Oop oop=new Oop(); //非靜態方法先將類例項化再呼叫
        oop.listen();
    }

    public static void say(){ //靜態方法(static)
        System.out.println("hello");
    }

    public void listen(){ //非靜態方法
        System.out.println("I can listen.");
    }
}

hello
I can listen.

靜態方法與靜態方法可以直接相互呼叫

非靜態方法和非靜態方法可以直接相互呼叫

而靜態方法與非靜態方法不能直接相互呼叫

java值傳遞與引用傳遞

java是值傳遞

值傳遞:

package com.yuanyu.study;

public class Oop {
    public static void main(String[] args) {
        int a=1;
        System.out.println(a); //1
        Oop.change(a);
        System.out.println(a); //1
        /*Oop oop=new Oop();
        oop.change(a);
        System.out.println(a); //1
        */
    }
    //返回值為空
    public static void change(int a){
        a=10;
    }
    /*public  void change(int a){
        a=10;
    }
    */
}

引用傳遞:傳遞的是物件,本質還是值傳遞

package com.yuanyu.study;

public class Oop {
    public static void main(String[] args) {
        Student student=new Student(); //例項化Student類
        System.out.println(student.name); //null
        Oop.change(student);
        System.out.println(student.name); //Sue
    }

    public static void change(Student student){
        //student是一個類
        student.name="Sue";
    }
}

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