您好,登錄后才能下訂單哦!
這篇文章主要講解了“零基礎學Java之什么是對象和類”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“零基礎學Java之什么是對象和類”吧!
01、面向過程和面向對象
三妹是不是要問,什么是 OOP?
OOP 的英文全稱是 Object Oriented Programming,要理解它的話,就要先理解面向對象,要想理解面向對象的話,就要先理解面向過程,因為一開始沒有面向對象的編程語言,都是面向過程。
舉個簡單點的例子來區分一下面向過程和面向對象。
有一天,你想吃小碗湯了,怎么辦呢?有兩個選擇:
1)自己買食材,豆腐皮啊、肉啊、蒜苔啊等等,自己動手做。
2)到飯店去,只需要對老板喊一聲,“來份小碗湯。”
第一種就是面向過程,第二種就是面向對象。
面向過程有什么劣勢呢?假如你買了小碗湯的食材,臨了又想吃宮保雞丁了,你是不是還得重新買食材?
面向對象有什么優勢呢?假如你不想吃小碗湯了,你只需要對老板說,“我那個小碗湯如果沒做的話,換成宮保雞丁吧!”
面向過程是流程化的,一步一步,上一步做完了,再做下一步。
面向對象是模塊化的,我做我的,你做你的,我需要你做的話,我就告訴你一聲。我不需要知道你到底怎么做,只看功勞不看苦勞。
不過,如果追到底的話,面向對象的底層其實還是面向過程,只不過把面向過程進行了抽象化,封裝成了類,方便我們的調用。
02、類
對象可以是現實中看得見的任何物體,比如說,一只特立獨行的豬;也可以是想象中的任何虛擬物體,比如說能七十二變的孫悟空。
Java 通過類(class)來定義這些物體,這些物體有什么狀態,通過字段來定義,比如說比如說豬的顏色是純色還是花色;這些物體有什么行為,通過方法來定義,比如說豬會吃,會睡覺。
來,定義一個簡單的類給你看看。
/** * 微信搜索「沉默王二」,回復 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() { } }
一個類可以包含:
字段(Filed)
方法(Method)
構造方法(Constructor)
在 Person 類中,字段有 3 個,分別是 name、age 和 sex,它們也稱為成員變量——在類內部但在方法外部,方法內部的叫臨時變量。
成員變量有時候也叫做實例變量,在編譯時不占用內存空間,在運行時獲取內存,也就是說,只有在對象實例化(new Person())后,字段才會獲取到內存,這也正是它被稱作“實例”變量的原因。
方法 3 個,分別是 eat()、sleep() 和 dadoudou(),表示 Person 這個對象可以做什么,也就是吃飯睡覺打豆豆。
那三妹是不是要問,“怎么沒有構造方法呢?”
的確在 Person 類的源碼文件(.java)中沒看到,但在反編譯后的字節碼文件(.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(){} 就是默認的構造方法,因為是空的構造方法(方法體中沒有內容),所以可以缺省。Java 聰明就聰明在這,有些很死板的代碼不需要開發人員添加,它會偷偷地做了。
03、new 一個對象
創建 Java 對象時,需要用到 new 關鍵字。
Person person = new Person();
這行代碼就通過 Person 類創建了一個 Person 對象。所有對象在創建的時候都會在堆內存中分配空間。
創建對象的時候,需要一個 main() 方法作為入口, main() 方法可以在當前類中,也可以在另外一個類中。
第一種: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); } }
輸出結果如下所示:
null 0 0
第二種:main() 方法不在 Person 類中,而在另外一個類中。
實際開發中,我們通常不在當前類中直接創建對象并使用它,而是放在使用對象的類中,比如說上圖中的 PersonTest 類。
可以把 PersonTest 類和 Person 類放在兩個文件中,也可以放在一個文件(命名為 PersonTest.java)中,就像下面這樣。
/** * @author 微信搜「沉默王二」,回復關鍵字 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、初始化對象
在之前的例子中,程序輸出結果為:
null 0 0
為什么會有這樣的輸出結果呢?因為 Person 對象沒有初始化,因此輸出了 String 的默認值 null,int 的默認值 0。
那怎么初始化 Person 對象(對字段賦值)呢?
第一種:通過對象的引用變量。
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 被稱為對象 Person 的引用變量,見下圖:
通過對象的引用變量,可以直接對字段進行初始化(person.name = "沉默王二"),所以以上代碼輸出結果如下所示:
沉默王二 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(),然后在新建對象后傳參進行初始化(person.initialize("沉默王二", 18, 1))。
第三種:通過構造方法初始化。
/** * @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); } }
這也是最標準的一種做法,直接在 new 的時候把參數傳遞過去。
補充一點知識,匿名對象。匿名對象意味著沒有引用變量,它只能在創建的時候被使用一次。
new Person();
可以直接通過匿名對象調用方法:
new Person().initialize("沉默王二", 18, 1);
感謝各位的閱讀,以上就是“零基礎學Java之什么是對象和類”的內容了,經過本文的學習后,相信大家對零基礎學Java之什么是對象和類這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。