柚子快報激活碼778899分享:開發(fā)語言 Java 類和對象
柚子快報激活碼778899分享:開發(fā)語言 Java 類和對象
登神長階 第一階 類和對象
??????????????????????
目錄
一.面向?qū)ο?
二.類六??
1.初步認識 類???
2.類的定義格式六???
三.對象???
1.類的實例化六??
2.類和對象???
?3.this引用??♂?
4.對象的構(gòu)造以及初始化隸
4.1.構(gòu)造方法?
4.2.初始化六??
4.2.1默認初始化??
?4.2.2就地初始化??
四.總結(jié)與反思?
一.面向?qū)ο?
??Java是一門純面向?qū)ο蟮恼Z言(Object Oriented Program,簡稱OOP),在面向?qū)ο蟮氖澜缋?,一切皆為對象。面向?qū)ο笫墙鉀Q問題的一種思想,主要依靠對象之間的交互完成一件事情。用面向?qū)ο蟮乃枷雭砩婕俺绦?,更符合?們對事物的認知,對于大型程序的設(shè)計、擴展以及維護都非常友好。
注意:面向過程和面相對象并不是一門語言,而是解決問題的方法,沒有那個好壞之分,都有其專門的應(yīng)用場景。
二.類六??
1.初步認識 類???
? 類是用來對一個實體
(
對象
)
來進行描述的
,主要描述該實體
(
對象
)
具有哪些屬性
(
外觀尺寸等
)
,哪些功能
(
用來干 啥)
,描述完成后計算機就可以識別了。比如:
比如:洗衣機,在
Java
中可以將其看成是一個類別。
屬性:產(chǎn)品品牌,型號,產(chǎn)品重量,外觀尺寸,顏色
...
功能:洗衣,烘干、定時
....
2.類的定義格式六???
? 在java中定義類時需要用到class關(guān)鍵字,類中包含的內(nèi)容稱為類的成員。屬性主要是用來描述類的,稱之為類的成員屬性或者類成員變量。方法主要說明類具有哪些功能,稱為類的成員方法
// 創(chuàng)建類
class WashMachine{
// 字段(屬性) 或者 成員變量
? public String brand; // 品牌
? public String type; // 型號
? public double weight; // 重量
? public double length; // 長
? public double width; // 寬
? public double height; // 高
? public String color; // 顏色
? public void washClothes(){ // 洗衣服
// 行為 或者 成員方法
? ?System.out.println("洗衣功能");
? ?}
? public void dryClothes(){ // 脫水
? ?System.out.println("脫水功能");
? ?}
? public void setTime(){ // 定時
? ?System.out.println("定時功能");
? ?}
}
?
注意事項
1.類名注意采用大駝峰定義
2.成員前寫法統(tǒng)一為public
3.此處寫的方法不帶
static
關(guān)鍵字
.
三.對象???
1.類的實例化六??
? 定義了一個類,就相當于在計算機中定義了一種新的類型
,不同于
int
和
double這些
java
語言自帶的內(nèi)置類型,而類是用戶自定義了一個新的類型,
。它們都是類
(
一種新定義的類型)
有了這些自定義的類型之后,就可以使用這些類來定義實例
(
或者稱為對象
)
。
用類類型創(chuàng)建對象的過程,稱為類的實例化
,在
java
中采用
new
關(guān)鍵字,配合類名來實例化對象。
2.類和對象???
? 類是一種自定義的類型,可以用來定義變量.。類只是一個模型一樣的東西,用來對一個實體進行描述,限定了類有哪些成員。做個比方。類實例化出對象就像現(xiàn)實中使用建筑設(shè)計圖建造出房子,類就像是設(shè)計圖,只設(shè)計出需要什么東 西,但是并沒有實體的建筑存在,同樣類也只是一個設(shè)計,實例化出的對象才能實際存儲數(shù)據(jù),占用實際的物理空間。
一個類可以實例化出多個對象,實例化出的對象 占用實際的物理空間,存儲類成員變量
?3.this引用??♂?
? 我們直接從this的作用入手,它主要使用在以下場景
1.形參名不小心與成員變量名相同:
? 此處的函數(shù)體中到底是誰給誰賦值?那一個是成員變量,那一個又是參數(shù)?
public void setPerson(int high, int weight, int age){
high=high;
weight=weight;
age=age;
}
? 因此,
this
引用指向當前對象
(
成員方法運行時調(diào)用該成員方法的對象
)
,在成員方法中所有成員變量的操作,都是通過該
引用去訪問
。只不過所有的操作對用戶是透明的,即用戶不需要來傳遞,編譯器自動完成。
public void setPerson(int high, int weight, int age){
this.high=high;
this.weight=weight;
this.age=age;
}
?2.調(diào)用方法時,多個對象同時調(diào)用一個函數(shù),此時,this用于表示調(diào)用那個對象的數(shù)據(jù)如下
public class Date {
private int year;
private int month;
private int day;
public void Setdate(int y,int m,int d) {
this.year = year;
this.month = m;
this.day = d;
}
public void Printdate(int y, int m, int d){
System.out.println(y+"年"+m+"月"+d+"日");
}
public static void main(String[] args) {
Date d1 =new Date();
Date d2 =new Date();
Date d3 =new Date();
d1.Setdate(2024,2,17);
d2.Setdate(2022,3,18);
d3.Setdate(2020,4,19);
}
}
? this
引用指向當前對象
(
成員方法運行時調(diào)用該成員方法的對象
)
,在成員方法中所有成員變量的操作,都是通過該
引用去訪問
。只不過所有的操作對用戶是透明的,即用戶不需要來傳遞,編譯器自動完成。
?總結(jié)
1. this
的類型:對應(yīng)類類型引用,即哪個對象調(diào)用就是哪個對象的引用類型
2. this
只能在
"
成員方法
"
中使用
3.
在
"
成員方法
"
中,
this
只能引用當前對象,不能再引用其他對象
4.對象的構(gòu)造以及初始化隸
? 在Java方法內(nèi)部定義一個局部變量時,必須要初始化,否則會編譯失敗
4.1.構(gòu)造方法?
? 構(gòu)造方法
(
也稱為構(gòu)造器
)
是一個特殊的成員方法,
名字必須與類名相同,在創(chuàng)建對象時,由編譯器自動調(diào)用,并且
在整個對象的生命周期內(nèi)只調(diào)用一次
。
public class Date {
public int year;
public int month;
public int day;
// 構(gòu)造方法:
// 名字與類名相同,沒有返回值類型,設(shè)置為void也不行
// 一般情況下使用public修飾
// 在創(chuàng)建對象時由編譯器自動調(diào)用,并且在對象的生命周期內(nèi)只調(diào)用一次
public Date(int year, int month, int day){
this.year = year;
this.month = month;
this.day = day;
System.out.println("Date(int,int,int)方法被調(diào)用了");
}
public void printDate(){
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
// 此處創(chuàng)建了一個Date類型的對象,并沒有顯式調(diào)用構(gòu)造方法
Date d = new Date(2021,6,9); // 輸出Date(int,int,int)方法被調(diào)用
d.printDate(); // 2021-6-9
}
}
?
注意:
1.
名字必須與類名相同
2.
沒有返回值類型,設(shè)置為
void
也不行
3.
創(chuàng)建對象時由編譯器自動調(diào)用,并且在對象的生命周期內(nèi)只調(diào)用一次
(
相當于人的出生,每個人只能出生一次
)
4. 構(gòu)造方法可以重載(用戶根據(jù)自己的需求提供不同參數(shù)的構(gòu)造方法)
5. 構(gòu)造方法的作用就是對對象中的成員進行初始化,并不負責(zé)給對象開辟空間。?
6.?如果用戶沒有顯式定義,編譯器會生成一份默認的構(gòu)造方法,生成的默認構(gòu)造方法一定是無參的。一旦用戶定義,編譯器則不再生成。
構(gòu)造方法中,可以通過
this
調(diào)用其他構(gòu)造方法來簡化代碼
public class Date {
private int year;
private int month;
private int day;
public Date(){
}
public Date(int y,int m,int d){
this(2024,7,16); // 調(diào)用另一個不帶參數(shù)的構(gòu)造方法
}
}
?注意
this(...)
必須是構(gòu)造方法中第一條語句
不能形成環(huán)
4.2.初始化六??
4.2.1默認初始化??
? 如下代碼可見,局部變量在使用時必須要初始化否則編譯器會報錯,而成員變量沒有進行初始化,不會報錯
public class Date {
public int year;
public int month;
public int day;
public Date(int year, int month, int day) {
// 成員變量在定義時,并沒有給初始值, 為什么就可以使用呢?
System.out.println(this.year);
System.out.println(this.month);
System.out.println(this.day);
}
public static void main(String[] args) {
/* 此處局部變量a沒有初始化,編譯時報錯:
Error:(24, 28) java: 可能尚未初始化變量a
int a;
System.out.println(a);*/
Date date1 = new Date(2021,6,9);
}
}
? 此時,new關(guān)鍵字會起到一個作用
Date date1 = new Date(2021,6,9);
??簡單而言,在JVM(Java Virtual Machine #Java虛擬機)層面
1.
檢測對象對應(yīng)的類是否加載了,如果沒有加載則加載
2.?
處理并發(fā)安全問題
? ? 比如:多個線程同時申請對象,
JVM
要保證給對象分配的空間不沖突
3.?
為對象分配內(nèi)存空間
4.
設(shè)置對象頭信息
5.
調(diào)用構(gòu)造方法,給對象中各個成員賦值
6.初始化所分配的空間
對象空間被申請好之后,對象中包含的成員已經(jīng)設(shè)置好了初始值
?4.2.2就地初始化??
public class Date {
public int year = 1900;
public int month = 1;
public int day = 1;
//如上,在定義成員變量的時候就直接給其賦值,進行就地初始化
public Date(){
}
public Date(int year, int month, int day) {
}
public static void main(String[] args) {
Date date1 = new Date(2021,6,9);
Date date2 = new Date();
}
}
?
注意:代碼編譯完成后,編譯器會將所有給成員初始化的這些語句添加到各個構(gòu)造函數(shù)中
四.總結(jié)與反思?
?太山不讓土壤,故能成其大,河海不擇細流,故能就其深——李斯
? 在面向?qū)ο蟮膶W(xué)習(xí)中會有很多新的定義概念,難以消化,需要腳踏實地,注重對知識的積累與回顧,做好筆記,總結(jié)歸納
????????????????????????????
? 以上,就是本期的全部內(nèi)容啦,若有錯誤疏忽希望各位大佬及時指出?
? 制作不易,希望能對各位提供微小的幫助,可否留下你免費的贊呢?
柚子快報激活碼778899分享:開發(fā)語言 Java 類和對象
推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。