日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
零基礎學Java:對象和類

“二哥,我那天在圖書館復習上一節(jié)你講的內容,剛好碰見一個學長,他問我有沒有‘對象’,我說還沒有啊。結果你猜他說什么,‘要不要我給你 new 一個啊?’我當時就懵了,new 是啥意思啊,二哥?”三妹滿是疑惑的問我。

成都創(chuàng)新互聯公司是一家專注于成都網站設計、成都網站制作與策劃設計,涵江網站建設哪家好?成都創(chuàng)新互聯公司做網站,專注于網站建設10多年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:涵江等地區(qū)。涵江做網站價格咨詢:028-86922220

“哈哈,三妹,你學長還挺幽默啊。new 是 Java 中的一個關鍵字,用來把類變成對象?!蔽倚χ鴮θ谜f,“對象和類是 Java 中最基本的兩個概念,可以說撐起了面向對象編程(OOP)的一片天。”

01、面向過程和面向對象

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

OOP 的英文全稱是 Object Oriented Programming,要理解它的話,就要先理解面向對象,要想理解面向對象的話,就要先理解面向過程,因為一開始沒有面向對象的編程語言,都是面向過程。

舉個簡單點的例子來區(qū)分一下面向過程和面向對象。

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

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

2)到飯店去,只需要對老板喊一聲,“來份小碗湯。”

第一種就是面向過程,第二種就是面向對象。

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

面向對象有什么優(yōu)勢呢?假如你不想吃小碗湯了,你只需要對老板說,“我那個小碗湯如果沒做的話,換成宮保雞丁吧!”

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

面向對象是模塊化的,我做我的,你做你的,我需要你做的話,我就告訴你一聲。我不需要知道你到底怎么做,只看功勞不看苦勞。

不過,如果追到底的話,面向對象的底層其實還是面向過程,只不過把面向過程進行了抽象化,封裝成了類,方便我們的調用。

02、類

對象可以是現實中看得見的任何物體,比如說,一只特立獨行的豬;也可以是想象中的任何虛擬物體,比如說能七十二變的孫悟空。

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

來,定義一個簡單的類給你看看。

 
 
 
 
  1. /**
  2.  * 微信搜索「沉默王二」,回復 Java
  3.  *
  4.  * @author 沉默王二
  5.  * @date 2020/11/19
  6.  */
  7. public class Person {
  8.     private String name;
  9.     private int age;
  10.     private int sex;
  11.     private void eat() {
  12.     }
  13.     private void sleep() {
  14.     }
  15.     private void dadoudou() {
  16.     }
  17. }

一個類可以包含:

  • 字段(Filed)
  • 方法(Method)
  • 構造方法(Constructor)

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

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

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

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

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

 
 
 
 
  1. //
  2. // Source code recreated from a .class file by IntelliJ IDEA
  3. // (powered by Fernflower decompiler)
  4. //
  5. package com.itwanger.twentythree;
  6. public class Person {
  7.     private String name;
  8.     private int age;
  9.     private int sex;
  10.     public Person() {
  11.     }
  12.     private void eat() {
  13.     }
  14.     private void sleep() {
  15.     }
  16.     private void dadoudou() {
  17.     }
  18. }

public Person(){} 就是默認的構造方法,因為是空的構造方法(方法體中沒有內容),所以可以缺省。Java 聰明就聰明在這,有些很死板的代碼不需要開發(fā)人員添加,它會偷偷地做了。

03、new 一個對象

創(chuàng)建 Java 對象時,需要用到 new 關鍵字。

Person person = new Person();

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

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

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

 
 
 
 
  1. public class Person {
  2.     private String name;
  3.     private int age;
  4.     private int sex;
  5.     private void eat() {}
  6.     private void sleep() {}
  7.     private void dadoudou() {}
  8.     public static void main(String[] args) {
  9.         Person person = new Person();
  10.         System.out.println(person.name);
  11.         System.out.println(person.age);
  12.         System.out.println(person.sex);
  13.     }
  14. }

輸出結果如下所示:

 
 
 
 
  1. null
  2. 0
  3. 0

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

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

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

 
 
 
 
  1. /**
  2.  * @author 微信搜「沉默王二」,回復關鍵字 PDF
  3.  */
  4. public class PersonTest {
  5.     public static void main(String[] args) {
  6.         Person person = new Person();
  7.     }
  8. }
  9. class Person {
  10.     private String name;
  11.     private int age;
  12.     private int sex;
  13.     private void eat() {}
  14.     private void sleep() {}
  15.     private void dadoudou() {}
  16. }

04、初始化對象

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

 
 
 
 
  1. null
  2. 0
  3. 0

為什么會有這樣的輸出結果呢?因為 Person 對象沒有初始化,因此輸出了 String 的默認值 null,int 的默認值 0。

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

第一種:通過對象的引用變量。

 
 
 
 
  1. public class Person {
  2.     private String name;
  3.     private int age;
  4.     private int sex;
  5.     public static void main(String[] args) {
  6.         Person person = new Person();
  7.         person.name = "沉默王二";
  8.         person.age = 18;
  9.         person.sex = 1;
  10.         
  11.         System.out.println(person.name);
  12.         System.out.println(person.age);
  13.         System.out.println(person.sex);
  14.     }
  15. }

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

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

 
 
 
 
  1. 沉默王二
  2. 18
  3. 1

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

 
 
 
 
  1. /**
  2.  * @author 沉默王二,一枚有趣的程序員
  3.  */
  4. public class Person {
  5.     private String name;
  6.     private int age;
  7.     private int sex;
  8.     public void initialize(String n, int a, int s) {
  9.         name = n;
  10.         age = a;
  11.         sex = s;
  12.     }
  13.     public static void main(String[] args) {
  14.         Person person = new Person();
  15.         person.initialize("沉默王二",18,1);
  16.         System.out.println(person.name);
  17.         System.out.println(person.age);
  18.         System.out.println(person.sex);
  19.     }
  20. }

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

第三種:通過構造方法初始化。

 
 
 
 
  1. /**
  2.  * @author 沉默王二,一枚有趣的程序員
  3.  */
  4. public class Person {
  5.     private String name;
  6.     private int age;
  7.     private int sex;
  8.     public Person(String name, int age, int sex) {
  9.         this.name = name;
  10.         this.age = age;
  11.         this.sex = sex;
  12.     }
  13.     public static void main(String[] args) {
  14.         Person person = new Person("沉默王二", 18, 1);
  15.         System.out.println(person.name);
  16.         System.out.println(person.age);
  17.         System.out.println(person.sex);
  18.     }
  19. }

這也是最標準的一種做法,直接在 new 的時候把參數傳遞過去。

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

 
 
 
 
  1. new Person();

可以直接通過匿名對象調用方法:

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

“好了,三妹,關于 Java 中的對象和類就先說這么多吧。”轉動了一下僵硬的脖子后,我對三妹說。

“好的,二哥,你辛苦了,我來給你按摩下?!?/p>

本文轉載自微信公眾號「沉默王二」,可以通過以下二維碼關注。轉載本文請聯系沉默王二公眾號。


當前文章:零基礎學Java:對象和類
文章路徑:http://m.5511xx.com/article/djgeehj.html