JAVASE之類和對象(1)

路雖遠,行則將至;事雖難,做則必成。

主頁:趨早——Step
專欄:JAVASE
gitte:https://gitee.com/good-thg

在這里插入圖片描述
引言:
這篇文章我們只介紹前半部分,下一篇文章會介紹剩下的部分。

一、面向對象

1、什么是面向對象

面向對象是一種編程范式,它將程序組織成對象的集合,每個對象都有自己的狀態和行為。在面向對象的編程中,程序通過定義對象的屬性和方法來描述問題的解決方案。對象可以通過與其他對象進行交互來實現特定的功能。面向對象的編程主要包括封裝、繼承和多態三個特性,通過這些特性可以使程序更加模塊化、可維護和可復用。
我們學習的Java是一門純面向對象的語言,在面向對象的世界里,一切皆為對象,面向對象是解決問題的一種思想,主要依靠對象之間的交互完成一件事情。用面向對象的思想來設計程序,更符合人們對事物的認知,對于大型程序的設計、擴展及維護都非常友好。

2、面向對象與面向過程

我們都知道曹操稱象的故事吧!我們分別用面向對象和面向過程來講述一下這個過程:
(1)面向過程:我們要準備一艘可以裝的下大象的船,接著我們將大象趕到船上,然后乘坐另一艘小船,在水位處劃一條線,再把大象從船上趕下來,我們繼續在同一條船上搬石頭,一塊,兩塊…,直到船的水位下降到到我們之前劃的線上,然后我們準備一個稱,將船上的石頭卸下來分批放到稱上,并且記錄每一批石頭的重量,最后將所有數據全部相加,這時候就可以計算出大象的重量了。
(2)面向對象:把大象趕到船上(…),在船上放上石頭(…),在稱上放石頭(…),得到大象重量。
通過這個故事,我們知道了面向過程是把事情分成一步一步的,然后按照步驟一步一步的做出來,而面向對象是給對象相應的方法,最后得出結果。以面向對象的方式來處理,就不用關心過程了,是通過對象之間的交互來完成的。

二、類定義和使用

1、認識類

類是用來對一個實體進行描述的,主要關注該實體具有哪些屬性,哪些功能,描述完成以后計算機就可以識別出結果了。

2、類的定義格式

在這里插入圖片描述

注意事項:
1、類名采用大駝峰定義;
2、成員前寫法統一為public。

3、定義一個學生類

public class Student {// 成員變量public String name;public int age;// 成員方法public void Exam(){}
}

三、類的實例化

1、什么是實例化

定義了一個類,就相當于在計算機中定義了一種新的類型,與int,double類似,只不過int和double是Java語言自帶的內置類型,而類是用戶自定義了一個新的類型,比如上面定義的Student類。有了這些自定義類型之后,就可以使用這些類來定義實例。
用類類型創建對象的過程,稱為類的實例化,在Java中采用new關鍵字,配合類名來實例化對象。

class Student {public String name;public int age;public void Exam(){System.out.println("考試......");}
}
public class Test {public static void main(String[] args) {// 通過 new 實例化對象Student student = new Student();student.name = "Tom";student.age = 12;}
}

注意事項:

(1)new 關鍵字用于創建一個對象的實例;
(2)使用 . 來訪問對象中的屬性和方法;
(3)同一個類可以創建多個實例。

2、類和對象的說明

(1)類只是一個模型一樣的東西,用來對一個實體進行描述,限定了有哪些成員;
(2)類是一種自定義的類型,可以用來定義變量;
(3)一個類可以實例化出多個對象,實例化出的對象占用實際的物理空間,存儲類成員變量。

四、this引用

1、為什么要有this引用

在這里,我們定義一個Date類來進行演示:

public class Date {public int year;public int month;public int day;// 設置日期public void setDate(int y, int m, int d){year = y;month = m;day = d;}// 打印日期public void printDate(){System.out.println(year + "年" + month + "月" + day + "日");}}

這個時候,我們該如何打印他們呢?看下面代碼:
在這里插入圖片描述
運行結果如下:
在這里插入圖片描述
但是,如果我們不想這樣一個一個進行賦值,而是一次性的賦值,該怎么辦呢?
我們在上面的代碼中,已經定義了setDate,所以,我們可以調用setDate來進行賦值。代碼如下:
在這里插入圖片描述
運行結果如下:
在這里插入圖片描述
通過以上的兩種方法,就可以進行賦值和打印了,然而,這跟this引用有什么關系呢?我們繼續往下學習。
我們想想,現在我們的setDate是這樣的:
在這里插入圖片描述
假如說,我們把setDate改成下面這樣:
在這里插入圖片描述
在這個時候,到底是誰給誰賦值,到底設置的是哪個對象呢?
我們運行代碼試試:
在這里插入圖片描述
這是什么原因呢?
這是因為局部變量優先,是形參自己改自己賦值了,沒有賦值到成員變量當中。
在這個時候,我們的this就派上用處了,他可以讓他賦值到成員變量當中。我們看下一部分:

2、什么是this引用

我們將this加入到我們的setDate中:
在這里插入圖片描述
我們將main方法中寫成這樣:
在這里插入圖片描述
代碼運行結果如下:
在這里插入圖片描述
這個時候,我們有問題了:成員函數執行的時候,他是怎么知到打印的是哪個對象,設置的是哪個對象?
這就是this的作用,我們認為:

this引用指向當前對象

通俗來講,誰調用setDate,誰就是當前對象。
這時候,我們就可以知道什么是this引用了

this引用指向當前對象,在成員方法中所有成員變量的操作,都是通過該引用去訪問。

3、this引用的特性

(1)this的類型:對應類類型引用,即哪個對象調用就是哪個對象的引用類型;

(2)this只能在“成員方法”中使用;

(3)在“成員方法”中,this只能引用當前對象,不能引用其他對象;

(4)this是“成員方法”第一個隱藏的參數,編譯器會自動傳遞,在成員方法執行時,編譯器會負責將調用成員方法的引用傳遞給該成員方法,this負責來接收。

接下來,我們把完整代碼展示出來:

public class Date {public int year;public int month;public int day;// 設置日期public void setDate(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}// 打印日期public void printDate() {System.out.println(this.year + "年" + this.month + "月" + this.day + "日");}public static void main(String[] args) {Date date = new Date();// 賦值date.setDate(2024, 5, 24);// 打印date.printDate();Date date1 = new Date();date1.setDate(2023, 5, 24);date1.printDate();}}

五、對象的構造和初始化

1、如何初始化對象

我們來看下面這個代碼:
在這里插入圖片描述
運行結果如下:
在這里插入圖片描述
這是因為沒有初始化報錯,但是我們來看下面的代碼:
在這里插入圖片描述
運行一下:
在這里插入圖片描述我們發現,每次對象創建好之后,要調用setStudent才能設置具體姓名和年齡,這是很麻煩的,但是我們到底該如何初始化呢?我們繼續學習:

2、默認初始化

我們同樣來看下面的代碼:
在這里插入圖片描述
在這個代碼中,我們初始化了嗎?沒有,但是他會報錯嗎?我們看運行結果:
在這里插入圖片描述
沒有,這是為什么呢?
哇,好多為什么,那就讓我們繼續回答這一個一個的問題吧!
在這里,就是因為發生了默認初始化,所以才不會報錯。我們看到的只是程序層面簡單的一條語句,但是,在JVM層面就需要做好多事情,下面簡單介紹:
(1)檢測對象對應的類是否加載了,如果沒有加載則加載;
(2)為對象分配內存空間;
(3)處理并發問題;
(4)初始化所分配的空間
就是對象空間被申請好之后,對象中包含的成員已經設置好了初始值,比如:

在這里插入圖片描述

在這里,我們暫時知道這是默認初始化就好,至于為什么,我們可以后期學習。

3、就地初始化

就地初始化就是在聲明成員變量時,就直接給出了初始值。
我們看代碼:
在這里插入圖片描述
這樣運行會是什么結果呢?我們運行試試:
在這里插入圖片描述
這就是我們的就地初始化,需要注意的是:代碼編譯完成后,編譯器會將所有給初始化的這些語句添加到各個構造函數中。

4、構造方法

在我們學習了以上兩種初始化方法,我們再來學習另一種初始化方法,叫做構造方法。

(1)概念

構造方法(也稱構造器)是一個特殊的成員方法,這個方法沒有返回值,名字必須與類名相同,在創建對象時,由編譯器自動調用,并且在整個對象的聲明周期內只調用一次。
在這里插入圖片描述

現在問題來了,我們該怎么調用該構造方法呢?我們看下面的代碼并且運行:
在這里插入圖片描述

運行結果如下:
在這里插入圖片描述
這是什么原因呢?我們將main方法改成如下這樣:
在這里插入圖片描述
運行結果如下:
在這里插入圖片描述
我們再來調用帶兩個參數的構造方法:
將main方法寫為這樣:
在這里插入圖片描述
運行結果如下:
在這里插入圖片描述
所以我們認為:當構造方法調用完成之后,對象實際上才產生了。
其實我們還需要知道,當沒有提供任何構造方法的時候,編譯器會默認提供一個不帶參數的構造方法,但是當我們有構造方法提供的時候,編譯器就不會提供了。

(2)特性

<1> 名字必須與類名相同
<2> 沒有返回值類型,設置為void也不行
<3> 創建對象時由編譯器自動調用,并且在對象的生命周期內只調用一次
<4> 構造方法可以重載
<5> 如果用戶沒有顯示定義,編譯器會生成一份默認的構造方法,生成的默認構造方法一定是無參的。
<6> 在構造方法中,可以通過this調用其他構造方法來簡化代碼。

在這里插入圖片描述
運行結構如下:
在這里插入圖片描述
我們還要注意一點,this不能形成環。看下面代碼:
在這里插入圖片描述

<7> 絕大多數情況下使用public來修飾,特殊場景下會被private修飾。

好的,JAVASE第一部分到此就結束了,讓我們期待下一篇吧!

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

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

相關文章

LeetCode 面試150

最近準備面試&#xff0c;我以前不愿意面對的 現在保持一顆本心&#xff0c;就是專注于算法思想&#xff0c;語言基礎的磨煉&#xff1b; 不為速成&#xff0c;不急功近利的想要比賽&#xff0c;或者為了面試。 單純的本心&#xff0c;體驗算法帶來的快樂&#xff0c;是一件非常…

Python操作MySQL數據庫的工具--sqlalchemy

文章目錄 一、pymysql和sqlalchemy的區別二、sqlalchemy的詳細使用1.安裝庫2.核心思想3.整體思路4.sqlalchemy需要連接數據庫5.使用步驟1.手動提前創建數據庫2.使用代碼創建數據表3.用代碼操作數據表3.1 增加數據3.2 查詢數據3.3 刪除數據3.4 修改數據 一、pymysql和sqlalchemy…

2025秋招深度學習基礎面試題(一)

01. 卷積和BN如何融合提升推理速度 Conv和BN的融合:在網絡的推理階段,可以將BN層的運算融合到Conv層中,減少運算量,加速推理。本質上是修改了卷積核的參數,在不增加Conv層計算量的同時,略去了BN層的計算量。def fuse_conv_bn(conv, bn):std = (bn.running_var + bn.eps).…

數據倉庫、數據中臺、大數據平臺之間的關系

數據行業經常會出現數據倉庫、數據中臺、大數據平臺等概念&#xff0c;容易產生疑問&#xff0c;它們中間是相等&#xff0c;還是包含的關系&#xff1f; 數據中臺和數據倉庫概念的關系 數據中臺概念是包含數據倉庫的&#xff0c;數據倉庫是數據中臺中的一部分&#xff0c;包含…

探索Facebook:數字社交的新時代

Facebook&#xff0c;作為全球最大的社交網絡平臺之一&#xff0c;一直在引領著數字社交的發展潮流。隨著科技的不斷進步和社會的不斷變遷&#xff0c;Facebook也在不斷演進和創新&#xff0c;迎接著數字社交的新時代。本文將探索Facebook在數字社交領域的新發展&#xff0c;以…

Behind the Code:Polkadot 如何重塑 Web3 未來

2024 年 5 月 17 日 Polkadot 生態 Behind the Code 第二季第一集 《創造 Web3 的未來》正式上線。第一集深入探討了 Polkadot 和 Web3 技術在解決數字身份、數據所有權和去中心化治理方面的巨大潛力。 &#x1f50d; 查看完整視頻&#xff1a; https://youtu.be/_gP-M5nUidc?…

抖音視頻怎么去水印保存部分源碼|短視頻爬蟲提取收集下載工具

抖音視頻怎么去水印保存部分源碼|短視頻爬蟲提取收集下載工具 抖音視頻去水印保存部分源碼&#xff1a; 通過使用Python中的requests、re和os等庫&#xff0c;可以編寫如下代碼來實現抖音視頻去水印保存的功能。 短視頻爬蟲提取手機下載工具的使用方法&#xff1a; 該工具主…

BevDet-4d(2): 環境安裝及效果展示

1. 環境安裝 conda create -n bevdet python=3.8 conda activate bevdet ? # 3 虛擬環境bevdet中安裝torch pip install spconv pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch

【數理統計02】延森Jensen‘s不等式的證明

延森不等式&#xff08;Jensen’s Inequality&#xff09;是凸函數理論中的一個重要結果&#xff0c;廣泛應用于概率論、統計學和優化理論等領域。這個不等式的基本形式是&#xff1a; 對于一個凸函數 f f f和一個隨機變量 X X X&#xff0c;如果 E [ X ] \mathbb{E}[X] E[X]存…

安科瑞為河南省促進分布式光伏發電健康持續發展提供解決方案

1 光伏、儲能運維市場分析 在光伏、儲能行業飛速發展的同時&#xff0c;已建的光伏、風力發電站和儲能系統的監控、運維管理項目的招標也非常多&#xff0c;2023年上半年&#xff0c;光伏電站開發企業運維招標規模28.6GW&#xff0c;同比增長204.3%&#xff0c;上述28.6GW招標…

Blender導出fbx模型,導入到ue5中模型丟失紋理材質

UE5系列文章目錄 文章目錄 UE5系列文章目錄前言一、問題原因二、最終效果 前言 Blender導出fbx模型&#xff0c;導入到ue5中&#xff0c;發現模型丟失紋理材質&#xff0c;里面的原神人物模型妮露居然是白模&#xff0c;郁悶了大半天 一、問題原因 我在Blender導出fbx文件時…

【Python】全局變量與init的區別

一個腳本里&#xff0c;設置全局變量&#xff0c;和初始化類時__init__中加載&#xff0c;有什么區別&#xff1f; 在Python腳本中&#xff0c;使用全局變量和在類的__init__方法中加載數據有幾個關鍵區別&#xff1a; 作用域&#xff1a; 全局變量&#xff1a;全局變量在整個…

C中十進制轉十六進制示例

uint8_t QR_code_RxBfr[255]{0}; uint8_t TouchCode[100];memcpy (&Sys.TouchCode[0], &QR_code_RxBfr[0], Sys.QR_code_Len);Str &Sys.TouchCode[TmpVble];Sys.Card_ID 0; while(0 ! isdigit(*Str)){Sys.Card_ID Sys.Card_ID*10 *Str - 0;Str;} 最后在通過以下…

嵌入式科普(18)Ubuntu在移動硬盤的安裝和啟動

目錄 一、概述 二、應用場景 三、移動硬盤安裝Ubuntu 3.1 移動硬盤格式化 3.2 VMware安裝Ubuntu到移動硬盤 四、電腦BIOS啟動移動硬盤Ubuntu 五、從VMware啟動移動硬盤Ubuntu 六、問題解決(坑)和思考提問 嵌入式科普(18)Ubuntu在移動硬盤的安裝和啟動 一、概述 在移動硬…

在R中贊揚下努力工作的你,獎勵一份CheetShet

傳說有個R&#xff0c;R里有個包&#xff0c;包的名字叫praise&#xff0c;會一直不停地夸贊你。 > praise() [1] "You are sensational!" > praise() [1] "You are luminous!" > praise() [1] "You are pioneering!" > praise() […

P1【知識點】【數據結構】【鏈表LinkedList】C++版

鏈表是一種邏輯上連續&#xff0c;內存上分散的線性表數據結構&#xff0c;是用一組任意的空間&#xff08;可以連續&#xff0c;也可以不連續&#xff09;來存放數據元素。每個數據元素成為一個”結點“&#xff0c;每個結點由數據域和指針域組成。 訪問元素&#xff08;Acce…

ABAP Json解析案例

ABAP解析返回的JSON 案例 DATA:LTOKEN TYPE STRING.DATA: LL_LINES(10),"行數LL_TABIX(10),"循環標號LL_PECNT TYPE P LENGTH 6 DECIMALS 2, "百分比LL_PECET(6),"百分數LL_TEXT(40)."消息CLEAR: LL_LINES,LL_TABIX,LL_PECNT,LL_PECET,LL_TEXT.* …

JVM優化之使用Jstack命令查找JVM死鎖

JVM優化之使用Jstack命令查找JVM死鎖 示例代碼 public class DeadLockDemo {private static Object lock1 new Object();private static Object lock2 new Object();public static void main(String[] args) {new Thread(() -> {synchronized (lock1) {try {System.out.p…

老的 IIS + MSSQL 網站遷移實例

因為公司需要從云上遷移回本地&#xff0c;但云平臺不愿意導出虛擬機文件&#xff0c;所以公司需要手工遷移。 查看了一下云主機&#xff0c;安裝了IIS&#xff0c;還有MSSQL數據庫&#xff0c;于是在本地搭建好相同的OSIISMSSQL 環境&#xff0c;在把數據庫導入完成、 IIS 搭建…

HX6203是一個完整的電池充電器控制器的兩個(8.4V)電池鋰離子電池芯片IC

一般描述 該HX6203是一個完整的電池充電器控制器的兩個(8.4V)電池鋰離子電池。HX6203為快速充電鋰離子電池提供了一種小巧、簡單、高效的解決方案。一個外部檢測電阻以高精度設置充電電流。 內部電阻分壓器和精密參考設置的最終浮動電壓為8.4V時&#xff0c;輸入…