零基礎 “入坑” Java--- 八、類和對象(一)

文章目錄

  • 一、初識面向對象
  • 二、類的定義和使用
    • 1.認識類
    • 2.類的定義格式
  • 三、類的實例化
  • 四、this引用
  • 五、對象的構造及初始化
    • 1.有關初始化
    • 2.構造方法
    • 3.就地初始化

一、初識面向對象

Java是一門純面向對象的語言(OOP),在面向對象的世界里,一切皆為對象。面向對象是解決問題的一種思想,主要依靠對象與對象之間的交互來完成事情。 使用面向對象的思想,對于大型程序的設計、擴展和維護都十分友好。

注意:面向對象并不是一門語言,而是一種解決問題的方法。

在學習類和對象之前,我們需要先記住:對象的產生依賴于類;而類是需要我們自己定義的。

二、類的定義和使用

1.認識類

類是用來對一個實體(對象)進行描述的,對實體進行抽象,主要描述其具備哪些屬性(如:顏色、大小等)以及哪些功能。

2.類的定義格式

在Java中需要用到class關鍵字來定義類,語法格式為:

class ClassName{
// 屬性或成員變量
// 行為或成員方法
}

class為定義類的關鍵字,ClassName為類名,{}中的為類的主體。類的主體中包含的內容稱為類的成員。屬性是用來描述類的,稱為成員屬性或成員變量;行為是用來描述類的功能,稱為成員方法

舉個例子,我們定義一個洗衣機類:

class WashMachine {//成員變量public String brand; //品牌public double weight; //重量public double length; //長public double width; //寬public double height; //高public String color; //顏色//成員方法public void wash() {System.out.println("洗衣");}public void dry() {System.out.println("烘干");}public void time() {System.out.println("定時");}
}

成員屬性/成員變量定義在類的里面,方法的外面

注意:在此處我們先將成員前的訪問修飾限定符統一寫為public,且不帶static關鍵字。

我們再來嘗試定義一個狗類:

class Dog {//成員屬性public String brand; //品種public String color; //顏色public String name; //姓名public String sex; //性別public int age; //年齡//成員方法public void call() {System.out.println("汪汪");}public void eat() {System.out.println("吃狗糧");}
}

在定義類時,我們需要注意:

1.建議一個文件中只定義一個類。
2.由public修飾的類必須要和文件名相同。
3.如果想要修改由public修飾的類的名稱,需要通過IDEA去修改(如下圖)。
在這里插入圖片描述

三、類的實例化

定義了一個類,就相當于定義了一種新的類型,與int,double等類似,只不過int,double是Java語言自帶的數據類型。當我們定義了一個類之后,就可以使用類來定義對象。

用類 類型創建對象的過程,稱為類的實例化。 在Java中通過new關鍵字和類名來實例化對象。

通過對象的引用(.)訪問對象的屬性/變量 和方法。

對象的成員屬性在沒有賦值時,其值為 其數據類型的默認值。

class Dog {//成員屬性public String brand; //品種public String color; //顏色public String name; //姓名public String sex; //性別public int age; //年齡//成員方法public void call() {System.out.println(name + "汪汪");}public void eat() {System.out.println(name + "吃狗糧");}
}
public class Test {public static void main(String[] args) {//通過new關鍵字實例化了一個Dog對象Dog a = new Dog(); //a就是一個引用,指向了Dog對象//通過對象的引用訪問對象的屬性/變量 和方法。a.name = "小狗1";a.age = 6;a.call();a.eat();//通過new關鍵字可以實例化多個對象Dog b = new Dog();b.name = "小狗2";b.age = 6;b.call();b.eat();}
}

通過new關鍵字可以實例化多個對象,并且會為每一個實例化出的對象都開辟一塊內存空間,存儲成員變量。

成員屬性存儲在對象中,而方法存儲在方法區。
在這里插入圖片描述
可以將類想象為一個模型,用來描述實體。有了類才有對象,類是根據現實中存在的實體抽象出來的,而類想要在代碼中表示具體的事物,就需要通過new關鍵字 實例化對象。

四、this引用

我們先來定義一個日期類:

public class Date {public int year;public int month;public int day;//賦值操作public void set(int y, int m, int d) {year = y;month = m;day = d;}//打印日期public void print() {System.out.println("年:" + year + " 月:" + month + " 日:" + day);}public static void main(String[] args) {Date a = new Date();a.set(2025, 7, 5);a.print();Date b = new Date();a.set(2025, 6, 5);a.print();}
}

我們對賦值操作方法的代碼進行修改:

    public void set(int year, int month, int day) {year = year;month = month;day = day;}

修改完后,輸出的結果并不是我們預期的值。這是因為局部變量優先原則,會導致局部變量自己給自己賦值,結果為局部變量數據類型的默認值。

此時,我們就可以使用this來解決這個問題:

    public void set(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}

代碼的運行結果與我們預期的相符。

1.this引用指向當前對象(當前對象指:成員方法運行時調用該成員方法的對象)。
2.this的類型取決于哪個對象調用,哪個對象調用就是哪個對象的引用類型。
3.this只能在成員方法中使用。
4.this本身 代表的是當前對象的引用。

在這里插入圖片描述
還可以使用this調用當前對象的方法

    public void set(int year, int month, int day) {this.year = year;this.month = month;this.day = day;//this調用當前對象的方法this.print();}

使用this調用print方法,程序也可以正常運行,且運行結果與我們預期的相符。

五、對象的構造及初始化

1.有關初始化

在學習有關變量的知識時,我們知道:在定義變量時,一定要給變量一個初始值,否則會導致程序報錯。但是當我們定義日期類時,并沒有給成員變量賦值,程序卻能正常運行。這是因為:當成員變量沒有被初始化時,編譯器會根據變量的數據類型存儲其默認值。
在這里插入圖片描述

2.構造方法

構造方法是一種特殊的方法:其方法名必須和類名相同且沒有返回值。

我們定義一個學生類 并以此舉例:

class Student {public String name; //姓名public int age; //年齡public String sex; //性別public void stu() {System.out.println("學習");}//構造方法public Student() {System.out.println("不帶參數的構造方法");}
}
public class Test_gz {public static void main(String[] args) {Student a = new Student();}
}

我們實例化一個學生類對象,運行程序,控制臺上打印出了"不帶參數的構造方法"這句話。
在這里插入圖片描述
我們也可以編寫帶有參數的構造方法:

class Student {public String name; //姓名public int age; //年齡public String sex; //性別public void stu() {System.out.println("學習");}//構造方法public Student() {System.out.println("不帶參數的構造方法");}public Student(String name, int age) {this.name = name;this.age = age;System.out.println("帶有2個參數的構造方法");}
}
public class Test_gz {public static void main(String[] args) {Student a = new Student();Student b = new Student("小王", 20);}
}

此時,"帶有2個參數的構造方法"這句話,因為實例化了一個學生類:b,所以也被打印出來。

在創建對象時,構造方法由編譯器自動調用,且在整個對象(如:a、b)的生命周期內只調用一次!只有當調用完成構造方法之后,對象才產生了。

在日期類中,我們并沒有編寫構造方法,但程序仍能運行,這是因為:當一個類中,沒有任何一個構造方法時,編譯器會自動提供一個不帶參數的構造方法。

但是當一個類中,存在一個帶有參數的構造方法時,編譯器就不會提供不帶參數的構造方法。 在上面這段代碼中,如果我們刪掉不帶參數的構造方法,再次運行程序,程序就會報錯!!

我們仔細觀察上面這段代碼中的兩個構造方法,其實可以發現 他們之間構成了方法的重載。即構造方法之間是可以構成方法的重載的!!!

完成一個對象的構造需要先分配內存,再調用合適的構造方法,因此:構造方法的作用就是對 對象中的成員變量進行初始化,但并不負責為對象開辟內存空間。


還可以使用 this() 調用當前類中的其他構造方法,具體調用哪個構造方法由 this() 的參數決定:

    public Student() {//this()this("小王", 20);System.out.println("不帶參數的構造方法");}public Student(String name, int age) {this.name = name;this.age = age;System.out.println("帶有2個參數的構造方法");}

注意:this() 只能在構造方法內部使用!!!且只能在構造方法的第一行使用!!!

構造方法絕大多數情況下都是被public修飾的,在某些特殊場景下也會被private修飾。

3.就地初始化

在定義成員變量時,對其直接進行賦值:

    public String name = "小王"; //姓名public int age = 20; //年齡public String sex = "男"; //性別

但并不推薦這種初始化方式。


未完待續…

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90397.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90397.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90397.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數字孿生技術引領UI前端設計新篇章:智能物聯網的深度集成

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言:數字孿生與物聯網的共生革命在智能設備爆發式增長的今天,傳統…

代碼審計-shiro漏洞分析

一、關于shiro介紹 簡單講,shiro是apache旗下的一個Java安全框架,輕量級簡單易上手,框架提供很多功能接口,常見的身份認證 、權限認證、會話管理、Remember 記住功能、加密等等。 二、漏洞分析 1.CVE-2019-12422-shiro550 漏洞原理…

EF提高性能(查詢禁用追蹤)(關閉延遲加載)

EF默認是支持延遲加載的,在加載一個表的數據時,會把關聯表的數據一并加載,這樣會影響性能。 一般建議關閉延遲加載可以提高EF加載的性能。還有其他方法提高性能(查詢禁用追蹤) 如果要實現延遲加載,必須滿足…

Leetcode+JAVA+貪心III

134.加油站在一條環路上有 n 個加油站,其中第 i 個加油站有汽油 gas[i] 升。你有一輛油箱容量無限的的汽車,從第 i 個加油站開往第 i1 個加油站需要消耗汽油 cost[i] 升。你從其中的一個加油站出發,開始時油箱為空。給定兩個整數數組 gas 和 …

Qt信號與槽機制及動態調用

Qt信號與槽機制及動態調用一、信號與槽1、Qt信號與槽機制概述2、信號與槽的基本使用3、信號與槽的特性4、使用Lambda表達式作為槽5、信號與槽的參數傳遞6、注意事項二、動態調用機制1、基本用法2、示例代碼3、帶參數的調用4、返回值處理5、信號與槽的動態連接6、動態方法調用7、…

K8s系列之:Kubernetes 的 OLM

K8s系列之:Kubernetes 的 OLM 什么是 Kubernetes 的 OLM什么是Kubernetes中的OperatorOLM 的功能OLM 的核心組件OLM優勢OLM 的工作原理OLM 與 OperatorHub 的關系OLM示例場景什么是CRDoperator 和 CRD的關系為什么需要 CRD 和 OperatorCRD定義資源類型DebeziumServer如何使用d…

前端-HTML-day2

目錄 1、無序列表 2、有序列表 3、定義列表 4、表格-基本使用 5、表格-結構標簽 6、表格-合并單元格 7、表單-input基本使用 8、表單-input占位文本 9、表單-單選框 10、表單-上傳多個文件 11、表單-多選框 12、表單-下拉菜單 13、表單-文本域 14、表單-label標簽…

兩種方式清除已經保存的git賬號密碼

方式一隨便選擇一個文件夾,然后鼠標右鍵-》TortoiseGit ->設置選擇已保存的數據-》認證數據-》清除-》點擊確定方式二 控制面板\用戶帳戶\憑據管理器-》windows憑據普通憑據-》找到git信息-》選擇刪除

Using Spring for Apache Pulsar:Message Production

1. Pulsar Template在Pulsar生產者端,Spring Boot自動配置提供了一個用于發布記錄的PulsarTemplate。該模板實現了一個名為PulsarOperations的接口,并提供了通過其合約發布記錄的方法。這些send API方法有兩類:send和sendAsync。send方法通過…

CSS揭秘:10.平行四邊形

前置知識:基本的css變形一、平行四邊形 要實現一個平行四邊形,可以使用CSS的skew變形屬性來傾斜元素。 transform: skewX(-45deg);圖-1顯示容器和內容都出現了傾斜,該如何解決這個問題? 二、嵌套方案 我們通過將內容嵌套 div 并使…

深度學習 必然用到的 線性代數知識

把標量到張量、點積到范數全串起來,幫你從 0 → 1 搭建 AI 數學底座 🚀 1 標量:深度學習的最小單元 標量 就是一維空間里的“點”,只有大小沒有方向。例如溫度 52 F、學習率 0.001。 記號:普通小寫 x;域&am…

OpenGL ES 紋理以及紋理的映射

文章目錄開啟紋理創建紋理綁定紋理生成紋理紋理坐標圖像配置線性插值重復效果限制拉伸完整代碼在 Android OpenGL ES 中使用紋理(Texture)可以顯著提升圖形渲染的質量和效率。以下是使用紋理的主要好處: 增強視覺真實感 紋理可以將復雜的圖像…

從金字塔到個性化路徑:AI 正在重新定義學習方式

幾十年來,我們的教育系統始終遵循著一條熟悉的路線: 從小學、初中、高中,再到大學和研究生。這條標準化的路徑(K-12 到研究所)結構清晰,卻也緩慢。但在當今這個信息爆炸、知識快速更新、個性化需求高漲的時…

產品經理崗位職責拆解

以下是產品經理崗位職責的詳細分解表,涵蓋工作內容、核心動作及輸出成果:崗位職責具體工作內容輸出成果1. 日常版本迭代管理需求分析及PRD產出協調資源推動產品上線- 收集業務/用戶需求,分析可行性及優先級- 撰寫PRD文檔,明確功能…

后端微服務基礎架構Spring Cloud

版本關系 版本發布說明-阿里云Spring Cloud Alibaba官網 選擇 創建項目 創建父項目 什么都不動&#xff0c;創建即可 1) 刪掉沒用的文件 保留 2) pom中加入 打包方式 <packaging>pom</packaging> 3) 刪掉src 4) pom.xml中刪除沒用的 5)更改pom.xml中 spring…

數據分析框架和方法

一、核心分析框架 (The Big Picture Frameworks)??描述性分析 (What Happened?)????目的&#xff1a;?? 了解過去發生了什么&#xff0c;描述現狀&#xff0c;監控業務健康。??核心工作&#xff1a;?? 匯總、聚合、計算基礎指標 (KPI)&#xff0c;生成報表和儀表盤…

電路研究9.3.10——合宙Air780EP中的AT開發指南:阿里云應用指南

這個好像也用不到&#xff0c;不過可以先貼出來。簡單看了一下也沒深入分析&#xff0c;直接扒過來了&#xff0c;感覺涉及到了上位機的學習了。我這下位機的可能用不到&#xff0c;就是貼過來好了。 應用概述 使用 AT 方式連接阿里云分為一機一密和一型一密&#xff0c;其中一…

[Backlog] 核心協調器 | 終端用戶界面(TUI)實現 | 多分支任務沖突解決 | 測試驗證體系

第8章 核心協調器 歡迎回到Backlog.md&#xff01; 在上一章文件系統操作中&#xff0c;我們深入了解了數據物理存儲層面的讀寫機制。本章將聚焦系統的神經中樞——核心協調器。 核心協調器的本質&#xff08;中央決策引擎&#xff09; 如果將Backlog.md視為項目管理團隊&a…

車載以太網-TC8測試-UT(Upper Tester)

目錄 一、技術原理:指令體系與協議適配1. **指令格式與傳輸機制**2. **協議棧交互邏輯**3. **規范遵循與版本演進**二、測試應用:TC8測試場景與案例1. **TCP協議棧深度驗證**2. **ARP協議健壯性測試**3. **SOME/IP服務動態管理**三、實現挑戰與解決方案1. **實時性要求**2. *…

扣子Coze純前端部署多Agents

純前端網頁搭建&#xff0c;無需任何后端代碼&#xff0c;方便快捷&#xff01; 就像公司前臺的多功能控制臺&#xff0c;員工可以通過按鈕快速呼叫不同的AI助手。具備多設備適配、智能對話等基礎能力。 支持添加多個智能體 配置方式 添加智能體信息&#xff0c;data-bot為智…