溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

零基礎(chǔ)學(xué)Java之什么是對(duì)象和類

發(fā)布時(shí)間:2021-10-23 17:14:26 來源:億速云 閱讀:106 作者:iii 欄目:編程語言

這篇文章主要講解了“零基礎(chǔ)學(xué)Java之什么是對(duì)象和類”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“零基礎(chǔ)學(xué)Java之什么是對(duì)象和類”吧!

01、面向過程和面向?qū)ο?/strong>

三妹是不是要問,什么是 OOP?

OOP 的英文全稱是 Object Oriented  Programming,要理解它的話,就要先理解面向?qū)ο?,要想理解面向?qū)ο蟮脑?,就要先理解面向過程,因?yàn)橐婚_始沒有面向?qū)ο蟮木幊陶Z言,都是面向過程。

舉個(gè)簡單點(diǎn)的例子來區(qū)分一下面向過程和面向?qū)ο蟆?/p>

有一天,你想吃小碗湯了,怎么辦呢?有兩個(gè)選擇:

1)自己買食材,豆腐皮啊、肉啊、蒜苔啊等等,自己動(dòng)手做。

2)到飯店去,只需要對(duì)老板喊一聲,“來份小碗湯?!?/p>

第一種就是面向過程,第二種就是面向?qū)ο蟆?/p>

面向過程有什么劣勢(shì)呢?假如你買了小碗湯的食材,臨了又想吃宮保雞丁了,你是不是還得重新買食材?

面向?qū)ο笥惺裁磧?yōu)勢(shì)呢?假如你不想吃小碗湯了,你只需要對(duì)老板說,“我那個(gè)小碗湯如果沒做的話,換成宮保雞丁吧!”

面向過程是流程化的,一步一步,上一步做完了,再做下一步。

面向?qū)ο笫悄K化的,我做我的,你做你的,我需要你做的話,我就告訴你一聲。我不需要知道你到底怎么做,只看功勞不看苦勞。

不過,如果追到底的話,面向?qū)ο蟮牡讓悠鋵?shí)還是面向過程,只不過把面向過程進(jìn)行了抽象化,封裝成了類,方便我們的調(diào)用。

02、類

對(duì)象可以是現(xiàn)實(shí)中看得見的任何物體,比如說,一只特立獨(dú)行的豬;也可以是想象中的任何虛擬物體,比如說能七十二變的孫悟空。

Java  通過類(class)來定義這些物體,這些物體有什么狀態(tài),通過字段來定義,比如說比如說豬的顏色是純色還是花色;這些物體有什么行為,通過方法來定義,比如說豬會(huì)吃,會(huì)睡覺。

來,定義一個(gè)簡單的類給你看看。

/**  * 微信搜索「沉默王二」,回復(fù) Java  *  * @author 沉默王二  * @date 2020/11/19  */ public class Person {     private String name;     private int age;     private int sex;      private void eat() {     }      private void sleep() {     }      private void dadoudou() {     } }

一個(gè)類可以包含:

  • 字段(Filed)

  • 方法(Method)

  • 構(gòu)造方法(Constructor)

在 Person 類中,字段有 3 個(gè),分別是 name、age 和 sex,它們也稱為成員變量——在類內(nèi)部但在方法外部,方法內(nèi)部的叫臨時(shí)變量。

成員變量有時(shí)候也叫做實(shí)例變量,在編譯時(shí)不占用內(nèi)存空間,在運(yùn)行時(shí)獲取內(nèi)存,也就是說,只有在對(duì)象實(shí)例化(new  Person())后,字段才會(huì)獲取到內(nèi)存,這也正是它被稱作“實(shí)例”變量的原因。

方法 3 個(gè),分別是 eat()、sleep() 和 dadoudou(),表示 Person 這個(gè)對(duì)象可以做什么,也就是吃飯睡覺打豆豆。

那三妹是不是要問,“怎么沒有構(gòu)造方法呢?”

的確在 Person 類的源碼文件(.java)中沒看到,但在反編譯后的字節(jié)碼文件(.class)中是可以看得到的。

// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //  package com.itwanger.twentythree;  public class Person {     private String name;     private int age;     private int sex;      public Person() {     }      private void eat() {     }      private void sleep() {     }      private void dadoudou() {     } }

public Person(){} 就是默認(rèn)的構(gòu)造方法,因?yàn)槭强盏臉?gòu)造方法(方法體中沒有內(nèi)容),所以可以缺省。Java  聰明就聰明在這,有些很死板的代碼不需要開發(fā)人員添加,它會(huì)偷偷地做了。

03、new 一個(gè)對(duì)象

創(chuàng)建 Java 對(duì)象時(shí),需要用到 new 關(guān)鍵字。

Person person = new Person();

這行代碼就通過 Person 類創(chuàng)建了一個(gè) Person 對(duì)象。所有對(duì)象在創(chuàng)建的時(shí)候都會(huì)在堆內(nèi)存中分配空間。

創(chuàng)建對(duì)象的時(shí)候,需要一個(gè) main() 方法作為入口, main() 方法可以在當(dāng)前類中,也可以在另外一個(gè)類中。

第一種:main() 方法直接放在 Person 類中。

public class Person {     private String name;     private int age;     private int sex;      private void eat() {}     private void sleep() {}     private void dadoudou() {}      public static void main(String[] args) {         Person person = new Person();         System.out.println(person.name);         System.out.println(person.age);         System.out.println(person.sex);     } }

輸出結(jié)果如下所示:

null 0 0

第二種:main() 方法不在 Person 類中,而在另外一個(gè)類中。

零基礎(chǔ)學(xué)Java之什么是對(duì)象和類

實(shí)際開發(fā)中,我們通常不在當(dāng)前類中直接創(chuàng)建對(duì)象并使用它,而是放在使用對(duì)象的類中,比如說上圖中的 PersonTest 類。

可以把 PersonTest 類和 Person 類放在兩個(gè)文件中,也可以放在一個(gè)文件(命名為 PersonTest.java)中,就像下面這樣。

/**  * @author 微信搜「沉默王二」,回復(fù)關(guān)鍵字 PDF  */ public class PersonTest {     public static void main(String[] args) {         Person person = new Person();     } }  class Person {     private String name;     private int age;     private int sex;      private void eat() {}     private void sleep() {}     private void dadoudou() {} }

04、初始化對(duì)象

在之前的例子中,程序輸出結(jié)果為:

null 0 0

為什么會(huì)有這樣的輸出結(jié)果呢?因?yàn)?Person 對(duì)象沒有初始化,因此輸出了 String 的默認(rèn)值 null,int 的默認(rèn)值 0。

那怎么初始化 Person 對(duì)象(對(duì)字段賦值)呢?

第一種:通過對(duì)象的引用變量。

public class Person {     private String name;     private int age;     private int sex;      public static void main(String[] args) {         Person person = new Person();         person.name = "沉默王二";         person.age = 18;         person.sex = 1;                  System.out.println(person.name);         System.out.println(person.age);         System.out.println(person.sex);     } }

person 被稱為對(duì)象 Person 的引用變量,見下圖:

零基礎(chǔ)學(xué)Java之什么是對(duì)象和類

通過對(duì)象的引用變量,可以直接對(duì)字段進(jìn)行初始化(person.name = "沉默王二"),所以以上代碼輸出結(jié)果如下所示:

沉默王二 18 1

第二種:通過方法初始化。

/**  * @author 沉默王二,一枚有趣的程序員  */ public class Person {     private String name;     private int age;     private int sex;      public void initialize(String n, int a, int s) {         name = n;         age = a;         sex = s;     }      public static void main(String[] args) {         Person person = new Person();         person.initialize("沉默王二",18,1);          System.out.println(person.name);         System.out.println(person.age);         System.out.println(person.sex);     } }

在 Person 類中新增方法 initialize(),然后在新建對(duì)象后傳參進(jìn)行初始化(person.initialize("沉默王二", 18,  1))。

第三種:通過構(gòu)造方法初始化。

/**  * @author 沉默王二,一枚有趣的程序員  */ public class Person {     private String name;     private int age;     private int sex;      public Person(String name, int age, int sex) {         this.name = name;         this.age = age;         this.sex = sex;     }      public static void main(String[] args) {         Person person = new Person("沉默王二", 18, 1);          System.out.println(person.name);         System.out.println(person.age);         System.out.println(person.sex);     } }

這也是最標(biāo)準(zhǔn)的一種做法,直接在 new 的時(shí)候把參數(shù)傳遞過去。

補(bǔ)充一點(diǎn)知識(shí),匿名對(duì)象。匿名對(duì)象意味著沒有引用變量,它只能在創(chuàng)建的時(shí)候被使用一次。

new Person();

可以直接通過匿名對(duì)象調(diào)用方法:

new Person().initialize("沉默王二", 18, 1);

感謝各位的閱讀,以上就是“零基礎(chǔ)學(xué)Java之什么是對(duì)象和類”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)零基礎(chǔ)學(xué)Java之什么是對(duì)象和類這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI