Java基礎語法(9)-面向對象之類的成員

来源:https://www.cnblogs.com/bencoper/archive/2020/04/01/12616347.html
-Advertisement-
Play Games

title: Java基礎語法(9) 面向對象之類的成員 blog: "CSDN" data: "Java學習路線及視頻" 1.面向過程與面向對象 1. 面向過程(POP) 與 面向對象(OOP) 二者都是一種思想,面向對象是相對於面向過程而言的。面向過程,強調的是功能行為,以函數為最小單位,考慮怎 ...


title: Java基礎語法(9)-面向對象之類的成員

blog: CSDN

data: Java學習路線及視頻

G8Shge.png

1.面向過程與面向對象

  1. 面向過程(POP) 與 面向對象(OOP)
  • 二者都是一種思想,面向對象是相對於面向過程而言的。面向過程,強調的是功能行為,以函數為最小單位,考慮怎麼做。面向對象,將功能封裝進對象,強調具備了功能的對象,以類/對象為最小單位,考慮誰來做

  • 面向對象更加強調運用人類在日常的思維邏輯中採用的思想方法與原則,如抽象、分類、繼承、聚合、多態等。

    • 面向對象的三大特征

      ​ 封裝 (Encapsulation)

      ​ 繼承 (Inheritance)

      ​ 多態 (Polymorphism)

  1. 面向過程
G8pdat.png
  1. 面向對象
G8pRZn.png
  1. 面向對象的思想概述
  • 程式員從面向過程的執行者轉化成了面向對象的指揮者
  • 根據問題需要,選擇問題所針對的現實世界中的實體
  • 從實體中尋找解決問題相關的屬性和功能,這些屬性和功能就形成了概念世界中的類
  • 把抽象的實體用電腦語言進行描述,形成電腦世界中類的定義。即藉助某種程式語言,把類構造成電腦能夠識別和處理的數據結構。
  • 類實例化成電腦世界中的對象。對象是電腦世界中解決問題的最終工具。

2.類和對象

  1. 面向對象的概述
  • 類(Class)對象(Object)是面向對象的核心概念。
  • 類是對一類事物的描述,是抽象的、概念上的定義
  • 對象是實際存在的該類事物的每個個體,因而也稱為實例(instance)。
  • “萬事萬物皆對象” (女朋友)
G8Cpt0.png
  1. 類的語法格式
修飾符 class  類名 {
	屬性聲明;
	方法聲明;
}
說明:修飾符public:類可以被任意訪問類的正文要用{  }括起來
public class Person{
	private int age ;	//聲明私有變數 age 
	public void showAge(int i) { //聲明方法showAge( )
		age = i;
 	}
}

3.對象的創建和使用

  1. 創建對象語法
類名 對象名 = new 類名();
Animal xb=new Animal();
  1. 對象的使用
對象名.對象成員的方式訪問對象成員(包括屬性和方法)
  1. Java中的類和對象
//Animal類
public class Animal {
	public int legs; 
	public void eat(){
		System.out.println(“Eating.”);
	}
	public viod move(){ 
		System.out.println(“Move.”);
}
public class Zoo{
	public static void main(String args[]){
		//創建對象
		Animal xb=new Animal();
		xb.legs=4;//訪問屬性 
		System.out.println(xb.legs);
		xb.eat();//訪問方法
		xb.move();//訪問方法
	}
}
G8P5JP.png

4.類的成員之一: 屬性

  1. 語法格式

修飾符 數據類型 屬性名 = 初始化值 ;

  • 說明1: 修飾符
    • 常用的許可權修飾符有:private、預設、protected、public 其他修飾符:static、final (暫不考慮)
  • 說明2: 數據類型
    • 任何基本數據類型(如int、Boolean) 或 任何引用數據類型。
  • 說明3:屬性名
    • 屬於標識符,符合命名規則和規範即可。
public class Person{
	private int age;	//聲明private變數 age
	public String name = “Lila”;	//聲明public變數 name
}
  1. 變數的分類:成員變數與局部變數
G8FSAA.png
class Person{
	//1.屬性
	String name;//姓名--成員變數 
	int age = 1;//年齡
	boolean isMale;//是否是男性 
	
	public void show(String nation){
						//nation:局部變數 
	String color;//color:局部變數
	color = "yellow";
	}
}
 
//測試類
class PersonTest{
public static void main(String[] args){
	Person p = new Person(); 
	p.show(“USA”);
	}
}
  1. 對象屬性的預設初始化賦值
G8FTbQ.png

5.類的成員之二: 方法

  1. 什麼是方法(method、函數):
  • 方法是類或對象行為特征的抽象,用來完成某個功能操作。在某些語言中也稱為函數或過程。
  • 將功能封裝為方法的目的是,可以實現代碼重用,簡化代碼
  • Java里的方法不能獨立存在,所有的方法必須定義在類里。
public class Person{ 
	private int age;
	public int getAge()  { //聲明方法getAge()
		return age;
 	}
	public void setAge(int i) {      //聲明方法setAge
		age = i;	//將參數i的值賦給類的成員變數age
	}
}
  1. 方法的聲明格式:
修飾符 返回值類型 方法名(參數類型 形參1, 參數類型 形參2, ….){
	方法體程式代碼
	return 返回值;
}

修飾符:public,預設,private, protected等
  1. 方法的分類
無返回值 有返回值
無形參 void 方法名(){} 返回值的類型 方法名(){}
有形參 void 方法名(形參列表){} 返回值的類型 方法名(形參列表){}
  1. 註意

    • 方法被調用一次,就會執行一次
    • 沒有具體返回值的情況,返回值類型用關鍵字void表示,那麼方法體中可以不必使用return語句。如果使用,僅用來結束方法。
    • 定義方法時,方法的結果應該返回給調用者,交由調用者處理。
    • 方法中只能調用方法或屬性,不可以在方法內部定義方法。
  2. 方法的重載

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

    • 與返回值類型無關,只看參數列表,且參數列表必須不同。(參數個數或參數類型)。調用時,根據方法參數列表的不同來區別。

//返回三個整數的和
int add(int x,int y,int z){
	return x+y+z;
}
  1. 方法中的可變個數形參
  • 聲明格式:方法名(參數的類型名 ...參數名)
  • 方法參數部分指定類型的參數個數是可變多個:0個,1個或多個
  • 可變個數形參的方法與同名的方法之間,彼此構成重載
  • 可變參數方法的使用與方法參數部分使用數組是一致的
  • 方法的參數部分有可變形參,需要放在形參聲明的最後
  • 在一個方法的形參位置,最多只能聲明一個可變個數形參
//可變參數
public void test(String a,int... b){
  	for (int i : b) {
       Log.i("test:","b:" + i);
     }
}

6.類的成員之三: 構造器

  1. 構造器的特征
    • 它具有與類相同的名稱
    • 它不聲明返回值類型。(與聲明為void不同)
    • 不能被static、final、synchronized、abstract、native修飾,不能有return語句返回值
  2. 構造器的作用
    • 創建對象;給對象進行初始化
Person p = new Person(“Peter”,15);
  1. 語法格式
修飾符	類名 (參數列表) {
	初始化語句;
}
//創建Animal類的實例
//調用構造器,將legs初始化為4。
public class Animal { 
	private int legs;
	// 構造器
	public Animal() {
		legs = 4;
	}
	public void setLegs(int i) {
		legs = i;
	}
	public int getLegs() { 
		return legs;
}
  1. 註意
    • Java語言中,每個類都至少有一個構造器
    • 預設構造器的修飾符與所屬類的修飾符一致
    • 一旦顯式定義了構造器,則系統不再提供預設構造器
    • 一個類可以創建多個重載的構造器
    • 父類的構造器不可被子類繼承

7.類的成員之四: 代碼塊

  1. 代碼塊的作用

    • 對Java類或對象進行初始化
  2. 代碼塊的分類:

    • 一個類中代碼塊若有修飾符, 則只能被static修飾,稱為靜態代碼塊(static block),沒有使用static修飾的,為非靜態代碼塊
  3. 靜態代碼塊:用static修飾的代碼塊

    • 可以有輸出語句。
    • 可以對類的屬性、類的聲明進行初始化操作。
    • 不可以對非靜態的屬性初始化。即:不可以調用非靜態的屬性和方法。
    • 若有多個靜態的代碼塊,那麼按照從上到下的順序依次執行。
    • 靜態代碼塊的執行要先於非靜態代碼塊。
    • 靜態代碼塊隨著類的載入而載入,且只執行一次。
  4. 非靜態代碼塊:沒有static修飾的代碼塊

    • 可以有輸出語句。
    • 可以對類的屬性、類的聲明進行初始化操作。
    • 除了調用非靜態的結構外,還可以調用靜態的變數或方法。
    • 若有多個非靜態的代碼塊,那麼按照從上到下的順序依次執行。
    • 每次創建對象的時候,都會執行一次。且先於構造器執行。
    class Person {
    	public static int total; 
    	static {
    		total = 100;
    		System.out.println("in static block!");
    	}
    }
    
    public class PersonTest {
    	public static void main(String[] args) 
    	{ 
    		System.out.println("total = " + Person.total); 
    		System.out.println("total = " + Person.total);
    	}
    }
    
  5. 程式中成員變數賦值的執行順序

G8NfGq.png

8.類的成員之五: 內部類

  1. 內部類概念
  • 當一個事物的內部,還有一個部分需要一個完整的結構進行描述,而這個內部的完整的結構又只為外部事物提供服務,那麼整個內部的完整結構最好使用內部類。
  • 在Java中,允許一個類的定義位於另一個類的內部,前者稱為內部類,後者稱為外部類
  • 內部類的名字不能與包含它的外部類類名相同;
  1. 分類
  • 成員內部類(static成員內部類和非static成員內部類)
  • 局部內部類(不談修飾符)、匿名內部類
  1. 成員內部類作為類的成員的角色
  • 和外部類不同,Inner class還可以聲明為privateprotected
  • 可以調用外部類的結構
  • Inner class 可以聲明為static的,但此時就不能再使用外層類的非static的成員變數;
  1. 成員內部類作為類的角色
  • 可以在內部定義屬性、方法、構造器等結構
  • 可以聲明為abstract類 ,因此可以被其它的內部類繼承
  • 可以聲明為final
  • 編譯以後生成OuterClass$InnerClass.class位元組碼文件(也適用於局部內部類)
  1. 註意
  • 非static的成員內部類中的成員不能聲明為static的,只有在外部類或static的成員內部類中才可聲明static成員。
  • 外部類訪問成員內部類的成員,需要“內部類.成員”或“內部類對象.成員”的方式
  • 成員內部類可以直接使用外部類的所有成員,包括私有的數據
  • 當想要在外部類的靜態成員部分使用內部類時,可以考慮內部類聲明為靜態的
class Outer {
	private int s;
	public class Inner { 
		public void mb() {
		s = 100;
		System.out.println("在內部類Inner中s=" + s);
	}
}
public void ma() {
	Inner i = new Inner();
	i.mb();
	}
}
public class InnerTest {
	public static void main(String args[]) {
	Outer o = new Outer();
	o.ma();
	}
}

9.結語

8qXr3n.png

2020-3-31: Java基礎語法(6)-註釋

2020-3-31: Java基礎語法(7)-數組


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. Netty 基礎 Netty 是一個高性能、非同步事件驅動的 NIO 框架,它提供了對 TCP、UDP 和文件傳輸的支持,作為一個非同步 NIO 框架,Netty 的所有 IO 操作都是非同步非阻塞的,通過 Future-Listener 機制,用戶可以方便的主動獲取或者通過通知機制獲得 IO 操作 ...
  • 在練習迴圈刪除list中元素時遇到了一點問題。最開始寫的代碼是 for i in range(len(list)): del list[i] 這樣寫到後來會報錯,原因是隨著列表元素的刪除和i的增加,對列表元素的訪問會越界。 後來改成瞭如下代碼 while i < len(list): del lis ...
  • 一、線程的優先順序 1.線程優先順序的獲取的CPU時間片會相對多一點 (1)優先順序為1-10 (2)最低為1 (3)最高為10 (4)預設為5 package com.bjpowernode.java_learning; ​ public class D105_1_PriorotyOfMultithre ...
  • 一旦被初始化就不可以被改變。 String s1 = new String("abc"); String s2 = "abc"; System.out.println(s1==s2);//false System.out.println(s1.equals(s2));//true String類覆寫 ...
  • Stream 介紹 java8添加了一個抽象流Stream,可以讓我們像寫sql一樣操作集合元素。Stream將要處理的元素看做是一種流, 在管道中傳輸,併進行處理,最後由終止操作得到處理的結果。 什麼是Stream? Stream是一個來自特定元素隊列並支持聚合操作 元素是具體類型的對象,形成一個 ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 1111. 有效括弧的嵌套深度 題目 __有效括弧字元串__ ...
  • 1.高併發,高可用系統的一些思考 高併發依賴於場景和邏輯 不一定每個場景都會產生高併發,不要為了高併發而盲目的設計,過度設計帶來 的問題遠比意料之外的高併發要多很多,依賴於具體場景和行為進行分析,一個 購物類網站,搶購場景,會觸發很多的讀取商品詳情,計算庫存等操作,而且不 需要每個請求都到達支付頁面 ...
  • 常量和變數 使用關鍵字let來聲明常量 使用關鍵字var來聲明變數 可以在行中聲明多個變數或常量,且用逗號分割 Swift是類型安全的語言。如果沒有初始值,就必須標註出變數的類型。 變數和常量的名字幾乎可以使用任何字元,甚至包括Unicode字元。(註:命名不能包括 空白字元 、 數學符號 、 箭頭 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...