1. 程式人生 > 實用技巧 >JAVA_面向物件思想概述、基本介紹及方法的過載與遞迴(一)

JAVA_面向物件思想概述、基本介紹及方法的過載與遞迴(一)

面向物件

什麼是面向物件

java類及類的成員:屬性、方法、構造器、程式碼塊、內部類

面向物件的三大特點:封裝性、繼承性、多型性、(抽象性)

其它關鍵字thissuperstaticfinalabstractinterfacepackageimport

面向過程:強調的是功能行為,以函式為最小單位,考慮怎麼做。

面向物件:強調具備功能的物件,以類/物件為最小單位,考慮誰來做。

面向物件的思想概述

類(Class)和物件(Object)是是面向物件的核心概念

  • 類是對一類事物的描述,是抽象的、概念上的定義
  • 物件是實際存在的該類事物的每個個體,因而也稱為例項(instance

:設計類的成員

屬性:成員變數(field
方法:成員方法(method

類和物件的使用

建立類,設計類的成員

class Person {
	// 屬性
	String name;
	int age = 1;
	boolean isMale;

	// 方法
	public void eat() {
		System.out.println("人可以吃飯");
	}
	public void sleep() {
		System.out.println("人可以睡覺");
	}
	public void talk(String language) {
		System.out.println("人可以說話,使用的是:" + language);
	}
}

建立類的物件

建立類的物件,也稱為類的例項化、例項化類。

Person p1 = new Person();

通過“物件.屬性”或“物件.方法”呼叫物件的結構

// 呼叫物件結構:屬性
p1.name = "Tom";
p1.isMale = true;
System.out.println(p1.name);
// 呼叫物件結構:方法
p1.eat();
p1.sleep();
p1.talk("Chinese");

如果建立了一個類的多個物件,則每個物件都是獨立的擁有一套類的屬性。(非static的)

如果我們修改一個物件的屬性,則不影響其它物件屬性的值

物件的記憶體解析

屬性(成員變數)與區域性變數的區別

相同點

  • 定義變數的格式:資料型別 變數名 = 變數值
  • 先宣告:後使用
  • 變數都有其對應的作用域

不同點

一、在類中宣告的位置不同

  • 屬性:直接定義在類的一對{ }內。
  • 區域性變數:宣告在方法內、方法形參、程式碼快內、構造器形參、構造器內部的變數。

二、關於許可權修飾符的不同

  • 屬性:可以在宣告屬性時:指明其許可權,使用許可權修飾符。

    常用的許可權修飾符:privatepublicprotected、預設(預設)

  • 區域性變數:不可以使用許可權修飾符

三、預設初始化值的情況

  • 屬性:類的屬性,根據其型別,都是預設初始化值。

    整形(byteshortintlong): 0

    浮點型(floatdouble):0.0

    字元型(char):0 或 ‘\u0000’

    布林型(boolean):false

    引用資料型別(類、陣列、介面): null

  • 區域性變數:沒有預設初始化值。

    注意:我們在呼叫區域性變數前一定要先賦值。

    特別:形參在呼叫時進行賦值即可。

四、在記憶體中載入的位置

  • 屬性:載入到堆空間中(heap)(非static

  • 區域性變數:載入到棧空間中(stack)

有返回值和沒有返回值

  • 如果方法有返回值,則必須在方法宣告時,指定返回值的型別。

    同時,方法中,需要使用return關鍵字來返回指定型別的變數或常量的資料。

  • 如果方法沒有返回值,則方法宣告時,使用void來表示。

    通常,在沒有返回值的方法中,就不需要使用return,如果使用return;,則表示結束此方法的意思。

關於物件的賦值

如果變數是基本資料型別,此時賦值的是變數所儲存的資料值。

如果變數是引用資料型別,此時賦值的是變數所儲存的陣列的地址值。

方法的過載(overload)

過載的概念

在同一個類中,允許存在一個以上的同名方法,只要它們的引數個數或者引數型別不同即可。

  • 同一個類、相同方法名
  • 引數列表不同:引數個數不同,引數型別不同

跟方法的許可權修飾符、返回值型別、形參變數名、方法體都沒有關係,都不算過載。只有滿足以上兩個條件才是過載。

class OverloadTest {
    String name;
    int age;

    public void setOverload() {

    }
    public void setOverload(String a) {

    }
    public void setOverload(int age) {

    }
    public void setOverload(String a, int age) {

    }
}

遞迴方法

遞迴方法的使用

遞迴方法:一個方法體內呼叫它自身。

方法遞迴包含了一種隱式的迴圈:它會重複執行某段程式碼,但這種重複執行無須迴圈控制。遞迴一定要向已知方向遞迴,否則這種遞迴就變成了無窮遞迴,類似於死迴圈。

class RecursionTest {
    int count = 10;
    int sum = 0;
    public static void main(String[] args) {
        RecursionTest recursionTest = new RecursionTest();
        recursionTest.recursion();
    }
    public void recursion() {
        sum++;
        if (sum < count) {
            System.out.println("遞迴:----" + sum);
            recursion();
        }
    }
}