Java核心基礎第5篇-Java面向對象_類和對象

Java面向對象之類和對象

Java面向對象

一、面向對象概述

Java是完全的面向對象編程(Object Oriented Programming),簡稱OOP

面向對象編程的思維方式更加符合大家的日常生活,因為我們的現實世界都是由各種各樣的對象組成,大到飛機、火車、樓房,小到一隻狗、筆記型電腦電腦、一本書都是實實在在的對象。然而每個對象都有自己的狀態和行為,我們可以通過對象來完成一定的任務。

例如:我們乘坐飛機從深圳飛到湘西去旅遊,我們可以直接使用飛機的飛行能力,而不用管飛機這個對象是如何製造的。直接使用即可。

使用面向對象的方式來描述由對象組成的世界,更加符合人類的思維方式;

因為軟體出現的目的就是為了:

  • 用電腦的語言描述現實世界
  • 用電腦解決現實世界的問題

Java是目前最為流行的面向對象的程式語言(Python可能不服),擁有面向對象的四大特徵:

  • 封裝:隱藏內部實現細節,對外提供可訪問的方法
  • 繼承:子類自動繼承父類中所有的非私有屬性和方法
  • 多態:同一事物,多種不同的表示形態,例如:重載、重寫
  • 抽象:可以不用管具體的實現,定義統一的抽象規則

面向對象編程是Java的核心思想,但是對於初學者來說,學習起來還是比較抽象。所以建議初學者可以配合書籍一起學習,反覆觀看,從而掌握其中精華。

二、類

2.1 類的概述

類是Java應用程式中,必不可少的單位;創建類的關鍵字是:class; 其實我們在之前的學習過程中已經接觸過類,只是沒有專門單獨的拿出來講。

例如:

  • 以下創建了一個名稱叫Test01的類
  • 在類中定義了一個main()方法,也是程式的入口
public class Test01{ 
    public static void main(String args[]){
        //創建並且賦值
        int score2[] = {100,90,88,85,66};
        for(int i = 0;i<score2.length;i++) {
            System.out.print(score2[i]+"\t");
        }
    }
}

所以創建類,也沒有那麼複雜。掌握其基本語法,然後根據自己的需求進行創建即可。

Java作為一門高級語言,我們除了可以創建自己定義的類以外,還內置了許多預定義好的類。

例如:

  • Scanner
  • Math
  • String

2.2 預定義類

所謂預定義類,就是Java語言根據實際業務場景,幫我們預定義好的類。我們只需要掌握如何使用,不需要再去額外創建。

常用的預定義類:

例如:

  • Scanner :鍵盤輸入
  • Math :數學相關類
  • String :字元串類
  • Date :時間日期相關類
  • List :集合類

Java提供的預定義類有點多,好在提供了幫助文檔,我們可以根據幫助文檔查看://www.matools.com/api/java8

image-20210721140233778

後面有章節專門來研究常用的預定義類。

2.3 發現類的過程

1、寵物—現實生活中的對象

image-20210721153118999

如何在電腦中描述它?

世界上具體寵物對象,特別多。那麼我們如何用電腦語言來描述這麼多寵物對象,如果一個個描述我們肯定是做不到的;所以我們需要掌握其中的規律來對其進行劃分。

從現實中抽象出類分為三步走:

  1. 第一步:找出它們的種類
  2. 第二步:找出它們的屬性
  3. 第三步:找出它們的行為

2、第一步:找出他們的種類

根據以上資訊,找出狗的種類;

Java使用的是class關鍵字來描述類;

//創建一個名為Dog的類
class Dog{
    
}

image-20210721154912359

3、第二步:發現類的特徵

我們可以根據每個對象,抽取出他們相同的特徵(屬性);但是任何一個對象都會有多個特徵

例如:Dog狗類的特徵有

image-20210721155843179

雖然特徵很多,但是實際我們只存放我們所需要的特徵(屬性):

class Dog { 
    String name = "旺財"; // 昵稱
    int health = 100; // 健康值    
    int love = 0;   // 親密度
    String strain = "拉布拉多犬"; // 品種 
}

4、第三步:發現類的方法

類的方法也可以稱為行為,是動態的。每個方法都可以看出是一個獨立的功能

image-20210721160446752

和屬性一樣,我們存放的也是我們所關心的行為

class Dog { 
    String name = "旺財";   // 昵稱
    int health = 100; // 健康值    
    int love = 0;     // 親密度
    String strain = "拉布拉多犬"; // 品種 
    /* 輸出狗的資訊 */
    public void print() {
        // 輸出狗資訊的程式碼
    } 
}

經過以上三個步驟,我們就可以創建一個完整的類。以及指定了類中包含的屬性和方法。

2.4 類的組成

通過以上發現類的過程,我們可以看到類的基本組成:

//語法格式:
[< 修飾符>] class < 類名> 
{
	[<屬性聲明>]
	[<構造器聲明>]
	[<方法聲明>]
    [{程式碼塊}]
}

1、屬性

定義屬性:語法

//語法
[修飾符] 	數據類型 	屬性名稱	 =  [初始值];

//例如
public String name = "來福";	//創建了一個屬性,並且給初始值

修飾符:

  • public: 表示公共的,訪問許可權最大的,整個項目中都可以訪問
  • private: 表示私有的,訪問許可權最小的,再能在當前類中訪問

數據類型:

  • 數據類型可以是8種基本數據類型,也可以是引用數據類型
  • 屬性的初始值取決數據類型。 int默認值是0String默認值是null

屬性名稱:

  • 屬性也稱為全局變數
  • 只需要符合基本的命名規則和規範即可

2、方法

也稱為行為,正常一個方法表示一個具體的功能。例如:跑、吃、睡覺

//語法:
[修飾符]	返回值類型	方法的名稱([參數列表]){
	//方法體。就是該方法的具體功能
}	

//案例
public void show(String name){
    System.out.println("我的名字是:"+name);
}

方法組成的四要素:

  • 返回值
  • 方法名稱
  • 參數列表
  • 方法體

組成方法的四要素,缺一不可。

2.1 返回值

該方法執行完畢之後,把值返回給方法的調用者

  1. 必須定義返回值的具體的類型,如果沒有返回值使用void修飾
  2. 如果有具體的返回值,必須在語句塊中使用return語句
//沒有返回值
//1.使用void修飾
//2.不用使用return
//3.方法的調用者不能使用變數接收內容
public void add(int num1,int num2) {
    int sum = num1+num2;
}

//有返回值的情況
//1.固定返回值類型
//2.方法體後面必須使用return關鍵字返回具體的數字
//3.方法執行之後的結果,可以使用變數保存起來
public int desc(int num1,int num2) {
    int d = num1-num2;
    return d;
}

2.2 方法名稱

只是一個標識符,符合命名規則和規

規範:

  • 駝峰命名規則; 首個單詞首字母小寫,之後每隔單詞首字母大寫 getUserByName();
  • 見名知意

2.3 參數列表

定義方法的時候,參數是可選的。

  1. 形參列表:(形式參數),只是負責定義參數,以及參數的類型和名稱。但是該參數每頁實際的值
  2. 實參列表:方法的調用時候
//定義方法
// num1,num2表示連個形參
//語法:數據類型 參數名,多個參數之間使用逗號隔開
public int desc(int num1,int num2) {
    int d = num1-num2;
    return d;
}

//方法調用
//abc:變數,接收方法的返回值
//50,20:具體的實參,實參數據類型,個數,順序必須和形參要一致
int acb = p1.desc(50,20);

2.4 方法體

{}表示方法體,也是方法具體的業務實現

public int desc(int num1,int num2) {
    //具體的業務  根據場景不同。具體 也不同
    int d = num1-num2;
    return d;
}

3、構造方法

3.1 構造方法特徵

它具有與類相同的名稱;
它不含返回值,也不需要使用void關鍵字修飾
一個類中可以擁有多個構造方法

public class Person{
    public Person(){
        //默認無參構造
    }
    
    public Person(String name){
        //定義有參構造
    }
}

3.2 構造方法作用

按照指定的規則來創建對象,完成對象的初始化工資;(給所有的屬性賦值)

//注意: 構造方法不能使用void修飾,否則就是普通方法。喪失了構造方法的作用
//構造方法通過new 關鍵字 調用。不能通過對象調用  : 
new Person();   //調用Person無參構造
new User("zhangsan", "深圳華美居", "110"); //調用有參數構造

3.3 構造方法注意

  • Java語言中,每個類都至少有一個構造方法;
  • 如果類的定義者沒有顯式的定義任何構造方法,系統將自動提供一個默認的構造方法:
  • Java類中,一旦類的定義者顯式定義了一個或多個構造方法,系統將不再提供默認的構造方法;
  • 構造器的主要作用:利用構造器參數初始化對象的屬性。
public Person(String name,int age){
    this.name = name;
    this.age = age;
}

2.5 類圖

描述整個類的資訊;

  • 用於分析和設計「類」
  • 直觀、容易理解

image-20200824100603128

三、對象

1、簡介

  • 萬物皆對象,所有的東西都是一個對象
  • 對象是類的具體實現,一個類可以創建任意多個對象
  • 每個對象其實都是一個副本,對象與對象之間互不干涉
  • 關鍵字: new
  • 使用:
    • 對象名.屬性名 –>student.username
    • 對象名.方法名() —>student.eat();

2、創建對象的語法

​ new + 構造方法() : 例如: new Dog(); new Person();
​ 特殊的方法:
​ a.不需要返回值 b.方法名和類名一致;

3、類的訪問機制

  • 在一個類中的訪問機制:類中的方法可以直接訪問類中的成員變數
  • 在不同類中的訪問機制:先創建要訪問類的對象,再用對象訪問類中定義的成員。

4、匿名對象

  • 我們也可以不定義對象的引用,而直接調用這個對象的方法。這樣的對象叫做匿名對象, 如:

    • new Person().shout();
      
  • 如果對一個對象只需要進行一次方法調用,那麼就可以使用匿名對象。

  • 我們經常將匿名對象作為實參傳遞給一個函數調用

Tags: