iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0

類別(Class):藍圖和定義

在Java中,類別是一個使用者自定義的資料型態,用於表示某種概念、實體或物件,必須先設計規
劃物件未來的特徵與功能,依性質可分為靜態描述與動態行為,本身不佔用記憶體空間,也不能執行任何操作。可以包含三種最常見的成員:物件的屬性(成員變數)、行為(方法)和建構子。讓我們以一個簡單的例子來看看如何定義一個類別:

public class Person {
    // 變數
    String name;
    int age;

    // 建構子
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 方法
    public void say() {
        System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
    }
}

屬性(成員變數):

用於描述物件的狀態或特徵

宣告語法:

[存取權限] [修飾詞] 資料類型 變數名稱 [= 初始值] ;
 priavte String name;
 int age;
  • 存取權限,可以省略 也可以是 public 、protected、private 三者之一 和 加上static 、final 修飾詞通常是私有的(private),以封裝資料並提供對資料的控制存取。存取和修改屬性通常需要使用Getter和Setter方法。 這邊看不懂沒關係之後會在詳細說明
  • 類型可以是Java的內建資料型態(如整數、浮點數、布林值等),也可以是其他自訂類別的物件。
  • 任何變數在使用前必須先宣告,可以先不賦值。
  • 屬性的修改只能在方法的{ }內
  • 其名稱在同一個敍述區內{ }內不可重覆宣告。
  • 所在位置不同,也會有不同的效力範圍與意義
    1. 成員變數(實體變數):需產生物件後才能使用,可不給初始值
    2. 類別變數(static):不需產生物件即可使用,可不給初始值
    3. 區域變數:附在方法中,因方法執行而建立,方法執行完即消失,定義時就需要給初始值
public class FieldDemo{
	String name = “JAVA”;//直接定義在class下 者,為成員變數,效力 範圍為全域。
	static int i = 100;//加 static,為類別 變數,存放在獨立 的記憶體中
	static void total(){
		int j = 150;//定義在方法裡,為區域 變數,效力僅在該方法 中。main 方法中的args也是
		System.out.print(i+j); 
	}
	public static void main(String[] args){ 
		FieldDemo.total();
	} 
}

常數:

  1. 屬性一旦加上修飾詞 final,代表其值不可再更改。
  2. 常數必須初始化一次。
  3. 程式欲更改 final 變數的值將造成編譯時期錯誤(compile-time error)

方法

又稱行為、函式,用於描述物件的行為或操作,不能獨立存在,必須屬於類別或物件

[存取權限] [修飾詞] 返回類型 變數名稱 ( [參數列] ) {
	程式區塊; 
}

public void say() {
	System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}

  • 方法定義了物件可以執行的操作,可以包括計算、資料處理、狀態變更等。方法也可以接受參數並回傳值
  • 方法通常被公開(public)以供外部程式碼呼叫,但也可以具有其他存取修飾詞(private、protected、default)以限制存取權限。
  • 方法的回傳類型 :
    1. 無回傳值(無返回值):方法執行完後就結束(消失),須在方法名稱加void
    2. Java的內建資料型態(如整數、浮點數、布林值等),也可以是其他自訂類別的物件。方法內必須要有一個有效的return 語句。
  • 參數可以擁有0 到多個
  • 種類有:
    1. 成員方法(實體方法) :需產生物件后才能使用
    2. 類別方法(static) :不需產生物件即可使用

注意:方法定義好之後並不會立即執行,必須等到被呼叫才會執行。

public class FunctinDemo{
	//定義方法
	static void total(){
        int j = 150;
		System.out.print(i+j); 
	}
}
public static void main(String[] args){ 
	//呼叫方法
	FunctinDemo.total();
} 

建構子 or 建構方法(Constructor)

建立類別的物件,初始化物件屬性。

[存取權限] 類別名稱 ([參數列]) {
	程式區塊; 
}
public Person(String name, int age) {
    this.name = name;
    this.age = age;
}

  • 建構子名稱 : 必須和類別名稱相同

  • 沒有定義建構方法,JVM會主動補上一個無參數、無執行內容的建構方法,又
    叫 “預設建構方法(Default Constructor)”。

  • 不能定義返回類型或void ,若定義就會當成方法就不是建構子

  • 用new 關鍵字來呼叫建構子時,回傳該類別的實例 可以當作返回值,所以不需要定義返回值類型,不需要return

類別有以下作用:

  1. 定義變數
  2. 建立物件
  3. 呼叫類別的方法或存取類別變數

物件(Object)

物件是類別的一個具體實例。它是類別的一個實體,具有類別定義的屬性和行為。物件是在執行時建立的,佔用記憶體,並可以通過引用來訪問和操作。

建立物件最根本的途徑是建構子,用new 關鍵字來呼叫建構子即可建立這個類別的實例,所以類別如果沒有建構子,就無法建立實例,Java提供了一個功能 :如果沒有編寫建構子,就會提供預設的建構子以下是如何創建和使用一個**Person**物件:

類別名稱 物件(變數)名稱 = new 類別名稱();
  (宣告一個物件變數)   (記憶體中配置物件的位置)
class Person {
    // 變數
    String name;
    int age;

    // 建構子
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 方法
    public void say() {
        System.out.println("Hello, my name is " + name + " and I am " + age 
        + " years old.");
    }
}


public class ObjectDemo {
    public static void main(String[] args) {
        // 創建兩個不同的Person物件實例
        Person person1 = new Person("Alice", 30);
        Person person2 = new Person("Bob", 25);

        // 調用物件的方法
        person1.say();
        person2.say();
    }
}

物件變數名稱 . 屬性 : 操作物件屬性
物件變數名稱 . 方法( ) : 執行物件方法

在記憶體的配置:
https://ithelp.ithome.com.tw/upload/images/20230930/20163139mYLfzotqCS.png

那今天就到這囉~


上一篇
Day 14 陣列(Array)II
下一篇
Day 16 封裝(Encapsulation)I
系列文
玩轉Java:從基礎打造你的程式超能力30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言