廣東工業(yè)大學安卓期末復習.doc
《廣東工業(yè)大學安卓期末復習.doc》由會員分享,可在線閱讀,更多相關《廣東工業(yè)大學安卓期末復習.doc(9頁珍藏版)》請在裝配圖網(wǎng)上搜索。
復習 Java部分 Java的基本語法,簡單的算法編程實現(xiàn) 面向過程的程序設計:一元二次方程的求解、排序算法的實現(xiàn)、手工實現(xiàn)鏈表、打印*號圖案等。 99乘法表: public class s99{ public static void main(String[] args){ for (int i=1;i<=9;i++) { for (int j=1;j<=i;j++){ System.out.print(i+"*"+j+"="+(i*j)+"\t"); } System.out.print("\n"); } } } 打印*號: - staticvoid printchars(intnum, String s) { for (inti = 1; i<=num; i++) System.out.print(s);} publicstaticvoid main(String[] args) { System.out.println("請輸入一個奇數(shù):"); Scanner sc = new Scanner(System.in); intn = sc.nextInt(); intline; //上半部分 for (line=1; line<=n/2+1;line++) {intspace = n/2+1 - line; intstar = 2*line - 1;//輸出 printchars(space," "); printchars(star,"*");//輸出回車換行 System.out.println("");} //下半部分 for (line = n/2+2;line<=n;line++) { intspace = line - (n/2+1); intstar = 2*(n-line+1)-1; //輸出 printchars(space," "); printchars(star,"*"); //輸出回車換行 System.out.println("");} sc.close();}} 二元一次: import java.util.Scanner; public class equation { public static void main(String[] args){ System.out.println("輸入一元二次系數(shù)a,b,c:"); Scanner in=new Scanner(System.in); int a=in.nextInt(); int b=in.nextInt(); int c=in.nextInt(); double x1,x2; int deta=b*b-4*a*c; if(deta==0){ x1=x2=(-b)/(2*a); System.out.println("x1="+x1); System.out.println("x2="+x2); }else{ double t=Math.sqrt(Math.abs(deta))/(2*a); if(deta>0){ x1=(-b)/(2*a)+t; x2=(-b)/(2*a)-t; System.out.println("x1="+x1); System.out.println("x2="+x2); }else{ x1=(-b)/(2*a); x2=(-b)/(2*a); System.out.println("x1="+x1+"+"+t+"*i"); System.out.println("x2="+x2+"-"+t+"*i");}}}} 排序: package com.sort; public class 直接插入排序 { public static void main(String[] args) { int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1}; System.out.println("排序之前:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" ");} //直接插入排序 for (int i = 1; i < a.length; i++) { //待插入元素 int temp = a[i]; int j; for (j = i-1; j>=0; j--) { //將大于temp的往后移動一位 if(a[j]>temp){ a[j+1] = a[j]; }else{ break;}} a[j+1] = temp; } System.out.println(); System.out.println("排序之后:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" ");}}} A. Java的語言機制(單繼承、引用、對象創(chuàng)建、集合類、包裝類、內部類、接口與向上轉型、static代碼塊、異常處理等) a) 單繼承,IS-A關系,繼承一個類與實現(xiàn)一個接口在語義上的區(qū)別 接口傳達的意思是:擁有某種功能,能干嘛,比如:Serializable代表可序列化的。繼承傳達的是意思是:is-a,比如:貓 是一個 動物,貓就是動物的子類。 b) 引用: 相當于C++的指針,用于存放地址 Java中: Apple a; //對象還沒有創(chuàng)建 a = new Apple(); //對象創(chuàng)建 C++中:Apple a; //已創(chuàng)建對象 Apple * a = new Apple(); Java取消了指向基本數(shù)據(jù)類型的指針,如何傳遞基本數(shù)據(jù)類型的變量的地址?包裝類(Wrapper Class) c) 對象創(chuàng)建 對象創(chuàng)建過程受控(禁止用戶隨意通過new創(chuàng)建對象):定義private類型的構造方法,公開一個static的方法,例如getInstance(),返回該類的對象 封裝對象創(chuàng)建的代碼,特別是針對復雜的對象,每個類知道如何創(chuàng)建自己的對象 例子:GameDemo注意:Singleton的實現(xiàn)(單例,即一個類只能有一個對象) 集合類:例如ArrayList,LinkedList,HashSet,了解基本的功能 集合類是將多個元素組成一個單元的對象實現(xiàn)Collection接口,用于儲存、檢索和操縱數(shù)據(jù),以及將數(shù)據(jù)從一個方法傳輸至另一個方法 ArrayList:實現(xiàn)動態(tài)增長的數(shù)組 LinkedList:是通過節(jié)點直接彼此連接來實現(xiàn)的。每一個節(jié)點都包含前一個節(jié)點的引用,后一個節(jié)點的引用和節(jié)點存儲的值。 HashSet:是實現(xiàn)Set接口的一個類,具有以下的特點: 不能保證元素的排列順序,順序有可能發(fā)生變化。 另外HashSet不是同步的,如果多個線程同時訪問一個Set,只要有一個線程修改Set中的值,就必須進行同步處理,通常通過同步封裝這個Set的對象來完成同步,如果不存在這樣的對象,可以使用Collections.synchronizedSet()方法完成。 Set s = Collections.synchronizedSet(new HashSet(...)); 元素值可以是null。 d) 內部類:語法,在類、接口、方法、{…}里面定義內部類,可以無限制的訪問外圍類的成員 內部類(Inner Class) 內部類的定義:定義在類、方法體、接口里面的類型 內部類的作用:可以隱藏類型 內部類可以不受限制的訪問其外圍類的成員,包括外圍類的private成員 內部類的經(jīng)典例子:迭代器(Iterator) e) 接口與向上轉型,通過私有內部類實現(xiàn)外圍公開的接口,返回對象時向上轉型為公開接口,可以實現(xiàn)類型隱藏 接口(Interface) 是一個完全抽象的存在,僅能有方法的樣子,不能有實現(xiàn) 如果有數(shù)據(jù)成員,必須是final 一個類可以實現(xiàn)多個接口,使用implements關鍵字 實現(xiàn)一個接口,必須實現(xiàn)其中的所有方法,或定義為abstract 簡單例子:SuperMan,實現(xiàn)了CanFly, CanJump, CanSwim三個接口 接口的語義:實現(xiàn)某個接口,使類具備某種能力,如“可拍照”、“CanFly” 接口與繼承都支持向上轉型,一個對象可以用它實現(xiàn)的其中一個接口類型的引用去指向,但僅限于使用引用的接口所限制的方法 接口不僅是為了解決Java的多繼承問題,還可以用于適配,類似于插座之間的轉換器 例子:適配器模式(Adapter) RandomNumAdapter1:繼承方式 RandomNumAdapter2:組合方式 組合方式的適配器實現(xiàn)更加靈活,更接近現(xiàn)實,可以適配RandomNums及其所有的子類 f) static代碼塊:靜態(tài)代碼塊,類被初始化時調用一次 static對象可以在它的任何對象創(chuàng)建之前訪問,無需引用任何對象 g) 異常處理:兩種異常(Checked/Runtime Exception),異常的語法,異常的繼承層次,異常的匹配(按catch塊的順序) Java異常處理 優(yōu)點:正常代碼和異常代碼分離,通過異常的繼承層次,可以實現(xiàn)同類異常的統(tǒng)一處理 兩種模型:終止模型(處理完異常不回去)、恢復模型,Java屬于前者 兩大類異常:CheckedException(編譯器檢查),RuntimeException Try {會拋出異常的代碼} catch(異常1) {….} catch{異常2} Finally {清理、關門代碼} B. 面向對象程序設計的相關概念 a) 封裝:類、訪問控制關鍵字、包 封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的接口。封裝是一種信息隱藏技術,在java中通過關鍵字private實現(xiàn)封裝。封裝把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數(shù)據(jù),封裝實際上使用方法將類的數(shù)據(jù)隱藏起來,控制用戶對類的修改和訪問數(shù)據(jù)的程度。 b) 繼承:構造方法的運行次序、子類方法覆蓋父類方法 c) 多態(tài)、動態(tài)綁定 Animal a = new Cat(); a.sleep(); a.age //Animal的age 動態(tài)綁定僅發(fā)生在類的普通成員方法上 多態(tài)的定義:指允許不同類的對象對同一消息做出響應。 實現(xiàn)多態(tài)的技術稱為:動態(tài)綁定(dynamic binding),是指在執(zhí)行期間判斷所引用對象的實際類型,根據(jù)其實際的類型調用其相應的方法。 多態(tài)的作用:消除類型之間的耦合關系。 d) 類、接口 e) 泛型 泛型的好處是在編譯的時候檢查類型安全,并且所有的強制轉換都是自動和隱式的,以提高代碼的重用率。泛型的本質是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù) f) 反射(Reflection) 運行時探測未知對象的內部信息,通過“波的反射”獲得其內部的細節(jié),并且可以調用對象內部的所有方法 Zoo2、Zoo3 g) RTTI:運行時類型信息 h) 回調:Callback 回調函數(shù)就是一個通過函數(shù)指針調用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當這個指針被用來調用其所指向的函數(shù)時,我們就說這是回調函數(shù)。 C. 本學期學過的設計模式(Java與Android部分) a) 代理/動態(tài)代理 n Proxy(代理) 是一個中介,通過轉發(fā)服務請求到真正的服務對象,如Web代理服務器:接收用戶請求,轉發(fā)請求,獲取數(shù)據(jù),把數(shù)據(jù)回傳給用戶;房地產(chǎn)中介 u 代理可以過濾一些不必要的請求,或是隱藏服務對象的真正身份 u 代理與被代理對象至少要有相同的接口 b) 適配器 將一個類的接口適配成用戶所期待的。一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起,做法是將類自己的接口包裹在一個已存在的類中。 c) 依賴注入(DI) 依賴注入是Spring的思想,在使用Spring進行開發(fā)時,可以將對象交給spring進行管理,在初始化時spring創(chuàng)建一批對象,當你需要用的時候只要從spring的容器中獲取對象,而不用自己去new,當然在對象創(chuàng)建的時候可以注入另一個對象。比如A,B兩個對象都由spring管理,A中持有對B的引用,那么spring在生成A對象的時候就已經(jīng)吧B對象的一個實例給到A了,當你在A中用到B的時候直接使用就可以了。 d) 對象工廠 主要是為創(chuàng)建對象提供過渡接口,以便將創(chuàng)建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。如果你有很多地方都需要A的實例,那編寫一個工廠專門生成A的實例(如果生成邏輯改變了,直接修改工廠)。那么這些需要A的實例的地方只需要從工廠中getObject()就可以了,完全不用管我的實例是咋來的 e) 迭代器 提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內部表示。 f) 單例 確保一個類只有一個實例,自行提供這個實例并向整個系統(tǒng)提供這個實例。 特點: 1,一個類只能有一個實例; 2,自己創(chuàng)建這個實例; 3,整個系統(tǒng)都要使用這個實例。 優(yōu)點: 單例模式,能避免實例重復創(chuàng)建; 單例模式,應用于避免存在多個實例引起程序邏輯錯誤的場合; 單例模式,較節(jié)約內存。 1. Android部分 A. Android的基本程序結構: 資源 本體代碼 注冊文件 Activity:(1)應用程序的入口(2)界面顯示,接收事件,控制顯示跳轉。 BroadcastReceiver:(1)用于注冊和接收系統(tǒng)廣播的事件(2)可接收自定義的廣播事件。 ContentProvider:(1)提供數(shù)據(jù)庫查詢接口(2)可對外公開數(shù)據(jù)查詢服務。 Service:(1)是一個獨立的進程,可一直在后臺運行。(2)可以與其他組件通過遠程連接綁定進行交互。(3)可對外提供服務交互接口。(4)生命周期不依賴于其他組件的存在與否。 B. 界面編程模型 a) 界面元素(控件和布局) 界面設計原則:大框架用XML配置,部分使用動態(tài)界面生成代碼 動態(tài)創(chuàng)建控件 綁定事件響應的代碼(set Listener方法,類似Java) 方法 創(chuàng)建一個新的Activity:MagicSquareActivity 通過LinearLayout(vertical)內置一個GridLayout 動態(tài)創(chuàng)建Button數(shù)組 給每一個Button賦值、上顏色,通過GridLayout.LayoutParams設置放入的具體參數(shù)(位置、Gravity、大小) b) 事件:添加監(jiān)聽器,繼承 c) 資源 1.字符串資源2.Layout資源3.圖像資源 d) XML與Java Code在定義界面元素中的不同作用 XML是靜態(tài)的 Java Code是動態(tài)的 e) 9Patch圖片格式 增加了可以伸縮的局部區(qū)域的定義 使用sdk\tools\draw9patch.bat工具 Show patches:指定可復制的區(qū)域 Show content:控制可顯示的區(qū)域 f) ListView與Adapter 靜態(tài)的ListView,只能顯示簡單的、靜態(tài)的數(shù)據(jù) 復雜的數(shù)據(jù)通過Adapter為ListView提供數(shù)據(jù),通過Adapter可以對ListView的顯示數(shù)據(jù)格式進行定制,有4個具體的子類 ArrayAdapter:最簡單,包裝數(shù)組或List類型的簡單數(shù)據(jù) 數(shù)據(jù)與Item的樣式(Layout XML文件)放入ArrayAdapter 與ListView綁定 SimpleAdapter:很復雜,可以包裝復雜數(shù)據(jù),可以通過XML模板定制Item的具體格式 可以顯示復雜數(shù)據(jù) 數(shù)據(jù)的關系:使用Map,每個字段自定一個唯一的名字,SimpleAdapter會根據(jù)該名字查找對應的值 顯示的樣式:字段名字與顯示的控件ID綁定,在初始化SimpleAdapter的時候給出 增加itemClick的事件響應 SimpleCursorAdapter BaseAdapter:具有最高的可擴展性 C. Handler與多線程 為什么需要多線程?同步、并行、UI的響應效率 Android的多線程 UI組件并非線程安全,只允許UI的線程去改變其狀態(tài) 定時更新主界面上的控件狀態(tài) 使用計時器:創(chuàng)建一個新的線程,每隔一定時間執(zhí)行一次其中的run方法 在主線程中創(chuàng)建一個Handler,子線程調用Handler發(fā)送信息,主線程的Handler通過handlerMessage方法處理接收到的消息 主線程默認有一個Looper,其它線程需要手工創(chuàng)建 Looper從消息隊列中取出消息,發(fā)送給注冊了的Handler處理 異步任務 比Handler輕量化 D. Service:與Activity的數(shù)據(jù)交換 a) BroadCast方式 BroadCastReceiver Android的四大組件 作用:接收其它應用程序發(fā)出的BroadCastIntent 相當于一個系統(tǒng)級監(jiān)聽器 發(fā)送廣播的例子,接收者通過action來確定要接收的BroadCastIntent 有序廣播 Receiver有優(yōu)先級,系統(tǒng)先回調優(yōu)先級高的receiver的onReceive方法 接收者可以往其中加入額外的數(shù)據(jù),傳給下一個接收者處理,也可以取消廣播 基于Service的播放器 分前臺和后臺 Activity負責顯示音樂播放的狀態(tài),有play和stop按鈕 Service負責播放音樂,并通知前臺顯示 兩者之間有數(shù)據(jù)交互 思路1:兩者通過BroadCast通信 b) Binder方式 通過iBinder對象,作者稱它是Service組件的內部鉤子(hook) 關于鉤子:源于Windows系統(tǒng)編程,是一種事件(比如:消息、Mouse事件、鍵盤)到達應用程序前中途截獲事件的機制,鉤子可以修改、丟棄事件,是Windows的一個后門。 說明 MyBinder繼承Binder,Binder實現(xiàn)IBinder 公開MyBinder給調用者 通過onServiceConnected獲取MyBinder對象的引用 此處用Hook似乎并不恰當,是Service對象在調用者端的表示,應該表述為Proxy(代理) 在更一般的情況下,客戶端通過Proxy發(fā)送請求,Service端通過一個特定的對象去接收,該對象稱為Stub(存根類),Proxy相當于遙控器,而Stub相當于電視機里遙控信號接收模塊。這正是Java的RMI(Remote Method Invoke,遠程方法調用)的主要原理。 MyBinder此處同時扮演了Stub與Proxy的角色 E. BroadCastReceiver a) 全局的BroadCast b) 優(yōu)先次序的BroadCast - BroadCastReceiver n Android的四大組件 n 作用:接收其它應用程序發(fā)出的BroadCastIntent n 相當于一個系統(tǒng)級監(jiān)聽器 n 發(fā)送廣播的例子,接收者通過action來確定要接收的BroadCastIntent n 有序廣播 u Receiver有優(yōu)先級,系統(tǒng)先回調優(yōu)先級高的receiver的onReceive方法 u 接收者可以往其中加入額外的數(shù)據(jù),傳給下一個接收者處理,也可以取消廣播 n 基于Service的播放器 u 分前臺和后臺 u Activity負責顯示音樂播放的狀態(tài),有play和stop按鈕 u Service負責播放音樂,并通知前臺顯示 u 兩者之間有數(shù)據(jù)交互 u 思路1:兩者通過BroadCast通信 F. 數(shù)據(jù)庫編程 a) 直接操作SQLite u SQLite:Android自帶驅動的小型高效文件數(shù)據(jù)庫,適用于移動設備的本地數(shù)據(jù)存儲 u 用SQLiteDatabase直接操作數(shù)據(jù)庫,execSQL支持setParameter,所有動作都由原始的SQL語句執(zhí)行 u 可以用SQLiteStudio 3.0.7打開 b) 通過ORM層操作數(shù)據(jù)庫 u ORM u 對象關系映射:Object Relational Mapping u 理念:持久化保存對象,面向對象程序設計的核心是一切皆對象,軟件系統(tǒng)表現(xiàn)為對象之間的相互作用 u 在業(yè)務邏輯和用戶界面層中,程序是面向對象的,當對象狀態(tài)發(fā)生變化時,當需要保存這種狀態(tài)變化時,需要進行逐字段的保存,例如拼接SQL語句,或是給出字段名的update u ORM是一個自動化的機構,接收了對象的持久化請求,底層生成SQL,交給關系數(shù)據(jù)庫執(zhí)行,高層代碼只需要與對象打交道 u 著名的ORM實現(xiàn) u Java、Web、Servlet:Hibernate u Dot Net平臺:NHibernate u Android:輕量級的ORM,OrmLite u 通過Annotations的方式建立對象與Table的關聯(lián) u 例子:StuDB,通過OrmLite持久化Student對象 u Student的實體類:只有數(shù)據(jù)成員,要求按實體Bean的語法(數(shù)據(jù)成員private小寫,提供setter/getter) u OrmHelper:負責封裝Orm的API,提供盡能簡單的操作(add, list, edit, del) u OrmHelper中注冊Dao對象,用到哪個就查哪個,如果沒注冊,就馬上注冊 u StudentDao:Dao是Data Access Object的簡寫,是對Student對象持久化的操作的具體實現(xiàn)類 u OrmHelper與Dao都應該是Singleton u 安裝:下載jar文件,放到libs目錄,增加文件依賴 u OrmLiteActivity c) SharedPreferences u SharedPreferences u 用于保存少量簡單數(shù)據(jù),如配置信息,用戶信息 u 格式:key-value u 操作 u 查詢(isContainKey()) u 讀出 u 寫入 u 保存在/data/data/包名/shared_prefs.xml里面 d) ContentProvider u ContentProvider u 作用及背景 u APP之間的數(shù)據(jù)交換,一個APP通過ContentProvider可以暴露一些數(shù)據(jù),供其它APP讀/寫 u Android也允許跨APP訪問SharePreferences,不建議這樣做 u 類似一個網(wǎng)站或者是WebService u 實現(xiàn) u 每個ContentProvider與特定的Uri(統(tǒng)一資源標識符),在Manifest文件中指定 u 編寫ContentProvider的子類,覆蓋4個方法:query、insert、update、delete(查、增、改、刪) u 外界APP通過在ContentResolver中指明Uri及對應的方法去調用 u ContentResolver中的Uri是一個參數(shù) u Uri本身可以帶參數(shù),UriMatcher工具幫我們處理Uri帶的參數(shù) content://gdut.iot.FirstProvider/female-students u 接受什么參數(shù),是各個方法自行定義的 u Uri是ContentProvider的4個方法的參數(shù),如何把Uri中后面跟的參數(shù)取出來? u 基于ContentProvider的生詞本 u 訪問系統(tǒng)自帶的ContentProvider(自行閱讀) u ContentObserver u 觀察者模式 u 監(jiān)視ContentProvider的數(shù)據(jù)變化 u 直接操作XML:PULL方式與DOM方式操作XML的區(qū)別 u 直接操作XML文件 u Java使用DOM(Document Object Model)的方式操作XML,DOM需要先加載整個XML文件到內存并生成結點的樹狀結構,可以通過XPath表達式進行高效的搜索 u 適合Android的方式是PULL(默認的方式) u 通過XmlResourceParser讀寫 u 逐標記的讀,需要寫一堆的if-else語句判斷標記的名字,然后作出不同的動作 e) 操作NoSQL:SnappyDB u NoSQL u Not Only SQL,指非關系型數(shù)據(jù)庫 u 數(shù)據(jù)不是以二維表的形式存放的 u 以key-value的方式 u 以文檔集的方式 u 以其它復雜的方式(圖) G. 網(wǎng)絡編程 a) 直接操作Socket:服務器端實現(xiàn)(多線程,在著名端口上監(jiān)聽,每個客戶端通過不同的線程提供服務) b) 操作HTTP:下載URL指向的資源、網(wǎng)絡爬蟲原理、維持Session i. GET、POST請求 ii. 多線程下載、斷點續(xù)傳的例子 iii. JSON數(shù)據(jù)格式:語法,JSON格式與Java、JavaScript對象之間的轉換 iv. 電子拍賣系統(tǒng)的客戶端實現(xiàn)(Server端、Struts、Spring、Hibernate不需要) 網(wǎng)絡爬蟲的基本原理: 1.首先選取一部分精心挑選的種子URL; 2.將這些URL放入待抓取URL隊列; 3.從待抓取URL隊列中取出待抓取在URL,解析DNS,并且得到主機的ip,并將URL對應的網(wǎng)頁下載下來,存儲進已下載網(wǎng)頁庫中。此外,將這些 URL放進已抓取URL隊列。 4.分析已抓取URL隊列中的URL,分析其中的其他URL,并且將URL放入待抓取URL隊列,從而進入下一個循環(huán)。- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 廣東工業(yè)大學 期末 復習
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
相關資源
更多
正為您匹配相似的精品文檔
相關搜索
鏈接地址:http://zhongcaozhi.com.cn/p-8989420.html