Android探索之旅 | 面向對象和Java基礎

-- 作者 謝恩銘 轉載請注明出處

上一篇 Android探索之旅 | Android簡介 中說到:

"Android的默認開發語言是Java,入門簡單。而且,你的Java水平不需要多好就可以上手開發Android App了。"

不少朋友說看到后很是心安。

不過小編也不想誤導大家: 你的Java和面向對象水平當然是越高越好啦, 也要學學設計模式, 這樣才能設計出可復用,可擴展,可維護的優秀程序。

如果你是Java高手,那么上手Android很容易。如果你是新手或者完全沒接觸過Java, 也不要驚慌, 只要你有一些基本的編程知識和面向對象的概念即可。

比如, 你之前學習過C#, PHP, Ruby, Python, C++等面向對象的編程語言,那么你上手Android不會有什么大障礙。

其實, 現如今App開發已經很容易上手。你說現在Android的官方IDE: Android Studio(下一課我們配置開發環境會講到), 蘋果的iOS開發官方IDE : xCode。都已經做得很好很簡便了: 代碼提示,自動補全,錯誤提示,修改提示, 等等, 簡直是夫復何求!

所以現在做App已經簡單得不能再簡單了,拉起來直接做唄。你不實踐永遠入不了門, 如果一直在那邊問: 我不怎么懂Java能不能做Android開發啊? 那你止步不前, 怪誰呢? 必須踏出信心的第一步。

小編以前有段時間業余做過游戲開發,主要用Unity 3D, 也接觸過Cocos2D-X。 以前從來沒開發過3D或2D游戲, Unity 3D里面的所用的語言C#或Javascript也不是那么精通,但很快就能做不少小游戲出來。

如果你完全沒有編程基礎, 那么最好先了解一下編程, 不過也不是說就不能上手Android了, 只是入門稍微累一些。但也不要怕, 你可以的。有問題可以問啊。

Java基礎


我覺得Java語言已經設計得很容易上手了, 如果你連C語言和C++都能駕馭, 那Java相對來說實在比較親民。

  1. 標識符命名規范

  2. Java數據類型

  3. 運算符

  4. 分支語句(if,switch)

  5. 循環語句(for,while)

  6. 函數的定義

等等

這些基礎, 只要是個程序員,都懂。 語言之間可以融會貫通。

其他的知識點, 要用到時再去Google搜唄。

面向對象基礎


Android采用面向對象的編程技術。 因此我們學習一下面向對象的基礎知識, 之后我們還是會花時間細說的。

"面向對象編程"(OOP: Object-Oriented Programming) 。這是一種不同于以往的編程模式。

英語Object是"對象"的意思, 聽到這個詞, 少年你又激動了對吧? 我說的可不是找對象...

面向對象編程的模式不會立即使你的程序發生革命性的改變,而且剛開始接觸的時候你甚至會覺得這種模式沒什么用。

目前為止我們的編程模式一直是:面向過程(POP : Procedure-Oriented Programming)。

也就是:我想要實現什么功能,就寫什么函數,聲明相應變量,等等。比如我要顯示一段信息到屏幕上,我可以創建一個函數:

void showMessage(string message);復制代碼

如果你接觸過C語言,那么應該知道C語言是面向過程編程模式。當然了, C語言也可以實現面向對象編程的,只不過本身沒有內嵌的實現而已, 你可以用struct(結構體)來模仿class(類),但是比較麻煩。

相信我:慢慢地,你會發現面向對象的編程模式比面向過程更符合人類的思維。你將能更好地組織你的代碼。

聽到面向對象編程,你最好奇的詞應該是"對象"吧。

你會想:這不會是又一種神秘的設計吧?難道是一個宿醉后的瘋狂程序員想出來的東西?

其實不然。我們身邊充滿著對象:你的車是一個對象,你的電腦是一個對象,你的手機是一個對象,你的房子是一個對象, 你的對象也是一個對象,等等。

事實上,我們所知道的所有東西都可以被看作對象。面向對象編程,就是在代碼中操作這些被稱為"對象"的元素。

下面列舉幾種平時我們在編程中常見的對象:

  • 一個窗體:例如QQ的一個聊天對話框,畫圖軟件的主界面。

  • 一個按鈕:比如安裝軟件時那些"下一步"的按鈕。

  • 游戲里的一個人物。比如Warcreft里的伊利丹。

  • 一首歌,一個視頻, 等等

說了這么多,對象到底是啥呀?是一種新的變量嗎,還是一種新的函數類型?

no, no, no,都不是。對象是一種新的編程元素!

或者說得更具體一些,對象里面混合了變量和函數。

可不要被這句話嚇跑了,我們一點點來探索。

想象一下... 一個對象。 嗯, 不是讓你想象美女...

還是來點實際的圖片好了,能幫助我們理解。

設想


有一天,一個程序員決定要寫一個圖形界面的程序,這個程序可以在屏幕上顯示窗體,調整窗體大小,移動窗體,刪除窗體,在窗體里可以畫各種圖形,等等。

要實現這些功能,代碼是比較復雜的:需要不少函數,這些函數之間互相調用。而且還需要很多變量,例如窗體位置(x坐標和y坐標),窗體的寬,高,等等。

這個程序員花了不少的時間來寫這個程序。程序有點復雜,但是他完成了。最終,他實現的代碼包含了很多的函數和變量。

當我們第一次看到他的程序時,就好像看一個化學家的一個實驗環境一樣,啥也看不懂。如下圖:

不過,這個程序員對自己的程序還是很滿意的,他甚至要把程序發布到網上,讓大家可以用他的程序來創建窗體,直接拿來用就可以了,而不需要從零開始寫代碼。

不過,有一個問題,如果你不是化學專家,你可能得花不少時間搞懂這一堆東西到底是怎么運作的:哪一個函數最先被調用呢?為了改變窗體的大小,哪個變量要被傳遞到哪個函數里呢?總之,我們很害怕把整個實驗環境給弄炸了。

在接到一些用戶的建議和抱怨后,這個程序員決定替用戶著想。他重新設計了他的代碼,從面向過程的模式改為面向對象的模式。

這就好比他把所有和這個化學實驗有關的東西都放到一個大方盒子里。這個大方盒子就是我們所說的"對象"。如下圖:

在上圖中,大方盒子的一部分被設為透明,是故意的,使你可以看到里面的景象。是的,我們的化學實驗的所有設備都在大方盒子里。

但是,實際當中,大方盒子是完全不透明的,用戶從外面看不到里面到底有什么。如下圖:

這個大方盒子里存放著函數和變量(那些化學儀器,試管,燒杯,等等),但這些元素對于用戶卻是不可見的。

這樣,用戶看到的就不再是成堆的試管,燒杯,等等讓其抓狂的東西了。

在大方盒子外面,我們呈現給用戶的就只有一些按鈕:一個按鈕用于"打開窗體",一個按鈕用于"改變窗體大小",一個按鈕用于"關閉窗體",等等。用戶完全不需要理解大方盒子里面的運作原理。

因此,以面向對象的模式來編程,就是:

程序員編寫代碼(可能很復雜),然后將這些復雜的代碼都裝到一個大方盒子(對象)里,用戶從外面不能看到里面的實現細節。
因此,對于使用這個對象的用戶來說,操作起來就容易多了:只需按下對應的按鈕,不需要精通化學也可以使用整個實驗環境提供的功能了。

當然了,上面的比喻只是一個大致概念。


你會問:我們學的不是面向對象嗎?為什么無端跑出一個"類"來?

類是什么呀?類和對象之間又有什么"不可告人"的關系呢?

呃... 為了創建一個對象,必須先創建類!

解釋如下:比如我們要造房子,總得先有設計圖紙對吧?這樣,類就好比房子的設計圖紙,而對象就是根據圖紙建造出來的房子。

因此,創建一個類,其實就是畫出對象的設計圖紙。

只要有了房子的設計圖,你就可以依據這張設計圖造無數多個房子。類和對象也是這樣:一旦你把類設計好了,你就可以依據這個類來創建無數多個對象。如下圖所示:

術語:我們說對象是類的實例("實例"在英語中是instance),這在面向對象編程領域經常聽到。這表明對象是類的具體的物化(房子也是房屋的設計圖紙的具體物化)。

你會說:這有點抽象吧。那好,我們就來創建一個類看看。

創建一個類,但是創建什么類呢?

首先必須選擇一個類來創建。還是以建筑為例,我們可以創建一座公寓,一個帶游泳池的別墅,一間閣樓。

選擇是很多樣的。當我們剛開始學習面向對象編程的時候,我們會有點卻步不前,不確定哪些東西可以被看作對象。

但答案卻是:幾乎所有東西都可以被認為是對象。

舉個實例


為了幫助你了解對象和其內容,讓我們用一個簡單的比喻開始。

假設你開車,你要踩加速踏板來使車子加速。

那么,在你可以開車前,得有人來設計制造你的車。

要制造一輛車, 需要先有工程圖紙上的設計,類似于之前描述房子的設計藍圖。

這些設計圖中包括了加速踏板的設計。

對于駕駛員來說, 踏板有加速的作用, 但是他并不了解其中原理。就好比他也不了解為什么方向盤可以改變車子的方向。這些都被隱藏了起來。這使得人們只需要會開車就可以, 而并不需要每個人都去研究汽車的底層原理。

類和方法


類就是這個汽車的設計圖紙。

一輛汽車有很多種能耐/能力, 例如可以行駛, 加速, 換方向, 剎車, 等等。

之前我們說的駕駛員踩加速踏板使其加速, 就是使用了汽車的其中一個能力。

在面向對象中, 我們把類中執行特定任務的區塊稱為 方法, 其實就類似面向過程編程中所說的函數。

類的方法向用戶隱藏了其具體實現,就像汽車的油門踏板可以控制汽車加速, 但駕駛員不知道其原理一樣。

實例化


正如你不能去開一張車的設計圖紙, 也不能在一個廚房的設計圖紙上做菜一樣。

我們的類(設計圖紙)需要被實例化才能被使用, 就好比車子必須依據設計圖紙被工廠制造出來才能被我們使用。

從類實例化出來可供使用的東西就是: 對象。

重用


就像汽車的設計圖紙,可被多次重復使用來構建多輛汽車。 你也可以重復使用類來構造許多對象。

類的可重復使用性是面向對象編程的一個很重要的優勢。

消息和方法調用


當你開車時,踩下加速踏板, 實際上是發送了一個指令給車子, 車子接收到指令就會加速。

類似地,你將消息發送給一個對象, 每個消息就是一個方法調用,告訴對象中的方法來執行其任務。

屬性


一輛汽車,除了具有能力(方法)來完成任務,也有屬性。

比如車的顏色,車門的數目,油罐的儲油量,當前行駛速度和里程表讀數。類似面向過程編程中的變量。

和汽車的能力(方法)類似, 汽車的屬性也是其工程圖設計的一部分。當你駕駛一輛實際的汽車,這些屬性與汽車是緊密聯系的。每輛汽車有自己的屬性。

封裝


類里面"封裝"了屬性和方法,屬性和方法是密切相關的。

不同類的對象可以彼此進行通信,但它們通常不被允許知道其他對象的實現細節。

對象對外隱藏了這些細節, 這就是封裝的基本概念, 也是面向對象的一個關鍵。

繼承


一個類可以通過繼承別的類來快速獲取別的類的屬性和方法。

之后, 在繼承而來的基礎上, 還可以自定義屬于自己的屬性和類。

用我們的汽車來類比,普通車的車頂不能被開啟, 但是敞篷車可以。

敞篷車就是從最基礎的車這個類繼承了所有車的一般屬性和方法, 再自己加入了可以打開車頂的方法。

總結


當然了, 這些概念還需要我們之后實戰來慢慢消化。慢慢來學習吧~


人世間,
萬千情感皆有溫度,
千萬代碼似有性格。
這里有原創教程,IT叢林......
和你一起探索程序人生。
微信公眾號「程序員聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮斗的嵌入式軟件工程師。
個人簡介
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:“向著標桿直跑”

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259340.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259340.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259340.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DataGirdView 編輯項時的驗證

dgvConfig.DataSource CreateTable();dgvConfig.Columns["編號"].ReadOnly true; //只讀dgvConfig.AllowUserToAddRows false; //不允許添加新行dgvConfig.EditingControlShowing new DataGridViewEditingControlShowingEventHandler(dgvConfig_EditingControlS…

使用Vitamio打造自己的Android萬能播放器(7)——在線播放(下載視頻)

前言 本章將實現非常實用的功能——下載在線視頻。涉及到多線程、線程更新UI等技術,還需思考產品的設計,如何將新加的功能更好的融入到現有的產品中,并不是簡單的加一個界面就行了,歡迎大家交流產品設計和技術細節實現&#xff01…

生成0到1之間隨機數的C代碼

#include <stdlib.h>#include <stdio.h>#include <time.h>int main(){srand((unsigned)time(NULL));int i;double r;for(i0;i<50;i){r(float)rand()/RAND_MAX; printf("%f\n",r);}return 0;}

HTML聲明文檔類型后樣式出錯,doctype如何聲明

如何doctype聲明&#xff0c;新增的結構元素和功能元素HTML5已形成了最終的標準&#xff0c;概括來講&#xff0c;它主要是關于圖像&#xff0c;位置&#xff0c;存儲&#xff0c;多任務等功能的增加。 新增的元素有繪畫 canvas &#xff0c;用于媒介回放的 video 和 audio 元素…

Error-Project facet Java version 1.8 is not supported

最近導入最新的Strtus2.5.10.1 Demo時出現了這個錯誤 解決方案如下&#xff1a; 選中工程——右鍵——Properties 然后依次展開找到如圖所示內容&#xff0c;將1.8改成1.7即可。 原因&#xff1a;工程默認配置是1.8&#xff0c;而本地環境JDK版本為1.7&#xff0c;兩則不匹配造…

6.2

轉載于:https://www.cnblogs.com/tutuaixiaomei/p/3354356.html

Tomcat全攻略

內容&#xff1a; 一&#xff1a;簡單介紹二&#xff1a;安裝及配置三&#xff1a;應用四&#xff1a;綜述參考資料關于作者宗 鋒西北大學計算機系碩士2001 年 12 月 隨著java的流行&#xff0c;其在web上的應用也越來越廣&#xff0c;tomcat作為一個開源的servlet容器&#xf…

《G檔案》中關于游戲程序設計的文章

剛拿到前導的《G檔案》&#xff0c;發現了主程劉剛的文章&#xff0c;是目前我所見 到的關于游戲編程的最好的一篇&#xff0c;與大家共享。轉載&#xff1a;http://www.360doc.cn/article/2778_53476.html PC游戲編程 目錄 1 游戲程序理論 1.1 技術基礎 1.2 游戲底層 1.3 編…

shell筆記

system 磁盤 磁盤空間使用情況df查看文件或目錄大小du掛載usb sudo fdisk -l # Find what the drive is called e.g. /dev/sdb1 sudo mkdir /media/usb sudo mount /dev/sdb1 /media/usb sudo umount /media/usb# umount sudo umount /media/usb utils awk 打印文件的第一列(域…

html5編輯文檔,HTML5帶各種趣味動畫的文本編輯器

CSS語言&#xff1a;CSSSCSS確定body {background-color: #eee;}html,body {margin: 0px;height: 100%;overflow: hidden;}.toolbar {width: 100%;background: #fff;padding: 4px 10px;}.characters {display: inline-block;margin-right: 20px;vertical-align: top;}.characte…

社會轉型

轉載&#xff0c;版權由作者所有。 常常在政府工作報告中看到關于“社會轉型期”的說法&#xff0c;不是太明白&#xff0c;在百度里找了找&#xff0c;果然有不少&#xff0c;摘抄下來&#xff0c;做為學習資料用&#xff1a; 一是指體制轉型&#xff0c;即從計劃經濟體制向市…

在WPF中處理Windows消息

在Winform中 處理Windows消息通過重寫WndProc方法 在WPF中 使用的是System.Windows. Sytem.Windows.Controls等名字空間&#xff0c;沒有WndProc函數 WPF中處理消息首先要獲取窗口句柄&#xff0c;創建HwndSource對象 通過HwndSource對象添加消息處理回調函數。 此外 WPF中沒有…

Android Material風格的應用(三)--DrawerLayout

添加抽屜導航 Android Material風格的應用(一)--AppBar TabLayoutAndroid Material風格的應用(二)--RecyclerViewAndroid Material風格的應用(三)--DrawerLayoutAndroid Material風格的應用(四)--FloatActionButtonAndroid Material風格的應用(五)--CollapsingToolbar DrawerLa…

html5 數據緩存,HTML5: 本地緩存

HTML5 提供了兩種在客戶端存儲數據的新對象&#xff1a;localStorage&#xff1a;沒有時間限制的數據存儲&#xff0c;在同一個瀏覽器中&#xff0c;只要沒被手動清理&#xff0c;第二天、第二周或下一年之后&#xff0c;數據依然可用。sessionStorage&#xff1a;針對一個 ses…

C# 委托:把方法組合到一個數組中使用

C# 委托&#xff1a;把方法組合到一個數組中使用 using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace ConsoleApplication1 {class MathOperations{public static double MultiplyByTwo(double value){return value * 2;}public…

上傳Text文檔并轉換為PDF

今天在ASP.NET MVC環境中學習一些PDF相關的知識&#xff0c;想法是上傳文件成功時&#xff0c;并把文件轉換為PDF文檔。 打開你的專案&#xff0c;運行NuGet包管理器&#xff0c;下載一個叫iTextSharp的東東&#xff1a;點擊Install&#xff0c;按鈕提示確認安裝&#xff0c;成…

某著名公司2015暑期實習招聘試題及相關內容復習

1.&#xff09;輸出下面的結果<pre name"code" class"cpp">#include <iostream> using namespace std;int main(int argc, char *argv[]) {int **a[5][4];int *b[5][4];int *c[5];int d[5][4];char *e"helloworld";char g[]"01…

遞歸函數(九):最小不動點定理

遞歸函數&#xff08;一&#xff09;&#xff1a;開篇遞歸函數&#xff08;二&#xff09;&#xff1a;編寫遞歸函數的思路和技巧遞歸函數&#xff08;三&#xff09;&#xff1a;歸納原理遞歸函數&#xff08;四&#xff09;&#xff1a;全函數與計算的可終止性遞歸函數&#…

html中單選框顏色怎么改,如何更改單選按鈕的顏色?

侃侃無極一種快速的解決方法是使用來覆蓋單選按鈕的輸入樣式:after&#xff0c;但是創建自己的自定義工具箱可能是更好的做法。 input[typeradio]:after { width: 15px; height: 15px; border-radius: 15px; top: -2px; left: -1px; …

PhotoShop

前景色填充&#xff1a;Altdelete 背景色填充&#xff1a;Ctrldelete 切換前景/背景色&#xff1a;X 鍵 接按d 是默認的黑色和白色轉載于:https://www.cnblogs.com/xingfuzzhd/p/3358156.html