新聞中心
“二哥,我那天在圖書(shū)館復(fù)習(xí)上一節(jié)你講的內(nèi)容,剛好碰見(jiàn)一個(gè)學(xué)長(zhǎng),他問(wèn)我有沒(méi)有‘對(duì)象’,我說(shuō)還沒(méi)有啊。結(jié)果你猜他說(shuō)什么,‘要不要我給你 new 一個(gè)啊?’我當(dāng)時(shí)就懵了,new 是啥意思啊,二哥?”三妹滿是疑惑的問(wèn)我。

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作與策劃設(shè)計(jì),涵江網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:涵江等地區(qū)。涵江做網(wǎng)站價(jià)格咨詢:028-86922220
“哈哈,三妹,你學(xué)長(zhǎng)還挺幽默啊。new 是 Java 中的一個(gè)關(guān)鍵字,用來(lái)把類變成對(duì)象?!蔽倚χ鴮?duì)三妹說(shuō),“對(duì)象和類是 Java 中最基本的兩個(gè)概念,可以說(shuō)撐起了面向?qū)ο缶幊?OOP)的一片天。”
01、面向過(guò)程和面向?qū)ο?/strong>
三妹是不是要問(wèn),什么是 OOP?
OOP 的英文全稱是 Object Oriented Programming,要理解它的話,就要先理解面向?qū)ο螅肜斫饷嫦驅(qū)ο蟮脑?,就要先理解面向過(guò)程,因?yàn)橐婚_(kāi)始沒(méi)有面向?qū)ο蟮木幊陶Z(yǔ)言,都是面向過(guò)程。
舉個(gè)簡(jiǎn)單點(diǎn)的例子來(lái)區(qū)分一下面向過(guò)程和面向?qū)ο蟆?/p>
有一天,你想吃小碗湯了,怎么辦呢?有兩個(gè)選擇:
1)自己買食材,豆腐皮啊、肉啊、蒜苔啊等等,自己動(dòng)手做。
2)到飯店去,只需要對(duì)老板喊一聲,“來(lái)份小碗湯?!?/p>
第一種就是面向過(guò)程,第二種就是面向?qū)ο蟆?/p>
面向過(guò)程有什么劣勢(shì)呢?假如你買了小碗湯的食材,臨了又想吃宮保雞丁了,你是不是還得重新買食材?
面向?qū)ο笥惺裁磧?yōu)勢(shì)呢?假如你不想吃小碗湯了,你只需要對(duì)老板說(shuō),“我那個(gè)小碗湯如果沒(méi)做的話,換成宮保雞丁吧!”
面向過(guò)程是流程化的,一步一步,上一步做完了,再做下一步。
面向?qū)ο笫悄K化的,我做我的,你做你的,我需要你做的話,我就告訴你一聲。我不需要知道你到底怎么做,只看功勞不看苦勞。
不過(guò),如果追到底的話,面向?qū)ο蟮牡讓悠鋵?shí)還是面向過(guò)程,只不過(guò)把面向過(guò)程進(jìn)行了抽象化,封裝成了類,方便我們的調(diào)用。
02、類
對(duì)象可以是現(xiàn)實(shí)中看得見(jiàn)的任何物體,比如說(shuō),一只特立獨(dú)行的豬;也可以是想象中的任何虛擬物體,比如說(shuō)能七十二變的孫悟空。
Java 通過(guò)類(class)來(lái)定義這些物體,這些物體有什么狀態(tài),通過(guò)字段來(lái)定義,比如說(shuō)比如說(shuō)豬的顏色是純色還是花色;這些物體有什么行為,通過(guò)方法來(lái)定義,比如說(shuō)豬會(huì)吃,會(huì)睡覺(jué)。
來(lái),定義一個(gè)簡(jiǎn)單的類給你看看。
- /**
- * 微信搜索「沉默王二」,回復(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)存,也就是說(shuō),只有在對(duì)象實(shí)例化(new Person())后,字段才會(huì)獲取到內(nèi)存,這也正是它被稱作“實(shí)例”變量的原因。
方法 3 個(gè),分別是 eat()、sleep() 和 dadoudou(),表示 Person 這個(gè)對(duì)象可以做什么,也就是吃飯睡覺(jué)打豆豆。
那三妹是不是要問(wèn),“怎么沒(méi)有構(gòu)造方法呢?”
的確在 Person 類的源碼文件(.java)中沒(méi)看到,但在反編譯后的字節(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)造方法(方法體中沒(méi)有內(nèi)容),所以可以缺省。Java 聰明就聰明在這,有些很死板的代碼不需要開(kāi)發(fā)人員添加,它會(huì)偷偷地做了。
03、new 一個(gè)對(duì)象
創(chuàng)建 Java 對(duì)象時(shí),需要用到 new 關(guān)鍵字。
Person person = new Person();
這行代碼就通過(guò) 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è)類中。
實(shí)際開(kāi)發(fā)中,我們通常不在當(dāng)前類中直接創(chuàng)建對(duì)象并使用它,而是放在使用對(duì)象的類中,比如說(shuō)上圖中的 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ì)象沒(méi)有初始化,因此輸出了 String 的默認(rèn)值 null,int 的默認(rèn)值 0。
那怎么初始化 Person 對(duì)象(對(duì)字段賦值)呢?
第一種:通過(guò)對(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 的引用變量,見(jiàn)下圖:
通過(guò)對(duì)象的引用變量,可以直接對(duì)字段進(jìn)行初始化(person.name = "沉默王二"),所以以上代碼輸出結(jié)果如下所示:
- 沉默王二
- 18
- 1
第二種:通過(guò)方法初始化。
- /**
- * @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))。
第三種:通過(guò)構(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ù)傳遞過(guò)去。
補(bǔ)充一點(diǎn)知識(shí),匿名對(duì)象。匿名對(duì)象意味著沒(méi)有引用變量,它只能在創(chuàng)建的時(shí)候被使用一次。
- new Person();
可以直接通過(guò)匿名對(duì)象調(diào)用方法:
- new Person().initialize("沉默王二", 18, 1);
“好了,三妹,關(guān)于 Java 中的對(duì)象和類就先說(shuō)這么多吧。”轉(zhuǎn)動(dòng)了一下僵硬的脖子后,我對(duì)三妹說(shuō)。
“好的,二哥,你辛苦了,我來(lái)給你按摩下?!?/p>
本文轉(zhuǎn)載自微信公眾號(hào)「沉默王二」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系沉默王二公眾號(hào)。
文章題目:零基礎(chǔ)學(xué)Java:對(duì)象和類
本文URL:http://m.fisionsoft.com.cn/article/djgeehj.html


咨詢
建站咨詢
