1. 程式人生 > >面向物件——類與物件的定義和使用

面向物件——類與物件的定義和使用

在這裡先給大家介紹一些名詞

OOA:面向物件分析
OOD:面向物件設計
OOP:面向物件程式設計

面向物件的三大特徵
a.封裝性:所謂封裝就是把客觀事物封裝成抽象的類,並且類可以讓自己的資料和方法只讓可信的類或物件操作,對不可信的進行隱藏。換句話說就是:每部草組隊外部而言不可見

b.繼承性:可以使用現有類的所有功能,並且在無需重新編寫原有程式碼的前提下對這些功能進行擴充套件

c.多型性(**):多型就是指一個類例項的相同方法在不同情形下有不同的表現形式,多型機制可以使得具有不同內部結構的物件可以共享相同的外部介面

面向物件最大的特徵:能進行現實生活的抽象

1、類與物件

類與物件的概念:
    類是一個共性的概念

,而物件時一個具體的、可以使用的事物
首先產生類,類是產生物件的藍圖,而後才可以產生物件,物件的所有行為一定在類中進行了完整定義
類的組成:
    1.方法(物件操作的行為)
    2.屬性(變數,描述了每個物件的具體特點)

類與物件的定義和使用
類的定義語法:
class 類名稱{
    屬性1;
    屬性2;
    屬性...
    
    方法1(){}
    方法2(){}
    方法...(){}
}

類中的方法不能由主方法直接呼叫,而是需要由物件呼叫

class Person{
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getInfo(){
        return "姓名:"+this.name+",年齡:"+this.age;
    }
}

有了類就可以產生物件
類名稱 物件名稱 = new 類名稱();

Person per = new Person("張三",23);

有了物件就可以呼叫例項變數和例項方法

System.out.println(per.name);//變數必須是public修飾,private修飾的變數不能被呼叫
System.out.println(per.getInfo());

完整程式碼:

class Person{
    public String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getInfo(){
        return "姓名:"+this.name+",年齡:"+this.age;
    }
}
public class Test {
    public static void main(String[] args) throws Exception {
        Person per = new Person("張三",23);
        System.out.println(per.name);
        System.out.println(per.getInfo());
    }
}

2、物件記憶體分析
棧記憶體:虛擬機器區域性變量表,存放區域性變數(儲存基本資料型別、物件引用-堆記憶體地址(物件名稱))

堆記憶體:儲存真正的資料,物件的屬性資訊
Person per = new Person();
只要出現了new關鍵字,就會在堆上分配記憶體並且產生Person類的物件per引用這部分記憶體per.name = "張三";

per.age = 23;
通過per的引用設定物件的屬性值,沒有設定之前堆記憶體中的屬性值為預設值,即name=null,age=0

物件(引用資料型別)必須在例項化後呼叫,否則會產生NullPointerException(執行時錯誤)編譯過程不會報錯

引用傳遞分析:
引用傳遞的本質:一塊堆記憶體空間可以被多個棧記憶體所指向
Person per1 = new Person();//new表示在堆上分配記憶體空間
Person per2 = new Person();


per1 = per2;//將per2所指向的堆記憶體地址賦值給per1,per1與per2指向同一塊堆記憶體空間
那麼之前per1所指向的堆空間就變為垃圾空間
垃圾空間:沒有任何棧記憶體指向的堆記憶體空間