java基礎中:什麼是類、什麼是對象

一、類與對象的概念

1.類

  • 是對具有共性事物抽象描述,是在概念上的一個定義,是人類實際抽象出來的結果,實際上是不存在的。比如(成績管理系統:學生類、班級類、課程類、成績類,這是人類通過智慧定義的名字,是抽象的名字

2.對象

//某一個類的對象
學生---jack
班級---32班
課程---J2SE
成績---jack成績
  • 以上“jack”、“3年2班”、“J2SE”和“jack成績”他們是具體存在的,稱爲對象,也叫實例。也就是說一個類的具體化或者說成實例化(學生類對應jack對象,班級類對應3年2班對象,課程類對應J2SE對象,成績類對應jack成績對象),就是對象或者說是實例
  • 對象與對象之間具有共同特徵,每個特徵對應的具體值不一樣(比如,姚明和身高正常的人,有高度這個共同特徵,高度所對應的具體值不一樣,所以要想訪問高度這個屬性,不能通過人這個類直接去訪問,而是通過先有對象才能訪問高度這個屬性)

3.總結

  • 一般來說,從類到對象是實例的過程,從對象到類的過程是抽象的過程
  • 因爲一波對象的存在,這一波對象的共同特徵進行抽象這種概念叫做
  • 類經過實例化、經過具體化就形成了對象,對象是實際存在個體

二、類的定義

1.語法

public class 類名{
    //屬性
    // 方法
}
  • 一個就是一個數據類型,定義一個類就是創建了一種類型,該類型爲引用類型
  • 一個文件(xxx.java)可以定義多個類,但是隻能有一個public修飾的類,並且此類名與文件名相同

2.屬性

  • 屬性來源於類的特徵(比如學生類屬性可以是名字,性別,地址,這些屬性都是靜態的)
  • 定義方法:數據類型 屬性名;
  • 命名要規範,可以使用駝峯命名法

3.方法

  • 方法來源於行爲(比如學生類可以唱,跳,打籃球)
  • 定義方式:
public 返回類型 方法名(參數 ){

具體代碼

}

4.總結

  • 類 = 屬性 + 方法

三、對象的創建和使用

1.創建對象

  • 創建對象語法:類型 對象名 = new 類型();

2.程序案例

  • 主程序
package 類與對象;

public class Test {
    //一個類可以創建N個對象,成員變量只屬於當前的對象(只屬於對象,不屬於類),
    // 只有通過對象纔可以訪問成員變量,通過類不能直接訪問成員變量
    public static void main(String[] args) {
        //1.創建Student類型的對象
        //new Student()創建對象,stu1是一個局部變量,這個局部變量的類型是Student類型,也就是一個引用類型
        //stu1該局部變量稱作引用,引用中保存了對象在堆中的內存地址
        //通過”引用.“去間接訪問堆中的對象
        Student stu1 = new Student();

        //一個類可以創建多個對象
        Student stu2 = new Student();

        //2.使用對象
        //訪問成員變量,必須使用“引用.”

        //name是成員變量,對象相關,必須先有對象才能訪問,必須使用“引用.”
        //包裝類的默認值都爲null
        //讀取過程
        System.out.println("id=" + stu1.getId());
        System.out.println("name=" + stu1.getName());
        System.out.println("sex=" + stu1.getSex());
        System.out.println("age=" + stu1.getAge());
        System.out.println("address=" + stu1.getAddress());

        //賦值
        stu1.setId(1001);
        stu1.setName("tom");
        stu1.setSex(true);
        stu1.setAge(20);
        stu1.setAddress("江蘇-xxx");

        System.out.println("----------------------");

        System.out.println("id=" + stu1.getId());
        System.out.println("name=" + stu1.getName());
        System.out.println("sex=" + (stu1.getSex()?"男":"女"));
        System.out.println("age=" + stu1.getAge());
        System.out.println("address=" + stu1.getAddress());
    }
}

  • Student類
package 類與對象;

import java.util.Date;

//定義現實世界中的學生類型
//Student是一個類,一種引用類型
//概念上的一個定義,現實世界中不存在,是人類自己定義的類的名字
public class Student {

    //屬性

    //成員變量(實例變量),非靜態變量
    //id是對象的級別的,必須先有對象才能訪問,不能使用類直接訪問
    //private修飾的數據只能在本類中訪問
    private Integer id;
    private String name;
    private Boolean sex;
    private Integer age;
    private String address;

    public Student() {
    }

    public Student(Integer id, String name, Boolean sex, Integer age, String address) {
        //id是屬性中的私有id,this.id是該構造方法中Integer id的值,兩個值不一樣
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.address = address;
    }

    public Integer getId() {    //成員方法,實例方法,非靜態方法
                                //成員方法必須使用”引用.“的方法進行訪問
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Boolean getSex() {
        return sex;
    }

    public void setSex(Boolean sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}


  • 輸出結果
id=null
name=null
sex=null
age=null
address=null
----------------------
id=1001
name=tom
sex=男
age=20
address=江蘇-xxx

3.執行流程原理及圖示

對象的創建和使用

  • new出來的東西統一在堆內存開闢空間存儲,開闢的這個空間屬於Student類型的空間,Student對象就有了
  • Student這個對象在堆內存中有它自己的內存地址,這個內存地址賦給了局部變量stu1,所以stu1有可能存儲的是0x1234這樣的內存地址
  • 這個stu1局部變量保存的內存地址0x1234指向堆中的這個對象,將來我們想訪問這個對象中的數據,是通過內存地址去訪問它,所以通常情況下我們是通過地址去訪問對象裏面的屬性和方法(比如你去故宮,肯定是順着地址去找故宮)

4.額外補充知識點

  • stu1這個局部變量專業術語被稱爲引用,引用中保存的是內存地址
  • java中new出來的數據都被放到堆中,在堆中開闢空間,程序員無法對堆中的數據直接操作,只能通過內存地址間接操作它,stu1保存的內存地址指向堆中的這個對象
  • 學生對象創建出來以後,裏面有成員變量,是對象相關的。成員變量中的對象存儲局部變量中如Student stu1 = 0x1234;
  • 成員變量如果沒有手動爲它們賦值,系統則會默認賦值(包裝類的默認值都爲null)
  • 局部變量是在方法裏面定義的

5.總結

  • 必須先有對象才能訪問成員變量,必須使用“引用 .”的形式
  • 程序員無法對堆內存中的數據直接操作,只能通過內存地址間接操作

四、面向對象的封裝性

1.什麼是對象的封裝

  • 將類中的屬性封裝在類中,不允許在類的外部直接訪問,保證數據安全性
  • 只能通過特定的方法才能對數據進行訪問
  • 類的基本原則就是封裝

2.實現方式

  • 將屬性私有化,使用private修飾屬性
  • 對外提供公開setget方法,用來對對象屬性進行賦值取值
  • 一般使用快捷鍵自動生成 set和get方法
  • 貼其中的一個屬性的set和get方法
    public Integer getId() {    //成員方法,實例方法,非靜態方法
                                //成員方法必須使用”引用.“的方法進行訪問
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

3.總結

  • 通過上面Student類的代碼,可以看出
    • 屬性中的(id,name,sex.age.address)是對象的級別的,必須先有對象才能訪問,不能使用類(Student)直接訪問
    • private修飾的數據只能在本類中訪問
    • 在Student類的有參構造方法中,id是屬性中的私有id,this.id是該構造方法中Integer id的值,兩個值不一樣

以上是在學習過程中總結的,若有不正之處,請多多諒解並歡迎批評指正,不甚感激

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章