個(gè)人主頁(yè):兜里有顆棉花糖
歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng)
收錄于專欄【JavaSE_primary】
在Java中,一切皆對(duì)象。
一、類的定義和使用
在Java中,我們通過類來描述對(duì)象。
類的定義:Java類是面向?qū)ο缶幊讨械幕緲?gòu)建模塊,用于描述對(duì)象的屬性(成員變量)和行為(方法)。
1.1類的定義格式
Java類的定義格式如下:
[訪問修飾符] class 類名 {
// 成員變量(屬性)
// 構(gòu)造方法
// 方法
}
一個(gè)類應(yīng)該有以下幾部分組成:類聲明、成員變量、成員方法、構(gòu)造方法、訪問修飾符。
1.2定義學(xué)生類
class Student{
//成員變量
public String name;
public String gender;
public short age;
public double score;
//方法
public void DoClass(){}
public void DoHomework(){}
public void Exam(){}
}
我們定義類時(shí)應(yīng)該注意一下注意事項(xiàng):
1.一般一個(gè)文件當(dāng)中只定義一個(gè)類
2.main方法所在的類一般要使用public修飾
3.public修飾的類必須要和文件名相同
4.不要輕易去修改public修飾的類的名稱,如果要修改,通過開發(fā)工具修改
二、類的實(shí)例化
我們首先要知道,我們定義一個(gè)類時(shí)其實(shí)就是在計(jì)算機(jī)當(dāng)中自定義了一個(gè)類型,就像int、double一樣,只不過類這個(gè)類型時(shí)我們自己定義的而已,而int、double這樣的類型是Java語(yǔ)言自帶的內(nèi)置數(shù)據(jù)類型。
有了類這個(gè)類型(可以理解為我們自己定義的一種自定義類型)之后,我們就可以利用類這個(gè)類型來定義實(shí)例(也稱對(duì)象)了,這個(gè)過程就稱為類的實(shí)例化。
舉個(gè)例子:
下面有一個(gè)Teacher類,請(qǐng)看:
class Teacher{
//成員變量或字段
public String name;
public int age;
public int ID;
//成員函數(shù)
public void work(){
System.out.println("今天的工作是教學(xué)");
}
public void wages(){
System.out.println("本月的工資為10000");
}
}
我們現(xiàn)在實(shí)力化一個(gè)Teacher類對(duì)象,請(qǐng)看:
public class Test2 {
public static void main(String[] args) {
//通過new來實(shí)例化一個(gè)Teacher對(duì)象
Teacher t1 = new Teacher();
t1.name = "李華";
t1.age = 25;
t1.ID = 123456;
System.out.println(t1.name);
System.out.println(t1.age);
System.out.println(t1.ID);
t1.work();
t1.wages();
}
}
運(yùn)行結(jié)果如下:
關(guān)于類的實(shí)例化這里有以下幾點(diǎn)需要注意:
1.通過new 關(guān)鍵字來實(shí)例化一個(gè)對(duì)象。
2.使用.
來訪問對(duì)象中的屬性和方法。
3.同一個(gè)類可以實(shí)例化多個(gè)對(duì)象。
4.**當(dāng)成員變量沒有賦值的時(shí)候,默認(rèn)值就是其對(duì)應(yīng)的初始值。**即int->0 float->0.0f boolean->false char->'\u0000'
三、this引用
3.1this引用是什么
概念:this引用指向當(dāng)前對(duì)象(成員方法運(yùn)行時(shí)調(diào)用該成員方法的對(duì)象),在成員方法中所有成員變量的操作,都是通過該引用去訪問。
下面是日期類對(duì)象,請(qǐng)看:
class Date {
public int year;
public int month;
public int day;
public void setDay(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 class Test3 {
public static void main(String[] args) {
//先構(gòu)造3個(gè)日期類對(duì)象
Date d1 = new Date();
Date d2 = new Date();
Date d3 = new Date();
//對(duì)每個(gè)對(duì)象的成員變量進(jìn)行賦值
d1.setDay(23,8,30);
d2.setDay(23,8,31);
d3.setDay(23,9,1);
//對(duì)每個(gè)日期類對(duì)象進(jìn)行打印
d1.printDate();
d2.printDate();
d3.printDate();
}
}
運(yùn)行結(jié)果如下:
注意
:關(guān)鍵字this用于引用當(dāng)前對(duì)象,即調(diào)用當(dāng)前方法的對(duì)象。它可以在對(duì)象的成員方法中引用當(dāng)前對(duì)象的成員變量和方法。
請(qǐng)看舉例:
class MyClass {
private int value;
public void printValue() {
System.out.println(this.value); // 使用this引用當(dāng)前對(duì)象的成員變量
}
}
3.2this引用特性
this引用有如下幾個(gè)特性:
- this的類型:對(duì)應(yīng)類類型引用,即哪個(gè)對(duì)象調(diào)用就是哪個(gè)對(duì)象的引用類型
- this只能在成員方法中使用(靜態(tài)成員方法無(wú)法使用)
- 在成員方法中,this只能引用當(dāng)前對(duì)象,不能再引用其他對(duì)象
- this是成員方法第一個(gè)隱藏的參數(shù),編譯器會(huì)自動(dòng)傳遞,在成員方法執(zhí)行時(shí),編譯器會(huì)負(fù)責(zé)將調(diào)用成員方法對(duì)象的引用傳遞給該成員方法,this負(fù)責(zé)來接收
四、對(duì)象的構(gòu)造及初始化
4.1如何初始化對(duì)象
我們先來看一個(gè)問題,如果一個(gè)對(duì)象沒有對(duì)其成員變量賦值的話,那能不能打印其成員變量呢?依然是那日期類對(duì)象來進(jìn)行舉例:
運(yùn)行結(jié)果如下:
可以看到這里并沒有報(bào)錯(cuò)。因?yàn)槿绻覀儧]有顯式的初始化對(duì)象的成員變量,那么編譯器就會(huì)默認(rèn)將對(duì)象的成員變量進(jìn)行初始化。
4.2構(gòu)造方法
我們也可以通過構(gòu)造方法來對(duì)對(duì)象進(jìn)行初始化。
構(gòu)造方法概念:構(gòu)造方法(也稱為構(gòu)造器)是一個(gè)特殊的成員方法,構(gòu)造方法的名字必須與類名相同,在創(chuàng)建對(duì)象時(shí),由編譯器自動(dòng)調(diào)用,并且在整個(gè)對(duì)象的生命周期內(nèi)只調(diào)用一次。
請(qǐng)看舉例:
//不帶參數(shù)的構(gòu)造函數(shù)
public Date(){
System.out.println("不帶參數(shù)的構(gòu)造方法");
}
//帶參數(shù)的構(gòu)造函數(shù)
public Date(int year,int month,int day){
System.out.println("帶參數(shù)的構(gòu)造方法");
}
我們要想實(shí)例化一個(gè)對(duì)象,就必須調(diào)用構(gòu)造函數(shù),因?yàn)橹挥姓{(diào)用完構(gòu)造函數(shù)之后,才算真正實(shí)例化出了一個(gè)對(duì)象(調(diào)用完構(gòu)造函數(shù)之后對(duì)象才算真正意義上的產(chǎn)生)。
另外,構(gòu)造方法是可以構(gòu)成重載的,如上(一個(gè)帶參數(shù)、一個(gè)不帶參數(shù)的構(gòu)造方法)。
4.3構(gòu)造方法特性
- 名字必須與類名相同
- 沒有返回值類型,設(shè)置為void也不行
- 當(dāng)創(chuàng)建對(duì)象時(shí)由編譯器自動(dòng)調(diào)用構(gòu)造函數(shù),并且在對(duì)象的生命周期內(nèi)只調(diào)用一次。
- 如果我們自己寫了構(gòu)造方法(無(wú)論是帶參數(shù)還是不帶參數(shù)),編譯器則不會(huì)自己生成構(gòu)造函數(shù)。
- 當(dāng)沒有顯式定義構(gòu)造方法,編譯器會(huì)自動(dòng)為我們生成一個(gè)不帶參數(shù)的構(gòu)造方法
- 構(gòu)造方法支持重載(根據(jù)自己需求來提供不同參數(shù)的構(gòu)造方法)
- 大多數(shù)情況下,構(gòu)造方法用public來進(jìn)行修飾,特殊場(chǎng)景下需要用private來修飾。
4.4調(diào)用本類當(dāng)中其它構(gòu)造方法
什么是調(diào)用本類當(dāng)中其它構(gòu)造方法呢?請(qǐng)看舉例:
class Date {
public int year;
public int month;
public int day;
//無(wú)參構(gòu)造
Date(){
//調(diào)用本類當(dāng)中其它構(gòu)造方法
this(23,5,21);//不許放在構(gòu)造方法里面而且是第一行
System.out.println("不帶參數(shù)的構(gòu)造方法");
}
//帶參構(gòu)造
Date(int year,int month,int day){
System.out.println("帶參數(shù)的構(gòu)造方法");
}
public void setDay(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);
}
}
this(…)有兩點(diǎn)需要注意:
- 必須放在構(gòu)造方法中且是第一行
- 不能形成環(huán)
4.5默認(rèn)初始化
默認(rèn)初始化是指在創(chuàng)建對(duì)象時(shí),如果沒有顯式地對(duì)成員變量進(jìn)行初始化,Java會(huì)使用默認(rèn)值來初始化它們。默認(rèn)值根據(jù)成員變量的類型而定,例如,整型變量的默認(rèn)值是0,布爾型變量的默認(rèn)值是false,引用類型變量的默認(rèn)值是null。默認(rèn)初始化確保了對(duì)象在創(chuàng)建時(shí)每個(gè)成員變量都有一個(gè)初始值。
請(qǐng)看舉例:
運(yùn)行結(jié)果如下:
4.6就地初始化
就地初始化是指在創(chuàng)建對(duì)象時(shí),對(duì)成員變量進(jìn)行顯式的初始化。我們可以在對(duì)象創(chuàng)建的同時(shí)為成員變量賦予特定的值。
請(qǐng)看舉例:
public class MyClass {
//當(dāng)然,在這里進(jìn)行就地初始化也是可以的
private int value;
private String str;
// 就地初始化塊
{
value = 10;
str = "Hello";
}
// 構(gòu)造方法1
public MyClass() {
// 存在就地初始化的成員變量的初始化語(yǔ)句
}
// 構(gòu)造方法2
public MyClass(int value) {
// 存在就地初始化的成員變量的初始化語(yǔ)句
this.value = value;
}
}
解釋:
MyClass類包含一個(gè)就地初始化塊,在這個(gè)塊中對(duì)成員變量value和str進(jìn)行了初始化。在編譯期間,編譯器會(huì)將就地初始化塊的內(nèi)容添加到所有的構(gòu)造函數(shù)中(包括無(wú)參構(gòu)造函數(shù)和帶參構(gòu)造函數(shù))。
因此,無(wú)論是使用無(wú)參構(gòu)造函數(shù)還是帶參構(gòu)造函數(shù)創(chuàng)建對(duì)象,成員變量value和str都會(huì)得到就地初始化塊中指定的初始值。
所以,就地初始化后,編譯器會(huì)將所有給成員初始化的這些語(yǔ)句添加到各個(gè)構(gòu)造函數(shù)中。這樣可以確保無(wú)論使用哪個(gè)構(gòu)造函數(shù)創(chuàng)建對(duì)象,成員變量都得到了正確的初始化
。
以上就是本文類和對(duì)象的全部?jī)?nèi)容。文章來源:http://www.zghlxwxcb.cn/news/detail-685295.html
好了,本文到這里就結(jié)束了,再見啦友友們?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-685295.html
到了這里,關(guān)于深度剖析java類和對(duì)象的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!