Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android SDK上手指南:Java應用程序編程

Android SDK上手指南:Java應用程序編程

編輯:關於Android編程

介紹

如果大家已經對Java非常熟悉,那麼不妨直接忽略這部分內容。如果大家的技巧還存在局限或者對Java這種語言只聞其名,那麼本文將為各位解答很多在Android開發當中經常遇到的問題。需要注意的是,這篇文章並不能作為Java起步教程來閱讀,最多只能算是基礎知識匯總。如果對Java毫無了解,大家還需要參考其它一些額外的Java學習資料。

在這份教程中,我們不會過度深入細節,不過如果大家對於某些概念還不大清楚,請點擊此處參閱甲骨文Java指南。這是一份非常優秀的Java語言指導材料,非常適合初學者。如果在剛剛開始閱讀時發現本教程提到的一些內容有些陌生,也請大家千萬不要驚慌。只要真正著手開始在Android項目中進行嘗試,各位很快就能理解本文表達的內容。

1. Java語法

第一步

大家已經在我們的Android項目中見識過一部分Java語法了,但為了清楚起見,讓我們再從另一個項目重新學習。這一次我們不再使用Android項目,而直接換成Java項目——這樣大家就能更輕松地感受到我們所使用的結構。打開Eclipse,點擊“New”按鈕。在彈出的導航窗口中下滾到Java文件夾中並將其打開,選擇“Java Project”然後單擊下一步。

 

輸入“MyJavaProject”作為項目名稱並點擊“Finish”。Eclipse接下來會在工作區內創建我們的新項目。在Package Explorer當中,打開新項目文件夾,右鍵點擊“src”並選擇“New”、然後選“Class”。這時在Name框中輸入“MyMainClass”。接著勾選旁邊的復選項“public static void main”最後點擊“Finish”。

 

Eclipse會創建出類並在編輯器中打開。大家不必過多關注項目結構或者類中的現有內容,因為我們的Android項目所使用的結構與Java項目並不相同。各位可以利用這個項目來磨練自己的Java編碼技能,在這裡代碼的運行與測試都要比Android應用簡便得多,而且我們也能更多地關注Java語法本身。

我們在類文件中看到的“public static void main”行就是主方法。無論方法的具體內容是什麼,它都會在應用程序運行時加以執行。方法的內容就是顯示在“public static void main(String[] args)”後面大括號裡的部分。Eclipse可能還生成了一個“to do”行——直接無視就好。在其後創建新行,我們就從這裡開始添加自己的代碼。

第二步

在Java當中,一條變量可以保存一個數據值,例如文本字符串或者數字。當我們在Java中創建或者“聲明”一個變量時,需要指定其中的數據類型並為其命名。輸入以下代碼:


  1. intmyNum;

這一行聲明了一個整數變量。我們可以通過以下代碼行聲明一個變量並為其分配一個值:


  1. intmyNum=5;

現在我們可以通過名稱引用這條變量了。添加以下代碼行,從而將變量值寫入到輸出控制台:


  1. System.out.println(myNum);

大家一般不會在自己的Android應用中以這種方式向系統輸出寫入結果,而是用LogCat視圖取而代之。不過通過這種輸出寫入方式,我們能夠更為便捷地對Java代碼進行測試。

 

第三步

現在讓我們運行應用。運行過程與Android應用存在些許不同,但我們會在稍後繼續進行說明。選擇“Run”,而後選擇“Run Configurations”。在彈出的列表左側選擇“Java Application”並點擊上方的“New launch configuration”。如果這是我們的惟一一個Java應用,Eclipse會自動選擇運行剛剛創建完成的小小成果。

現在點擊“Run”來運行我們的應用程序。大家會看到,編輯器下方的控制台視圖中將顯示出數字“5”。大家可以利用這種方式在學習過程中對Java代碼進行測試。

大家現在可以通過工具欄中的“Run”按鈕隨時運行上一次啟動過的項目。

 

第四步

無論何時,只要是在Java中進行變量聲明,我們都會使用相同的語法。為了在以後的編程工作中為變量分配不同的值,我們可以通過名稱對其進行引用:


  1. myNum=3;

上述代碼會覆蓋掉現有值。在Java中存在著很多不同的變量類型。其中int屬於被引用的基本類型,此外還有一些其它數字類型;char用於字符值,而boolean則用於保存真假值。對象的類型也分許多種;關於對象的話題,我們放在以後進行討論。對於大家來說,最熟悉的基本對象類型應該要數String了,它的作用是保存一條文本字符串:


  1. StringmyName="Sue";

文本字符串值要用引號括起來。大家可以在正面的例子中看到它的使用方法:


  1. System.out.println("number:"+myNum);

添加上述代碼並運行,控制台會顯示“number:”再加上變量值。

第五步

在上面我們看到了賦值運算符“=”——正面我們再來看其它一些常見運算符:


  1. //add
  2. myNum=5+6;
  3. //subtract
  4. myNum=7-3;
  5. //multiply
  6. myNum=3*2;
  7. //divide
  8. myNum=10/5;
  9. //remainder
  10. myNum=10%6;
  11. //increment(addone)
  12. myNum++;
  13. //decrement(subtractone)
  14. myNum--;

運算符既可以被用在變量當中,也可以作為硬編碼數字(如上所示):


  1. intmyNum=5;
  2. intmyOtherNum=4;
  3. inttotal=myNum+myOtherNum;//9

第六步

作為Android基礎內容的另一種Java結構就是注釋。大家可以通過以下兩種方式添加注釋:


  1. //thisisasinglelinecomment
  2. /*Thisisamultilinecomment
  3. *stretchingacrosslines
  4. *togivemoreinformation
  5. */

最重要的是養成編寫代碼的同時添加注釋的好習慣,這一方面便於我們自己日後查看,另外也能讓其他合作者了解我們的編碼意圖。

2. 控制結構

第一步

我們向主方法中添加的代碼會在Java應用程序運行時同時執行。而在運行我們所創建的Android應用程序時,主Activity中onCreate方法的代碼會同時執行。這些方法中的所有代碼行都會按從上到下的順序依次執行,不過執行的流程並不總是線性的。Java當中有很多控制結構,正面我們就從條件開始了解其中最常見的幾種。條件語句一般用於進行測試從而確定執行流程。在Java當中,最簡單的條件結構就是if語句:


  1. if(myNum>3)
  2. System.out.println("numberisgreaterthan3");

這項測試的目的在於檢查變量的值是否大於3。如果確實大於3,那麼字符串將被寫入輸出結果。如果小於等於3,則不向輸出結果寫入任何內容、繼續執行程序中的下一行。條件測試會“返回”一個真假值。真與假都屬於boolean值。我們也可以向其中添加else,這樣其內容只會在返回假值時才執行:


  1. if(myNum>3)
  2. System.out.println("numberisgreaterthan3");
  3. else
  4. System.out.println("numberisnotgreaterthan3");

在我們的示例中,else語句會在值等於或者小於3時執行。嘗試在代碼的整數變量中添加不同的值,看看條件測試結果會發生哪些變化:


  1. if(myNum>10)
  2. System.out.println("numberisgreaterthan10");
  3. elseif(myNum>7)
  4. System.out.println("numberisgreaterthan7");
  5. elseif(myNum>3)
  6. System.out.println("numberisgreaterthan3");
  7. else
  8. System.out.println("numberis3orless");

只有在流程中的每一次測試中都返回假值時,所有測試行才會被徹底執行一遍。因此對於大部分數字來說,只會輸出一條字符串。如果有必要,大家可以把多條else if語句串點起來。大家還可以利用if語句與一個或者多個else if相結合,而不必每一次都在之後單獨設置else。

下面我們測試一個數字是否大於另一個。嘗試使用以下變量:


  1. if(myNum<10)
  2. System.out.println("numberlessthan10");
  3. if(myNum==10)
  4. System.out.println("numberequals10");
  5. if(myNum!=10)
  6. System.out.println("numberisnotequalto10");
  7. if(myNum>=10)
  8. System.out.println("numbereithergreaterthanorequalto10");
  9. if(myNum<=10)
  10. System.out.println("numbereitherlessthanorequalto10");

大家也可以利用包含字符串的變量類型進行類似的測試。要同時進行多項測試,可以利用以下語法:


  1. if(myNum>=10&&myNum<=50)
  2. System.out.println("numberisbetween10and50");

其中的“&&”是作為“and”運算符存在的,意思是整條語句只有在兩項測試都返回真值時才被判定為真。而“or”運算符將在兩條測試中任意一條返回真值時判定為真:


  1. if(myNum<0||myNum!=-1)
  2. System.out.println("numberislessthan0ornotequalto-1");

為了將代碼組成代碼塊,我們可以使用大括號——兩個括號之間的所有代碼都會在測試返回真值時執行:


  1. if(myNum<10)
  2. {
  3. System.out.println("numberlessthan10");
  4. myNum=10;
  5. }

這些括號能夠在循環、方法以及類中實現代碼分組。

第二步

接下來讓我們看看循環。下面的for循環會進行十次遍歷,意味著它的內容將執行十次:


  1. for(inti=0;i<10;i++){
  2. System.out.println(i);
  3. }

在for循環中的第一個表達式旨在將一個整數型計數器變量初始化為零。第二個表達式則是條件測試,檢查該變量的值是否小於10。如果返回的是真值,則循環內容得到執行;如果返回的是假值,則中止循環。一旦循環當中的內容開始執行,第三個表達式就同時執行,即遞增計數器。

另一種循環while所使用的語法稍有區別。以下代碼就是我們利用while來實現上面的for循環的相同執行效果:


  1. inti=0;
  2. while(i<10){
  3. System.out.println(i);
  4. i++;
  5. }

循環當中可以容納多行代碼,其中包括其它循環。

第三步

我們已經接觸了主方法與Android的onCreate方法。下面讓我們一起學習如何創建自己的方法。將以下方法放置在主方法的右括號之後:


  1. publicstaticvoiddoSomething(){
  2. System.out.println("something");
  3. }

該方法被定義為public,這意味著項目中的所有類都可以調用其進程。如果它的屬性為“private”,則代表只供同一個類內部進行訪問(也就是‘visibility’)。一般來說,大家不會在自己的第一個Android應用中包含“static”修飾符,因此忽略掉它即可。而“void”代表著返回類型。在我們的示例中,該方法不會返回任何值。為了執行該方法,我們需要在主方法中添加一項調用:


  1. doSomething();

運行應用程序並查看其功能——改變方法以返回一個值:


  1. publicstaticintdoSomething(){
  2. return5;
  3. }

改變方法調用並再次運行:


  1. System.out.println(doSomething());

返回的值會被寫出。方法還可以接收參數:


  1. publicstaticintdoSomething(intfirstNum,intsecondNum){
  2. returnfirstNum*secondNum;
  3. }

在調用該方法時,大家必須符合正確的參數類型與數字:


  1. System.out.println(doSomething(3,5));

方法能夠將應用程序進程拆分為邏輯塊。如果大家需要多次執行同一項任務,那麼它們的作用將非常重要;我們可以簡單在方法中進行定義,然後在需要時隨時調用。如果各位需要改變處理流程,也只需在方法代碼中進行修改。

3. 類與對象

第一步

我們已經了解了方法如何被用於重新使用代碼並將其拆分成邏輯部分。類與對象則能夠在更大的范圍內實現此類功能。大家可以將應用中的任務劃分成不同對象,其中每個對象都由它所歸屬的類為其定義一系列職責。這類似於用一種方法負責一個特定功能區域,不過一個對象可以擁有多個方法而且能夠保存數據值。

想象我們正在創建一款游戲——大家可以創建一個專門用來處理用戶詳細信息的類。在Package Explorer中選擇我們的應用程序包,右鍵點擊並選擇“New”而後是“Class”。輸入“GameUser”作為類名稱,確保main method stub復選框沒有被勾選,然後點擊“Finish”。Eclipse會打開這個類文件,在初始狀態下其中只包含它的類聲明概要:


  1. publicclassGameUser{
  2. //classcontent
  3. }

大家所添加的所有內容都應該位於兩個大括號之間(除非大家添加導入語句,這部分內容將位於最前方)。我們的Android應用會識別出羅列於文件開頭的包名稱。當然這裡我們使用的是默認包,所以前面並沒有列出其它內容。

第二步

在這個類當中添加以下變量:


  1. privateStringplayerName;
  2. rivateintscore;

這些被稱為“實例變量”,因為它們被定義為我們所創建的類中的實例。在它們之後添加一個構造方法,它會在該類中的某個對象被創建後開始執行:


  1. publicGameUser(StringuserName,intuserScore){
  2. playerName=userName;
  3. score=userScore;

這裡的構造永遠與類使用同樣的名稱,而且可能要求也可能不要求使用參數。該構造通常應該向實例變量分配值,一般是通過參數來實現。

第三步

類也可以定義方法。將以下典型集合添加到構造之後:


  1. publicStringgetName(){returnplayerName;}
  2. publicintgetScore(){returnscore;}
  3. publicvoidsetName(StringnewName){playerName=newName;}
  4. publicvoidsetScore(intnewScore){score=newScore;}

這些被稱為get與set方法,或者叫getter與setter,因為它們會利用接收及發送實例變量值的能力將外部代碼添加到類中來。查看Eclipse中的Outline視圖,理解它如何幫助實現導航類內容。

\

第四步

保存我們新建的類文件。回到主類當中,為新類在主方法中創建一個對象:


  1. GameUseraUser=newGameUser("Jim",0);

我們符合構造當中的參數要求——以上代碼中的“new”關鍵字將使構造開始執行。現在我們可以使用這個類實例,通過調用其方法訪問其中的數據:


  1. System.out.println(aUser.getScore());
  2. aUser.setScore(5);
  3. System.out.println(aUser.getScore());

運行程序以查看調用對象上的public方法之後,值產生了什麼樣的變化。大家可以創建多個對象實例,並對它們進行分別管理:


  1. GameUseranotherUser=newGameUser("Jane",5);

4. 繼承與界面

第一步

我們已經了解了如何通過創建對象實例來使類定義一系列職責。它的效果不僅作用於我們所創建的類本身,同時也作用於其它我們能夠使用的現有Java及Android類。除此之外,在創建這些平台類實例的同時,大家還可以利用繼承對其加以擴展。在繼承機制的幫助下,我們可以創建出一個繼承現有類功能、同時又擁有自己運行流程的類。在我們所創建的第一個Android項目中,主Activity類就是一個很好的例子。

現在打開Android項目中的這個類。在類聲明的開頭,大家會看到“extends Activity”。這意味著該類屬於Android Activity類中的一個子類。這裡的Activity類用於使Android系統處理向用戶呈現的屏幕內容,而各方法則用於不同變量狀態下的屏幕內容(創建、暫停與消除等)。通過向Android Activity類聲明中的定義方法添加代碼並在必要時增加額外方法的方式,我們能夠更專注於實現應用程序的獨特風格。

這是我們經常會在Android上使用的模式,用於為應用程序的常見需要擴展定義類。大家可以用自己的類適當對其加以補充。

第二步

再來看Activity類中的起始行。請記住,我們添加了“implements OnClickLisener”來處理UI中的按鈕點擊操作。這將通過引用被實施在界面當中。界面類似於一個我們利用“extends”繼承而來的類,只不過界面聲明只需簡單羅列方法概述。大家需要對每一項概述進行方法實施。因此當我們實施OnClickListener時,需要委托該類提供一個onClick方法——正如我們在之前的Android項目中所做。因此界面類似於一項協定。在繼承機制的輔助下,擴展類能夠繼承由類聲明所提供的、用於實現超類(即經過擴展的類)的方法實施。如果需要,大家可以覆蓋這些實施內容。

總結

在今天的教程中,我們簡要介紹了一些Java語法方面的基本知識。當然,還有很多其它關於Java的結構與概念需要了解。如果大家此前沒有接觸過Java,又希望保證自己能擁有足以順利應對Android開發工作的必要知識,請務必點擊此處認真閱讀甲骨文公司發布的Java指南。其中需要認真學習的主題包括數組與交換語句。在本系列的後續文章中,我們將探討一些大家最常用到的Android類。而在下一章節中,我們則開始探索Android應用項目中的資源。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved