日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...

發(fā)布時(shí)間:2023/12/10 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

視頻:《零基礎(chǔ)學(xué)習(xí)Android開發(fā)》第五課 類與面向?qū)ο缶幊?-1

類的定義、成員變量、構(gòu)造方法、成員方法

一、從數(shù)據(jù)與邏輯相互關(guān)系審視代碼

  通過前面的課程,我們不斷接觸Java語言的知識,不斷增加自己的語言表達(dá)能力。到現(xiàn)在為止,我已經(jīng)可以高興地向大家宣布你的語言能力其實(shí)已經(jīng)可以讓完成一個(gè)完整的程序了!可是,有的同學(xué)會(huì)問,那不對啊!我現(xiàn)在還知道怎么操作圖形界面,不知道文件怎么讀寫,不知道數(shù)據(jù)庫如何訪問,不知道網(wǎng)絡(luò)如何連接……這個(gè)不用急,因?yàn)檫@些并不屬于語言的范圍,而是關(guān)于如何使用平臺資源的事。并且這些使用資源的知識你們只是不知道該如何找,找到了學(xué)起來其實(shí)是非常簡單的。再說,這些內(nèi)容我們后面的課也會(huì)講的。但是,有一個(gè)問題。那就是我們現(xiàn)在所有的代碼都是寫在一個(gè)文件里的,也就是在MainActivity.java里。如果要做的事多了,復(fù)雜了,肯定要把代碼分到不同文件里,這樣才使代碼文件有一個(gè)比較好的組織結(jié)構(gòu),今后維護(hù)也方便些。那該依據(jù)什么邏輯原則來劃分文件呢?

  我們重新看一下現(xiàn)在已經(jīng)寫了的代碼,就會(huì)發(fā)現(xiàn),代碼就是由數(shù)據(jù)結(jié)構(gòu)與算法組成的。一部分代碼就是講這是什么數(shù),這些數(shù)是怎么組織的。另一部分代碼就是講數(shù)該如何算。再看一下就會(huì)發(fā)現(xiàn),有些數(shù)據(jù)結(jié)構(gòu)與一些邏輯代碼之間的聯(lián)系很緊密,而與另一些邏輯代碼的關(guān)系則不大。比如說,

int[] pokers = new int[52]; // 一副牌組成的數(shù)組 for(int i = 0; i < 52; i++){ pokers[i] = i + 1; // 初始化牌數(shù)組,序號從0~51,點(diǎn)數(shù)從1到52 } pokers = shuffle(pokers); // 調(diào)用洗牌方法

  可以看到pokers這個(gè)數(shù)組與初始化數(shù)組、洗牌算法的關(guān)系比較緊密,在后面的代碼中,只在發(fā)牌的時(shí)候才引用了一次。而表示每個(gè)玩家手里的牌的數(shù)組則是與叫牌、拿牌、求和、亮牌等邏輯代碼相關(guān)度較高,而且因?yàn)橛袃蓚€(gè)玩家,所以類似的邏輯代碼有兩處。這樣就給了我們一個(gè)印象,那就是在代碼中,一些數(shù)據(jù)和一些邏輯的關(guān)系是緊密的,是應(yīng)該在一起的。我們通過前面的學(xué)習(xí)知道了數(shù)據(jù)與數(shù)據(jù)是可以組合在一起成為數(shù)據(jù)結(jié)構(gòu)的,比如數(shù)組。那有沒有可能把數(shù)據(jù)與處理它的邏輯代碼組合在一起也做成一種結(jié)構(gòu)呢?有的。這就是“類”。在介紹類的基本概念之前,我們可以試著想想按剛才所說的數(shù)據(jù)和邏輯的組合要構(gòu)造類的話應(yīng)該包括哪些內(nèi)容。首先說第一組。這可以概括成一副撲克牌,它的內(nèi)容包括:

  • 一個(gè)代表牌的長度為52的整型數(shù)組(數(shù)據(jù))
  • 將從1~52的數(shù)字依次放入數(shù)組的初始化代碼(邏輯)
  • 將數(shù)組中的值打亂的洗牌代碼(邏輯)
  • 后面的發(fā)牌其實(shí)就是從這個(gè)數(shù)組中按序取出一個(gè)元素來,也是對這個(gè)牌的數(shù)組數(shù)據(jù)的處理代碼,因此應(yīng)該包括發(fā)牌的代碼(邏輯)
  •   根據(jù)以上分析,我先把撲克牌的“類”寫出來。在IDE左側(cè)的項(xiàng)目工具窗口中右擊“app>java>com.example.helloworld”,在彈出菜單中選擇“New>Java Class”,在對話框的Name一欄中填入類名Pokers,這樣就新建了一個(gè)Pokers.java文件,在該類文件中敲如下代碼:

    package com.example.helloworld;public class Pokers { private int[] pokers; // 成員變量,一副牌的數(shù)組 private int index; // 成員變量,表示當(dāng)前發(fā)牌的序號 // 構(gòu)造方法 public Pokers(){ index = 0; this.pokers = new int[52]; // 創(chuàng)建成員變量數(shù)組 for(int i = 0; i < 52; i++){ pokers[i] = i + 1; // 初始化牌數(shù)組,序號從0~51,點(diǎn)數(shù)從1到52 } pokers = shuffle(pokers); // 洗牌 } // 成員方法。洗牌 private int[] shuffle(int[] nums) { java.util.Random rnd = new java.util.Random(); for (int i = nums.length - 1; i > 0; i--) { int j = rnd.nextInt(i + 1); int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } return nums; } // 成員方法。發(fā)一張牌,即給調(diào)用者返回一張牌的數(shù)值 public int getNextPoker(){ int poker = pokers[index]; index++; // 發(fā)完一張牌后序號加1 return poker; }}

      同學(xué)們可以看到,在這個(gè)類Pokers里,有數(shù)據(jù)pokers和index,還有邏輯代碼,即對這些數(shù)據(jù)進(jìn)行處理的方法Pokers、shuffle和getNextPoker,分別完成初始化、洗牌與發(fā)牌的功能。這就是我們構(gòu)建的第一個(gè)類。

    二、類

    1. 類的基本組成

      從上面的Pokers類可以看到,組成一個(gè)類的基本部分是4個(gè),分別是類聲明、成員變量、構(gòu)造方法與成員方法。

      在Pokers類的聲明public class Pokers中,public是訪問修改符。類的訪問修飾符共有4種,我們先不講有何區(qū)別,我們都寫為public就行。class是關(guān)鍵詞,表明這是一個(gè)類。Pokers是類名,類名的第一個(gè)字母一般大寫,如果是由多個(gè)單詞組合成的,則每個(gè)單詞第一個(gè)字母都大寫。

      pokers和index都是成員變量,英文是field(也有的翻譯成“域”或“字段”),成員變量在整個(gè)類的范圍內(nèi)都能進(jìn)行訪問,因此它是不同于方法內(nèi)部聲明的變量(那個(gè)叫部局部變量)的,也可以說成員變量的作用域是整個(gè)類。在它們之前的private是訪問修飾符,這表明它是私有的,意思是只能在本類的內(nèi)部才能訪問,而不能被類之外的調(diào)用者訪問。如果將修飾符改為public就可以讓類外的調(diào)用者訪問,但是最好不要使用這種方式。因?yàn)檫@種方式使得類內(nèi)部的數(shù)據(jù)可以被隨意改變,這很容易失控。類里的數(shù)據(jù)應(yīng)該通過類的成員方法來訪問,這樣取值的時(shí)候可以根據(jù)需要對數(shù)值經(jīng)過某種轉(zhuǎn)換再給出,比如我們的程序里數(shù)組里存的是牌的序號,可以將其轉(zhuǎn)為實(shí)際點(diǎn)數(shù)再給出。改變數(shù)值的時(shí)候,也可以加入某些限制免得超出范圍。比如我們的數(shù)組中存入的值就應(yīng)該在1~52之間。

      與類名相同的方法是構(gòu)造方法,英文是constructor,在類的變量被創(chuàng)建(或者叫“初始化”。大家記得吧,類是引用類型,因此創(chuàng)建類的對象要用new)時(shí)首先被調(diào)用。構(gòu)造方法沒有返回值,參數(shù)列表可以有也可以沒有。構(gòu)造方法可以是多個(gè)。如果沒有給出構(gòu)造方法,編譯時(shí)會(huì)自動(dòng)生成一個(gè)不帶參數(shù)列表的默認(rèn)構(gòu)造方法。構(gòu)造方法訪問修飾符有public、protected、private3種,可以從中任選一種,我們現(xiàn)在暫時(shí)只用public,也就是公共的,可以讓外部調(diào)用的。private的成員變量沒有默認(rèn)值,必須被初始化,在構(gòu)造方法里對成員變量進(jìn)行初始化,是比較合適的,當(dāng)然也可以進(jìn)行其它操作。

      方法在上一課已經(jīng)講了,在類的內(nèi)部就叫成員方法。這里主要講一下它的訪問修飾符,這里在shuffle前面是private,意思是私有的,只能本類中被調(diào)用,而getNextPoker之前是public,意思是公共的,可以在其它類中被調(diào)用。

      以上類的4個(gè)組成部分,除了類聲明是必須的,其它都是可選的。可以只要成員變量,比如我們聲明一個(gè)學(xué)生類:

    public class Student{ public int index;// 學(xué)號 public String name;// 姓名}

      這樣就是一個(gè)純數(shù)據(jù)結(jié)構(gòu),其中的成員變量必須是public的,不然外部訪問不到就沒有意義。同學(xué)們可以看到,這種數(shù)據(jù)結(jié)構(gòu)就可以把不同類型的數(shù)據(jù)組織在一起。上一課中方法輸出時(shí)也如果把sum與text兩個(gè)變量組織成一個(gè)類,就可以輸出兩種數(shù)據(jù)。

      但是這種在成員變量之前加public的用法沒有把類的優(yōu)勢發(fā)揮出來。如果只是想用類來組合一個(gè)數(shù)據(jù)結(jié)構(gòu),最好也是將成員變量設(shè)為private,而用成員方法來對成員變量進(jìn)行存取。上面的Student可以改為如下代碼:

    public class Student{ private int index; // 學(xué)號,私有的成員變量,外部不可訪問 private String name; // 姓名,私有的成員變量,外部不可訪問 public Student(){ // 私有成員變量沒有默認(rèn)值,必須初始化 this.index = 0; this.name = ""; } public int getIndex() { // 獲得學(xué)號,公共的成員方法,外部可訪問 return this.index; } public void setIndex(int index) { // 設(shè)置學(xué)號,公共的成員方法,外部可訪問 this.index = index; } public String getName() { // 獲得姓名,公共的成員方法,外部可訪問 return this.name; } public void setName(String name) { // 設(shè)置姓名,公共的成員方法,外部可訪問 this.name = name; }}

      在存與取的方法里都可以加上一些對數(shù)據(jù)進(jìn)行限制或轉(zhuǎn)換的代碼,這樣可以保證數(shù)據(jù)的安全,也可以增強(qiáng)數(shù)據(jù)的外部可讀性。

      這里可以看到訪問成員變量時(shí),用的是“this.”的方式,this表明的是本類的對象,“.”是成員訪問操作符。通過在index與name前面加上“this.”就表明是成員變量,就可以與參數(shù)列表里的參數(shù)變量進(jìn)行區(qū)別。我給大家舉這個(gè)例子呢,目的是讓大家不要對類的概念產(chǎn)生陌生感,你完全可以把類就看成一個(gè)數(shù)據(jù)結(jié)構(gòu),但是這個(gè)數(shù)據(jù)結(jié)構(gòu)里不僅放了數(shù)據(jù),還放了處理這些數(shù)據(jù)的方法。這樣程序文件就有了很好的組織性。

      也可以不要成員變量,只要成員方法。比如:

    public class ToolsClass{ public void doSth(){ } public int getNum(){ return 0; }}

      內(nèi)部只有方法的類一般作為工具類,因?yàn)槠涑蓡T方法的代碼與成員變量無關(guān),可以在方法前上static,靜態(tài)的,這就成為靜態(tài)方法。上面的類可以改為:

    public class ToolsClass{ public static void doSth(){ } public static int getNum(){ return 0; }}

      這樣的好處是調(diào)用時(shí)不需要先用new來創(chuàng)建類的對象,而是可以直接通過類名來調(diào)用,如ToolsClass.doSth()、ToolsClass.getNum()就可以。static不僅可以加到成員方法前面,也可以加到成員變量前,至于靜態(tài)與非靜態(tài)成員的區(qū)別,我在后面再講。

    2. 創(chuàng)建類的對象并訪問其成員

      因?yàn)轭愂且妙愋?#xff0c;因此創(chuàng)建類的變量(也稱為對象Object、實(shí)例Instance)是用new,創(chuàng)建出對象后,就可以通過該對象加“.”來訪問其公共成員方法或變量了。比如上面聲明的Student類:

    Student s = new Student(); s.setIndex(1); s.setName("Tom"); int index = s.getIndex(); String name = s.getName();

    三、用類來重新組織代碼

      我們重新看一遍已經(jīng)建立的Pokers類,它是將對一副撲克牌相關(guān)的數(shù)據(jù)與邏輯都移入該類之中(術(shù)語叫“封裝”,英文為Encapsulation)。現(xiàn)在我們把與它相關(guān)的代碼變換為使用Pokers的對象來進(jìn)行。原來的代碼為:

    int[] pokers = new int[52]; // 一副牌組成的數(shù)組 for(int i = 0; i < 52; i++){ pokers[i] = i + 1; // 初始化牌數(shù)組,序號從0~51,點(diǎn)數(shù)從1到52 } pokers = shuffle(pokers); // 調(diào)用洗牌方法

      調(diào)整后的代碼為:

    Pokers pokers = new Pokers();

      因?yàn)槲覀儼秧樞螯c(diǎn)數(shù)放牌數(shù)組及洗牌的動(dòng)作全放在構(gòu)造函數(shù)里了,因此當(dāng)Pokers類的對象pokers被創(chuàng)建時(shí),我們就有了一副已經(jīng)洗好的牌了。在調(diào)用者的角度,屏蔽了很多細(xì)節(jié),同時(shí)如果發(fā)現(xiàn)與撲克牌相關(guān)的數(shù)據(jù)與邏輯有問題的話,也能很快定位到Pokers類中,不用去其它地方找Bug。這就是封裝的好處。后面發(fā)牌的動(dòng)作,也用pokers.getNextPoker()一條語句就可以了。調(diào)用者不用考慮具體的實(shí)現(xiàn)細(xì)節(jié),只要知道要調(diào)用類對象中的哪個(gè)方法能得到自己想要的東西就行。按照這個(gè)思路,程序的主要邏輯就可以變得非常的簡潔。主要邏輯不用操心細(xì)節(jié),就需要知道把工作“分類”,不同的工作分給不同的類,再找這些類的對象要東西就行。是不是有點(diǎn)領(lǐng)導(dǎo)的感覺了?事來了,這個(gè)事是業(yè)務(wù)部的,那個(gè)事是財(cái)務(wù)部,那個(gè)事是人事部的,通通分下去,再找業(yè)務(wù)部安排的小李、財(cái)務(wù)部的小劉和人事的小張,跟他們要東西,這事就辦妥了。

      我們接著往下看代碼。我們看一下原來的代碼:

    int[] pokersA = new int[4]; // 玩家手里的牌 int[] pokersB = {7, 8, 0, 0}; // 電腦手里的牌 for(int i = 0; i < 4; i++){ pokersA[i] = pokers.getNextPoker();// 改為通過Pokers類對象獲得下一張牌 // 獲得當(dāng)前玩家手中牌的總點(diǎn)數(shù) String[] texts = {""}; int sum = getSum(pokersA, texts); // 在玩家手中牌點(diǎn)數(shù)大于電腦時(shí)停止叫牌 if(sum > 15){ break; } } // 顯示玩家手里的牌及總數(shù) String[] texts = {"你手中的牌分別是:"} ; int sumA = getSum(pokersA, texts); texts[0] += "總數(shù)是:" + sumA + "。對家手里的牌是:"; // 顯示電腦手里的牌及總數(shù) int sumB = getSum(pokersB, texts);

      這里是否還有數(shù)據(jù)與邏輯相關(guān)似很強(qiáng)呢?有的,數(shù)組pokersA與發(fā)牌、結(jié)算的邏輯相關(guān)性強(qiáng),數(shù)組pokersB沒有發(fā)牌邏輯,是因?yàn)槲覀冏隽撕喕?#xff0c;其實(shí)是應(yīng)該有的,它也有結(jié)算邏輯。pokersA與pokersB代表的是兩個(gè)玩家手里的牌,我們是否需要建立兩個(gè)類呢?答案是不需要,因?yàn)殡m然是兩個(gè)玩家,但是每個(gè)玩家數(shù)據(jù)的結(jié)構(gòu)以及操作數(shù)據(jù)的邏輯是完全相同的,唯一不同的是數(shù)據(jù)的值。而數(shù)據(jù)的值是在類的對象并創(chuàng)建之后再通過各種方法去設(shè)置的,因此值的差異只是對象之間的差異,而不是類的差異。就像int類型的兩個(gè)變量,它們的值不同,但它們都是int型的。如果它們的值相同,那也是同類型的不同變量。相同的,同一類的不同對象,它們的成員變量的值不同,但都是同一類的。就算他們的成員變量值相同,也是同一類的不同變量。這也好比人就是一個(gè)類,人與人之間的很多數(shù)據(jù)的值是不一樣的,高矮胖瘦、年齡姓名、生活經(jīng)歷,但是基本功能是相同的,能跑能跳能吃能睡。只是因?yàn)槠鋽?shù)據(jù)值的不同,造成其功能運(yùn)行時(shí)的差異。在這個(gè)游戲里,兩個(gè)玩家的功能(即行為邏輯)是相同的,出現(xiàn)差異的原因是其成員變量的值不同造成的。因此,它們是同類的不同對象。我們歸納一下玩家類的包括哪些內(nèi)容:

  • 一個(gè)代表要到的牌的數(shù)組(數(shù)據(jù))
  • 接收牌的功能(邏輯)
  • 匯總手中牌點(diǎn)數(shù)的功能(邏輯)
  • 給出結(jié)算信息的功能(邏輯)
  •   根據(jù)以上信息,我們可以寫出下面的“玩家類”:

    public class Player { private int[] pokers; private int index; public Player(){ this.pokers = new int[12]; // 最極端情況下拿到4個(gè)A,4個(gè)2,4個(gè)3,因此長度設(shè)為12即可 this.index = 0; } // 要一張牌 public boolean wantPoker(int num){ if (this.index >= 12) { // 限制性代碼,避免數(shù)組序號出錯(cuò) return false; } this.pokers[index] = num; index++; // 序號加1 return true; } // 獲得當(dāng)前的點(diǎn)數(shù)之和 public int getSum(){ int sum = 0; for (int i = 0; i < this.pokers.length; i++){ if (pokers[i] == 0){ break; } sum += (pokers[i] - 1) % 13 + 1; // 獲得真正點(diǎn)數(shù) } return sum; } // 獲得牌局結(jié)算信息 public String getStatString(){ String txt = ""; for (int i = 0; i < this.pokers.length; i++){ if (pokers[i] == 0){ break; } switch ((pokers[i] - 1) / 13){ // 根據(jù)真正的花色的值進(jìn)行選擇 case 0:{ txt += "黑桃"; break; } case 1:{ txt += "紅桃"; break; } case 2:{ txt += "梅花"; break; } case 3:{ txt += "方片"; break; } } txt += ((pokers[i] - 1) % 13 + 1) + ","; // 獲得真正點(diǎn)數(shù)的字符串 } return txt; }}

      上面這個(gè)Player類就實(shí)現(xiàn)了我們對它的要求。但是看這段代碼我們可以發(fā)現(xiàn)一個(gè)問題:原來我們說所有與撲克牌實(shí)現(xiàn)的細(xì)節(jié)是被封裝在Pokers類里面的,但是在Player類的getSum與getStatString兩個(gè)方法里,卻要知道關(guān)于牌的很多細(xì)節(jié),要知道真正的點(diǎn)數(shù)值與花色值如何求出,還要知道如何將花色值翻譯成字符表達(dá),這是與我們上面表達(dá)的原則是相違背的。因此,這兩個(gè)方法里的很多實(shí)現(xiàn)的細(xì)節(jié)應(yīng)該被放到Pokers類里去。我們對Pokers類進(jìn)行擴(kuò)充,加幾個(gè)方法:

    // 獲得真正點(diǎn)數(shù)public static int getCount(int num){ return (num - 1) % 13 + 1;}//從牌的序號中得出花色值public static int getColor(int num){ return (num - 1) / 13; }// 從牌的序號中得出花色值的文字表達(dá)public static String getColorString(int num){ String txt = ""; switch (getColor(num)){ case 0:{ txt = "黑桃"; break; } case 1:{ txt = "紅桃"; break; } case 2:{ txt = "梅花"; break; } case 3:{ txt = "方片"; break; } } return txt;}

      這樣關(guān)于撲克牌的實(shí)現(xiàn)細(xì)節(jié)就真正地全部封裝在Pokers類里了。因?yàn)檫@3個(gè)方法并不是對Pokers的成員變量進(jìn)行操作,也就不需要成為對象方法(對象方法需要通過實(shí)例化的類的對象才能調(diào)用),我們在前面加上static修飾符,使其成為靜態(tài)方法,這樣調(diào)用時(shí)直接使用類名就可以調(diào)用了。再重構(gòu)Player類為如下代碼:

    public class Player { private int[] pokers; private int index; public Player(){ this.pokers = new int[12]; // 最極端情況下拿到4個(gè)A,4個(gè)2,4個(gè)3,因此長度設(shè)為12即可 this.index = 0; } // 要一張牌 public boolean wantPoker(int num){ if (this.index >= 12) { // 限制性代碼,避免數(shù)組序號出錯(cuò) return false; } this.pokers[index] = num; index++; // 序號加1 return true; } // 獲得當(dāng)前的點(diǎn)數(shù)之和 public int getSum(){ int sum = 0; for (int i = 0; i < this.pokers.length; i++){ if (pokers[i] == 0){ // 為0時(shí)表示當(dāng)前已經(jīng)沒牌了 break; } sum += Pokers.getCount(pokers[i]); // 獲得真正點(diǎn)數(shù) } return sum; } // 獲得牌局結(jié)算信息 public String getStatString(){ String txt = ""; for (int i = 0; i < this.pokers.length; i++){ if (pokers[i] == 0){ break; } txt += Pokers.getColorString(pokers[i]) + Pokers.getCount(pokers[i]) + ","; } return txt; }}

      現(xiàn)在我們已經(jīng)建立了管牌的Pokers類和玩牌的Player類,那么一個(gè)牌局就可組起來了。讓我們開干,把主程序的調(diào)用代碼改了:

    Pokers pokers = new Pokers(); pokers.getNextPoker(); Player p1 = new Player(); Player p2 = new Player(); for(int i = 0; i < 4; i++){ p1.wantPoker(pokers.getNextPoker()); p2.wantPoker(pokers.getNextPoker()); } String text = "player1:" + p1.getStatString() + "總數(shù):" + p1.getSum() + ",player2:" + p2.getStatString() + "總數(shù):" + p2.getSum(); TextView txtResult = (TextView)findViewById(R.id.txtResult); txtResult.setText(text);

      運(yùn)行以后,效果如下:

      同學(xué)們可以看到變?yōu)槭褂妙愐院?#xff0c;主程序的邏輯變得清晰簡單了(因?yàn)槲覀冞€沒有做是否要牌的決策方法,就用每個(gè)玩家發(fā)4張牌來代替),每個(gè)具體的工作都有專門的類來管理與執(zhí)行,主邏輯只需要指揮(調(diào)用)對應(yīng)的對象就能把整個(gè)任務(wù)完成好。這看起來是不是就很像我們真實(shí)社會(huì)運(yùn)行的狀態(tài)了呢?我們可以看到我們的代碼發(fā)生重大的變化,這是因?yàn)槲覀儗Υa的組織方式發(fā)生了變化,而這個(gè)新的方式就是“面向?qū)ο缶幊獭薄?/p>

    總結(jié)

    以上是生活随笔為你收集整理的列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。