物联网(广工)-android开发复习整理.docx_第1页
物联网(广工)-android开发复习整理.docx_第2页
物联网(广工)-android开发复习整理.docx_第3页
物联网(广工)-android开发复习整理.docx_第4页
物联网(广工)-android开发复习整理.docx_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

15级物联网4班 淡风-wisdon 2017/12/19广工物联网开发(android)复习整理导师:张刚考题:7道大题,2道写程序,5道回答问题课堂笔记课程内容a) Java基础b) 面向对象的核心概念、机制和设计模式c) Android基础d) Web开发:以Spring Family为例,介绍Web开发的过程1.文件说明源代码文件:.java可执行文件:.class,平台无关的代码.java文件在src文件夹目录下.class文件在bin文件夹目录下Java部分Java的基本语法,简单的算法编程实现面向过程的程序设计:一元二次方程的求解、排序算法的实现、手工实现链表、打印*号图案等。1.1 99乘法表:public class s99public static void main(String args)for (int i=1;i=9;i+) for (int j=1;j=i;j+) / j=i是处理格式问题System.out.print(i+*+j+=+(i*j)+t);System.out.print(n);1.2 例2 打印号:原理图:行号spacestar*131space = 4 行号*223star = 2*行号 - 1*315*407*515=2*2+1 space = 行号 - 4*623=2*1+1 star = 2 * (7-行号) +1*731=2*0+1import java.util.Scanner; / Scanner这个工具类,java利用Scanner获取键盘输入public class PrintDiamond static void printchars(int num, String s) for (int i = 1; i=num; i+) System.out.print(s);public static void main(String args) System.out.println(请输入一个奇数:);Scanner sc = new Scanner(System.in);int n = sc.nextInt(); / n为奇数int line; int midLine = n/2+1;/上半部分for (line=1; line= midLine;line+) int space = midLine - line;int star = 2*line - 1;/输出printchars(space, );printchars(star,*);/输出回车换行System.out.println();/下半部分for (line = midLine+1;line0)x1=(-b)/(2*a)+t;x2=(-b)/(2*a)-t;System.out.println(x1=+x1);System.out.println(x2=+x2); elsex1=(-b)/(2*a);x2=(-b)/(2*a);System.out.println(x1=+x1+t+i);System.out.println(x2=+x2+-+t+i);1. b2-4ac = 02. b2-4ac 03. b2-4ac 01.4 排序:/ 冒泡排序/从第一个记录开始依次对相邻的两个记录进行比较,当前面的记录大于后面的记录时,交换位置,大数放后面。public class BubbleSort public static void bubbleSort(int a) int n = a.length; int temp = 0; for(int i=0;in;i+) /控制比较的轮数 for(int j=0;j aj+1) temp = aj+1; aj+1 = aj; aj = temp; public static void main(String args) int a =49,38,65,97,76,13,27,50; bubbleSort(a); for(int j:a) System.out.print(j+ ); /选择排序public class SelectionSort public static void selectSort(int a) int n = a.length;for (int i = 0; i n; i+) int min = i; / 找出最小值的下标 for (int j = i + 1; j aj) /经过一轮比较后得出最小值的下标 min = j; / 核心:用下标来记录每一轮的最小值的位置 / 将最小值放到排序序列的开头 if (min i) / 如果最小值的位置在i位置之后,那么就进行调换 int tmp = ai; ai = amin; amin = tmp; public static void main(String args) int a=49,38,65,97,76,13,27,49,78,34,12,64,1;selectSort(a); System.out.print(排序之后:);for (int i = 0; i a.length; i+) System.out.print(ai+ );/ 插入排序算法描述:对于给定的一个数组,初始时假设第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列中为止。/* * 插入排序 * 平均O(n2),最好O(n),最坏O(n2);空间复杂度O(1);稳定;简单* */public class InsertSort public static void insertSort(int a) int tmp; for (int i = 1; i 0; j-) / j -用来需要与前面排好序的进行比较 if (aj =2)return n * f(n-1);else return -1; / -1这里负数代表异常public static void main(String args) System.out.print(请输入一个数字:);Scanner sc = new Scanner(System.in); int a = sc.nextInt();/读取控制台输入的整数 long total;total = f(a);System.out.print(结果: + total);1.6 Java理论知识点1.6.1 类uJava的容器类lArrayList:可以代替数组,可以动态增长,存放任何类型的对象lArrayList支持泛型:一般是用于编译期的类型检查例子:import java.util.ArrayList;public class ArrayListExample static ArrayList getLists() ArrayList aList = new ArrayList();for (int k = 1; k =10; k+) aList.add(k);return aList; public static void main(String args) ArrayList aList = getLists();System.out.println(数组效果: +aList);自动打包:autoboxing,基本数据类型放入容器,会被自动打包为相应的类型(包装类,Wrapper Class)For-each语法:枚举一个容器中的对象/自动解包for (int x : aList) System.out.println(x);l Java中一切皆对象,任何一个对象都是Object的后代l toString()l equals()l public static void main(String args) l String a = new String(I love GDUT.);l String b = new String(I love GDUT.);l /String.equals比较的是内容l /a=b比较的是地址l System.out.println(a.equals(b);l l hashCode()l getClass():返回该对象的“类型对象”l clone():类似于C+的拷贝构造函数,浅复制l ArrayList的clone是浅复制l CLR C+集合类:例如ArrayList,LinkedList,HashSet,了解基本的功能集合类是将多个元素组成一个单元的对象实现Collection接口,用于储存、检索和操纵数据,以及将数据从一个方法传输至另一个方法。ArrayList:实现动态增长的数组LinkedList:是通过节点直接彼此连接来实现的。每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。HashSet:是实现Set接口的一个类。1.6.2 对象对象不是神秘的东西,其实就是工具包,一个工具包包含两样东西,一种是函数,一种是属性。Java中一切皆对象,任何一个对象都是Object的后代对象创建对象创建过程受控(禁止用户随意通过new创建对象): 创建对象n Apple a = new HFSApple();n Apple b = new GGApple();n eatApple(Apple a); /写的代码只与基类打交道u StuDemo例子l 定义了Student的继承层次l 动态绑定:普通成员方法执行动态绑定l Static方法和数据成员执行静态绑定1.6.3 接口接口:用于描述服务的样子,适用于描述feature语法如下:n 是完全抽象的存在,所有方法都是abstract,不能有实现n 如果有数据成员,必须是finaln 一个类只能继承一个类,但可以实现(implements)多个接口u class A extends B implements CInt, Dintn 一个类型实现了某个接口,必须实现其中的所有方法,或定义为abstractn 接口举例u 可拍照的 Photographable void takephoto(); u 可播放音乐的:Playable void play(); void stop(); void pause(); u class SmartPhone extends MobilePhone implements Photographable, Playable, GPS, XYZSensorn 简单例子:Superman。实现了CanFly, CanJump, CanSwim三个接口u class Superman implements CanFly, CanJump, CanSwimpackage intsample.java13.iot.gdut;public class SuperMan implements CanFly, CanJump, CanSwim /检查是否有覆盖由父类继承的方法,有就编译报错Overridepublic void swim() System.out.println(I can swim.);Overridepublic void jump() System.out.println(I can jump.);Overridepublic void fly() System.out.println(I can fly.);public static void main(String args) /主函数SuperMan s = new SuperMan();s.fly();s.swim();s.jump();/向上转型CanFly cf = new SuperMan();IneedSthCanFly(new SuperMan();/此处不可以使用swim()和jump()/通过强制类型转换,可以使用swim和jump/cf.swim();(CanSwim)cf).swim();/强制类型转换是在运行时完成的/编程只针对确定、公开的接口进行public static void IneedSthCanFly(CanFly f) f.fly();n 接口的应用:适配器(Adapter)接口不仅是为了解决Java的多继承问题,还可以用于适配,类似于插座之间的转换器例子:适配器模式(Adapter)RandomNumAdapter1:继承方式RandomNumAdapter2:组合方式组合方式的适配器实现更加灵活,更接近现实,可以适配RandomNums及其所有的子类1.6.4 包u 包(package):一种目录结构,对Java源码进行功能上的分类,如:l gdut.iot15.softdev.javabasicl gdut.iot15.softdev.designpattern.factory/decorator1.6.5 构造方法1.6.6 向上转型向上转型 写的代码只与基类打交道。upcast: 一个被声明为基类型的引用变量,可以指向其子类型。n 接口的向上转型,一个对象可以向上转型为它所实现的任意一个接口。通过私有内部类实现外围公开的接口,返回对象时向上转型为公开接口,可以实现类型隐藏。u class Apple implements Eatable, Playable u eatFood(Eatable f);u Eatable f = new Apple();eatFood(f);u Play(Playable p);Play(f);/错的u Play(Playable)f);/可以,强制类型转换1.6.7 封装封装:类、访问控制关键字、包巧记:包中有类,类中有访问控制关键字定义:封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。实现:封装是一种信息隐藏技术,在java中通过关键字private实现封装。作用:封装把对象的所有组成部分组合在一起,控制了用户对类的修改和访问数据的程度。1.6.8 继承 n extends关键字n 作用u Reusing 方便重复利用u 形成一种抽象-具体的类型层次,可以针对抽象类型编程,代码可以重用于各个具体子类型n 语法u Java的继承与C+继承的区别:单继承n Class A : B, C, D, E C+n Class A extends Bu 继承的语义n 本质上是一种IS-A关系n 例:智能拍照手机是“能打电话的照相机”还是“具有拍照功能的手机”?u Class 智能拍照手机 extends 手机, 照相机n 不同类型的手机之间是feature的不同,而Java认为应该用interface去描述这些featuren 在某个属性上的不同取值,不应看作是同一个父类的不同子类,例如:猫,白猫,黑猫,黑白猫,黄白猫。仅是在毛色属性上取值不同,应该在基类上增加“毛色”属性单继承,IS-A关系,继承一个类与实现一个接口在语义上的区别 接口传达的意思是:拥有某种功能,能干嘛,比如:Serializable代表可序列化的。继承传达意思是:is-a,比如:猫 是一个 动物,猫就是动物的子类。1.6.9 多态、动态绑定多态的定义:指允许不同类的对象对同一消息做出响应。多态的作用:消除类型之间的耦合关系。实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。动态绑定仅发生在类的普通成员方法上Animal a = new Cat();a.sleep();a.age/Animal的age1.6.10 内部类Inner Class(内部类)n 定义:定义在类、接口、方法、里面的类型,可以无限制的访问外围类的成员n 内部类的作用u 类型隐藏:限制类型信息的公开u 内部类可以无限制的访问其外部类的private成员un 内部类的经典例子:迭代器(Iterator)u 操作的对象:是一个底层的存储结构,private例子:package innerclass.java13.iot.gdut;public class Sequence private int data;private int cur;public Sequence(int n) data = new intn;for (int k = 1; k = n; k+) datak-1 = k;/返回一个接口,让外界按指定的顺序读取datapublic Iterator iterator() cur = 0;return new NormalIterator(); / 返回顺序访问的接口/顺序访问private class NormalIterator implements Iterator Overridepublic int current() return datacur;Overridepublic int next() if (cur =0) cur-;if (isFinish() return -1;return datacur;Overridepublic boolean isFinish() return (cur = -1);n 内部类的例子:Factory(对象工厂)u 定义:对对象创建过程的封装,并随着类型一同发布(巧记:工厂有很多的加工过程)u 对象创建的控制:private构造方法,不能在类外面new对象u 单例(Singleton)public class Student private static Student s = new Student();private Student() .public static Student getOnlyOneInstance() return s;Student ss = Student. getOnlyOneInstance();1.6.11 回调回调:Callback回调函数就是一个通过函数指针调用的函数。如果你把函数指针(地址)作为参数传递给另一个函数,当这个指针需要调用其指向的函数时,我们就说这是回调函数。1.6.12 泛型泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。1.7 其他知识点:1.7.1 基本的Java程序n Java源码的组织方式u 源代码文件:.javau 可执行文件:.class,平台无关的代码u 包(package):一种目录结构,对Java源码进行功能上的分类l gdut.iot15.softdev.javabasicl gdut.iot15.softdev.designpattern.factory/decoratorJava应用程序的类别n Application:大程序n Applet:小程序,嵌在网页中运行的程序 ( Applet- n. Java程序;)1.7.2 引用:引用:相当于C+的指针,用于存放地址 。Java取消了指向基本数据类型的指针,如何传递基本数据类型的变量的地址?包装类(Wrapper Class)自动打包:autoboxing,基本数据类型放入容器,会被自动打包为相应的类型(包装类,Wrapper Class)/C+void g() Apple a;/创建了一个对象,g()调用完成之后自动回收Apple * b = new Apple();/创建了一个对象,g()调用完成之后对象的空间不回收,此时需要用delete b手动回收/Javavoid g() Apple a; /没有创建对象,相当于C+的Apple * b;Apple b = new Apple();/创建了对象,g()调用完了之后由系统自动回收1.7.3 static代码块lstatic方法:不需要创建对象就可以通过类名访问static代码块:静态代码块,类被初始化时调用一次static对象可以在它的任何对象创建之前访问,无需引用任何对象1.7.4 测试框架测试框架:支持测试驱动(Test Driven)开发的工具n 在开发之前先写好测试用例(Test Case),要求写出来的程序pass所有这些casen 可以确保修改、更新系统的质量n 测试的单位:方法、过程、变量某时刻的值、模块的入口和出口等n Java:JUnitn C+:CPPUnitAndroid部分1.8 程序结构Android的基本程序结构: 资源 本体代码 注册文件Activity:(1)应用程序的入口(2)界面显示,接收事件,控制显示跳转。BroadcastReceiver:(1)用于注册和接收系统广播的事件(2)可接收自定义的广播事件。ContentProvider:(1)提供数据库查询接口(2)可对外公开数据查询服务。Service:(1)是一个独立的进程,可一直在后台运行。(2)可以与其他组件通过远程连接绑定进行交互。(3)可对外提供服务交互接口。(4)生命周期不依赖于其他组件的存在与否。 .gradle:构建工具系统的jar和wrapper等,jar告诉了AS如何与系统安装的gradle构建联系 .idea:AS生成的工程配置文件 app:AS创建工程中的一个Module build:构建目录,相当于Eclipse中默认Java工程的bin目录,鼠标放在上面右键Show in Exploer即可打开文件夹,编译生成的apk也在这个目录的outs子目录,不过在AS的工程里是默认不显示out目录的,就算有编译结果也不显示,右键打开通过文件夹直接可以看 libs:依赖包,包含jar包和jni等包 src:源码 build.gradle:Module的Gradle构建脚本drawable :存放的是图片资源1.9 界面A 界面编程模型a) 界面元素(控件和布局)界面设计原则:大框架用XML配置,部分使用动态界面生成代码b) 资源1.字符串资源 2.Layout资源 3.图像资源c) XML与Java Code在定义界面元素中的不同作用XML是静态的 Java Code是动态的d) ListView与Adapter静态的ListView,只能显示简单的、静态的数据复杂的数据通过Adapter为ListView提供数据,通过Adapter可以对ListView的显示数据格式进行定制,有4个具体的子类ArrayAdapter:最简单,包装数组或List类型的简单数据与Item的样式(Layout XML文件)放入ArrayAdapter与ListView绑定SimpleAdapter:很复杂,可以包装复杂数据,可以通过XML模板定制Item的具体格式SimpleCursorAdapterBaseAdapter:具有最高的可扩展性1.9.1 界面构建(XML, Java)l 界面开发n 使用XML定义界面u 尽可能地使用Layout对界面元素的位置进行限定u 在这种方式下,界面的定义是静态的n 使用Java代码定义界面u 纯代码操作u 它可以控制的内容与XML方式相同,但某些属性的设置不是很直观n 混合定义界面u 框架性的界面元素使用XMLu 少部分元素用Java代码动态控制u 通过findViewByID获取XML中定义的界面元素的引用LinearLayout main = (LinearLayout) findViewById(R.id.root);/ 程序创建ImageView组件final ImageView image = new ImageView(this);/ 将ImageView组件添加到LinearLayout布局容器中main.addView(image);例子:n 幻方例子(动态生成界面)(TestPP/MagicSquareActivity.java)u 通过XML定义GridLayout,再动态创建Button加入其中u 通过一个Helper类实现数学部分与界面部分的分离u 随机颜色u 动态计算Button的长宽n 图片显示u ImageView例子:图片浏览器,使用ImageView直接加载图片1.9.2 界面元素(基本元素、Layout)1.9.3 事件u 事件响应l 可以在XML中直接绑定某控件的事件处理程序l 也可以在Java代码中指定1.9.4 ListView与Adapter之间的关系静态的ListView,只能显示简单的、静态的数据复杂的数据通过Adapter为ListView提供数据,通过Adapter可以对ListView的显示数据格式进行定制,有4个具体的子类.通过不同的Adapter(例如ArrayAdapter,SimpleAdapter等)可以在ListView上得到不同的具体实现。最简单的ListView的例子:显示DATA数组中的所有姓名,这些姓名是字符串类型的。ListViewn 列表控件u 基础l 基类是ListViewl 数据是由Adapter提供l Item的显示样式:由XML文件规定每个item显示的样式u 静态的ListViewl 创建一个ListView,把entries属性与数组绑定u 动态的ListViewl 动态封装在Adapter中,动态传给ListViewl ArrayAdpater 显示简单数据l SimpleAdapter,可以显示复杂数据l SimpleCursorAdapterl BaseAdapter,提供了最大的灵活性,可定制其显示行为(具有最高的可扩展性)巧记:3 1 51.9.5 如何通过Adapter为ListView加载数据通过不同的Adapter(例如ArrayAdapter,SimpleAdapter等)可以在ListView上得到不同的具体实现.(1)ListVeiw用来展示列表的View (2)Adapter用来把数据映射到ListView上的中介,常用的有ArrayAdapter,SimpleAdapter,CursorAdapter和SimpleCursorAdapter.BaseAdapter(3)Data数据List集合或者一个Cursor实例对象。但是如果查询数据库,将会很耗时,因此将使用loaderManager进行统一的管理,异步完成Cursor到数据集合的转化,Android 实现json网络数据通过BaseAdapter加载到ListView中1.10 其他知识点1.10.1 开发环境n 第一个程序Helloworldu Activity:界面类u Layout:通过xml配置文件定义界面u ConstraintLayout:要求控件建立Constraintn R类:自动生成,为每个资源设置一个ID,Java代码中通过该ID获取该资源的引用n 配置文件u /build.gradleu /app/build.gradle1.10.2 简述Android中常用几种布局在Android中,共有五种布局方式分别是:1.线性布局: LinerLayout2.表格布局: TableLayout3.相对布局: RelativeLayout4.绝对布局: AbsoluteLayout5.帧布局: FrameLayout巧记:线组成表格,表格中有绝对和相对的布局,且存在点(帧布局)1.11 数据库(原理)n 数据库分类u 关系数据库l 远程数据库:MySQL、SQLServer等,一般不在APP中直接连接远程数据库,一般通过一个提供REST API的服务端程序获取远程数据所谓REST:资源用URI来表示,动作用HTTP动词来表示l 本地数据库:SQLite,Android自带的小型关系数据库n 文件数据库:整个数据库是一个文件n 支持直接执行SQLu 非关系数据库l 与关系型数据库对应l 基于文档的数据库:MongoDBl 基于Key-Value的数据库:SnappyDB、Couchbase Mobilel 基于对象的数据库:以对象为单位进行存取,ObjectBoxn 不能执行SQLn 速度快数据库编程e) 直接操作SQLiteu SQLite:Android自带的小型关系数据库f) 通过ORM层操作数据库 1u ORM对象关系映射:Object Relational Mappingu ORM是一个自动化的机构,接收了对象的持久化请求,底层生成SQL操控关系数据库,高层代码只需要与对象打交道g) SharedPreferences存储 3u 作用:用于保存少量简单数据,如配置信息,用户信息u 格式:key-valueu 操作l 查询(isContainKey())l 读出l 写入h) ContentProvider储存定义:ContentProvider 内容提供者,类似于Windows的ODBC数据源u 作用:用于APP之间的数据交换u 实现l 编写ContentProvider的子类,覆盖4个方法:query、insert、update、delete(查、增、改、删)l 外界APP通过在ContentResolver中指明Uri及对应的方法去调用l 提供了一个RESTFul的接口(用URI表示资源,用HTTP动词表示操作)l 在数据库和上层程序之间增加一个转换层,把关系数据库操作转化为对象的存取操作l GreenDAO、LiteValu 如何感知ContentProvider的内容发生了变化? - ContentObserver数据相关操作n 操作系统文件读写,可以使用java.io,读写一些没有结构的文件n 少量数据的读写(key-value类型的数据)u Android的SharedPreferences,用于读写key-value类型的数据n XML数据文件的读取u 在PC桌面应用程序中,一般使用DOM(Document Object Model,文档对象模型)解析XMLu Android不建议使用DOM,使用SAX、Pull请介绍下 Android 的数据存储方式。5种方式存储数据:1)文件存储数据;2)SQLite存储数据;3)使用SharedPreferences存储数据;4)使用ContentProvider存储数据;5)网络存储数据;1.SharedPreferences2.SQLite3.ContentProvider4.ORM GreenDao (含有ObjectBox)5.ObjectBox1.12 线程与Service(原理)1. Service与Activity的通信 Binder对象2. Service:与Activity的数据交换(通信)a) 通过BroadCast方式BroadCastReceiver作用:接收其它应用程序发出的BroadCastIntent,相当于一个系统级监听器例子:发送广播的例子,接收者通过action来确定要接收的BroadCastIntentb) 通过Binder方式通过iBinder对象,作者称它是Service组件的内部钩子(hook)n 通过Service的onBind方法返回一个IBinder对象给Activity,Activity通过IBinder与Service进行数据交换n Binder机制所实现的是一种跨应用程序数据交换的模式,一般称为Proxy-Stub模式,Binder是Service对象在客户端的代理u Service: 四大组件之一l 特性n 后台运行,没有UIn 服务,守护进程(Daemon)n Android系统提供了大量的Servicel 定义自己的Servicen 继承Service基类n 在Manifest中注册Servicen 写一些需要的回调方法,在某些时刻被自动调用u onCreateu onStartCommandu onBind

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论