Android移动医疗应用开发 课件全套 第1-12章 Android开发环境 - 心电监测与显示实验_第1页
Android移动医疗应用开发 课件全套 第1-12章 Android开发环境 - 心电监测与显示实验_第2页
Android移动医疗应用开发 课件全套 第1-12章 Android开发环境 - 心电监测与显示实验_第3页
Android移动医疗应用开发 课件全套 第1-12章 Android开发环境 - 心电监测与显示实验_第4页
Android移动医疗应用开发 课件全套 第1-12章 Android开发环境 - 心电监测与显示实验_第5页
已阅读5页,还剩227页未读 继续免费阅读

下载本文档

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

文档简介

安卓移动医疗应用开发课程介绍1.课程目标人体生理参数监测系统安卓手机APP蓝牙传输五参:温度、血压、血氧、呼吸和心电课程介绍2.课程内容开发环境搭建java语言基础(数组、方法、枚举等)面向对象程序设计(封装、继承、多态等)Android程序设计(四大组件:活动、广播接收器、内容提供器、服务)打包解包小工具设计实验蓝牙通信小工具设计实验人体生理参数监测系统软件平台布局实验体温/血压/血氧/呼吸/心电监测与显示实验数据演示课程介绍3.配套资料百度网盘:/s/1YpfFOj8KhUvzlGZjdHTx5A提取码:8wqw特别注意:请严格按照软件安装步骤安装软件

很多初学者在搭建Android开发环境时,由于操作系统差异、AndroidStudio和JDK版本差异及网络等原因,走了很多弯路,从而放弃了Android的学习。为避免以上情况的发生,建议严格按照软件安装步骤安装软件。安卓开发介绍01Contents.1安卓发展史2安卓系统架构3安卓开发环境介绍4搭建安卓开发环境5创建HelloWorld工程7日志工具Log的使用6安卓HelloWorld工程详解1.安卓发展史1.1安卓系统安卓(Android)是一种基于Linux内核的开放源代码的操作系统。主要用于移动设备,如智能手机和平板电脑。操作系统:管理计算机硬件与软件资源的计算机程序。闭源开源1.

安卓发展史抄袭iPhone从Linux内核主线中除名Java侵权2011.2Android3.0平板专用(失败)2011.10Android4.0手机、平板不差异化区分2014Android5.0版本改动最大,推出专用领域系统2015Android6.0增加运行时权限2021Android12.02003.10AndyRubin等人创办Android公司2005.8公司被谷歌收购2008Android1.0发布安卓第1个版本免费获取安卓操作系统源码1.2安卓发展史2.安卓系统架构应用层应用框架层系统运行库层Linux内核层系统库(提供特性支持的C/C++库)安卓运行时库(核心库+虚拟机)分层的架构API(应用程序接口)可移植性实现平台无关性一次编写,到处运行java语言开发,安卓开发中约占99%使能java语言主要提供与硬件相关的驱动3.

安卓开发环境介绍安卓软件开发工具包主要提供Android相关API使用java语言开发谷歌推出的官方集成开发工具,用于开发和调试安卓程序java语言的软件开发工具包整个java开发的核心包含了Java的运行环境(JVM+Java类库)和开发工具(编译调试等)AndroidStudioJDK:JavaDevelopmentKitAndroidSDK:AndroidSoftwareDevelopmentKit4.

搭建安卓开发环境4.1计算机的配置要求操作系统:Win7及以上版本CPU:主频不低于2.0GHz内存:4GB或更高,推荐8G硬盘:80G或更大4.2搭建开发环境JDK安装JDK1.8“jdk-8u241-windows-x64.exe”配置环境变量:新增JAVA_HOME变量;Path变量下添加路径AndroidSDK将下载后的SDK压缩包解压到适当的位置即可如果之前有安装过,需要删除对应位置的文件AndroidStudio安装“android-studio-ide-173.4720617-windows.exe”5.

创建HelloWorld工程新建安卓工程设定工程名、包名和保存路径选择目标安卓设备:PhoneandTablet添加Activity和Layout(逻辑和视图分开存放)完成工程创建将compileSdkVersion后面的29更改为28将targetSdkVersion后面的29更改为28将appcompat-v7:29.+更改为appcompat-v7:28.0.0单击窗口上方的TryAgain5.1

创建工程5.2

修改配置修改JDK路径:ProjectStructure->SDKLocation->JDKlocation修改build.gradle文件:App->build.gradle将JDK的路径自定义为安装JDK的路径:...\Java\jdk1.8.0_2416.

安卓HelloWorld工程详解java:存放activity文件,写Java逻辑代码,实现业务功能res:resource的缩写,存放各种资源文件,有图片、字符串等,各种形式的XML文件图片资源:mipmap:存放应用图标drawable:存放各种位图文件,应用图标以外的图片mipmap-hdpi:高分辨率mipmap-mdpi:中等分辨率mipmap-xhdpi:超高分辨率mipmap-xxhdpi:超超高分辨率mipmap-xxxhdpi:超超超高分辨率布局资源:存放XML格式的布局文件,一般有对应的activity文件colors.xml:定义颜色资源strings.xml:定义字符串资源styles.xml:定义样式资源Project目录结构下的关键部分6.

安卓HelloWorld工程详解MainActivity(逻辑)三个核心文件R.layout.activity_mainactivity_main.xml(视图)逻辑和视图分离android:text="HelloWorld!"AndroidManifest.xml(配置文件)命名软件包定义图标、APP名、主题描述应用的组件(activity等)确定主启动页让APP显示在应用程序列表中声明权限7.

日志工具Log的使用7.1日志的作用项目调试过程中输出信息便于测试7.2日志的使用导入包:importandroid.util.Log级别越来越高方法用法:快捷输入:Log.x(参数1tag,参数2msg)(x=v、d、i、w、e)第一个参数tag通常设置为当前的类名,用于过滤打印信息第二个参数msg为具体打印的信息输入logd,按Tab键—>自动补全完整的打印语句输入logt,按Tab键—>以当前的类名为值自动生成TAG常量Log.v():verbose,打印琐碎的日志信息Log.d():debug,打印调试信息Log.i():info,打印提示性信息Log.w():warm,打印警告信息Log.e():error,打印错误信息附:Genymotion模拟器的安装软件下载地址:/download/下载带有VirtualBox的软件包傻瓜式安装,安装过程的中会自动安装VirtualBox注册Genymotion创建安卓模拟器(选择系统版本等)启动模拟器2.考虑安装GenymotionAndroid模拟器的情况没有真机调试,只能用模拟器嫌SDK内置的AVD启动速度,运行速度慢电脑配置还可以,最好4G内存以上1.Genymotion模拟器介绍Genymotion是基于VirtualBox的一款工具软件,提供了Android虚拟环境3.安装GenymotionAndroid模拟器安装步骤安卓移动医疗应用开发Java语言基础02Contents.1Java运行原理简介2Notepad++软件安装和HelloJava工程简介3简单的秒值-时间转换实验4

基于数组的秒值-时间转换实验5基于方法的秒值-时间转换实验6基于枚举的秒值-时间转换实验1.Java运行原理简介1.1java语言跨平台原理平台(操作系统)跨平台:java程序可以在任意的操作系统运行中国人美国人德国人翻译翻译翻译Windows版JVMMac版JVMLinux版JVM总结:通过安装与操作系统对应的java虚拟机(JVM)实现跨平台JVM1.Java运行原理简介1.2JDK、JRE、JVM三者间的关系JDKjava开发工具(编译器,调试器)JRE运行环境JVMjava虚拟机Java核心类库针对java开发者针对java用户实现java程序跨平台java程序会首先被编译为.class的类文件.class类文件在JVM上解释执行(解释器)可执行文件对应目标系统的机器语言解释.class类文件的时候JVM需要调用解释所需要的类库编译器javac.exe解释器java.exe1.3JAVA编译器和解释器2.Notepad++软件安装和HelloJava工程简介2.1软件安装和添加工程代码插件NppExec保存文件编译打开路径执行publicclassHelloJava{publicstaticvoidmain(String[]args){System.out.println("HelloJava!");}}F6安装软件配置软件添加代码编译执行相关软件:npp.7.8.5.Installer.exe介于Notepad++和外部工具(编译器等)之间的一个中间件NPP_SAVEjavac.exe"$(FULL_CURRENT_PATH)“cd"$(CURRENT_DIRECTORY)“java.exe"$(NAME_PART)"

解决中文乱码问题:ANSI编码2.Notepad++软件安装和HelloJava工程简介2.2HelloJava工程简介—命名规范对于所有的类来说,类名的首字母为大写,如果类名由若干单词组成,那么每个单词的首字母均为大写,例如MyFirstJavaClass;所有的方法名都以小写字母开头,如果方法名由若干单词组成,则每个单词的首字母均为大写,例如myFirstJavaMethod;源文件名必须和类名相同,文件名的后缀为.java,如果文件名和类名不相同则会导致编译错误。publicclassHelloJava{publicstaticvoidmain(String[]args){System.out.println("HelloJava!");}}2.Notepad++软件安装和HelloJava工程简介2.3HelloJava工程简介—Java中的main()方法main()方法的声明为“publicstaticvoidmain(String[]args)”告诉其他的类可以访问这个方法public告知编译器main函数是一个静态方法调用时无需实例化,而是通过类名直接调用staticJVM有限制,不能有返回值main()的返回值是无类型void参数args为程序使用者在命令行状态下与程序交互提供了一种手段String[]argsmain()方法是java中的入口函数,所有java程序的运行起点就是这个方法,除了args这个名称可以不一样外,其他必须是保持不变3.简单的秒值-时间转换实验3.1实验内容

一天有24小时、一小时有60分钟,一分钟有60秒,因此,一天就有24×60×60=86400秒,如果从0开始计算,每天按照秒计数的范围即为0~86399。通过键盘输入一个0~86399之间的值,包括0和86399,将其转换为小时值、分钟值和秒值,并输出到Notepad++软件的Console栏。类:ConvertTime变量:小时hour,分钟min,秒sec输入:Scanner类运算输出3.简单的秒值-时间转换实验3.2实验原理变量命名规范静态变量(static修饰):命名采用s字母开头,后续单词的首字母大写,其余字母小写格式,例如:sMaxValue常量(final关键字):命名采用所有字母大写,不同单词之间用下划线隔开的格式,例如:MAX_VALUE其他变量:命名采用第一个单词首字母小写,后续单词的首字母大写,其余字母小写格式,例如:maxValue3.简单的秒值-时间转换实验3.2实验原理基本数据类型类别数据类型内存空间说明数值型byte8位byte型是有符号的,以二进制补码表示的整数,最小值为-128(-27),最大值为127(27-1),默认值为0short16位short型是有符号的,以二进制补码表示的整数,最小值为-32768(-215),最大值为32767(215-1),默认值为0int32位int型是有符号的,以二进制补码表示的整数,最小值为-231,最大值为231-1,一般整型变量默认为int型,默认值为0long64位long型是有符号的,以二进制补码表示的整数,最小值为-263,最大值为263-1,这种类型主要使用在需要比较大整数的系统上,默认值为0L。如果赋给的值大于int型的最大值或小于int型的最小值,则需要在数字后加L,表示该数值为long型整数。L理论上不分大小写,但若写成l容易与数字1混淆,不容易分辩,建议大写float32位float型是单精度、符合IEEE754标准的浮点数。如果使用float型小数,则需要在小数后添加F或f,因此,声明float型变量时不加F或f,系统会认为变量是double类型而出错。float型小数默认值为0.0fdouble64位double型是双精度、符合IEEE754标准的浮点数。默认情况下小数都被看作double型,因此,声明double型变量时不加D或d,系统不会出错。double型小数默认值为0.0d布尔型boolean1位布尔型又称为逻辑类型,只有true和false两个值,分别代表布尔逻辑中的真和假。默认值为false。注意,布尔值不能与整数类型进行转换字符型char16位同C/C++语言一样,Java语言也可以把字符作为整数对待。由于unicode编码采用无符号编码,可以存储65536个字符(0x0000~0xFFFF),所以Java中的字符几乎可以处理所有国家的语言文字。如果要得到一个0~65535之间的数所代表的unicode表中相应位置的字符,也必须使用char型显示转换3.简单的秒值-时间转换实验3.2实验原理获取控制台输入引用对应的类包:importjava.util.Scanner;代码的使用:Scannerscan=newScanner(System.in);

创建Scanner对象后,控制台会一直等待输入,直到用户按回车键结束,把所输入的内容传给Scanner对象。tick=scan.nextInt();nextInt()将获取的输入字符串转换为整数类型,从键盘获取的都是字符串类型的数据。3.简单的秒值-时间转换实验3.2实验原理计算小时、分钟、秒值运算符格式说明+A+B加法,相加运算符两侧的值-A–B减法,左操作数减去右操作数*A*B乘法,相乘操作符两侧的值/A/B除法取模,左操作数除以右操作数的商%A%B取余,左操作数除以右操作数的余数++A++或++A自增,操作数的值增加1--A--或--A自减,操作数的值减少1hour=tick/3600; //tick对3600取模赋值给hour

min=(tick%3600)/60; //tick对3600取余后再对60取模赋值给min

sec=(tick%3600)%60; //tick对3600取余后再对60取余赋值给sec3.简单的秒值-时间转换实验3.3代码分析java.lang包中包含了运行Java必不可少的系统类,系统会自动将java.lang引入,所以不需要在源文件中用import语句来显示地引入这个包4.基于数组的秒值-时间转换实验4.1实验内容通过键盘输入一个0~86399之间的值,包括0和86399,将其转换为小时值、分钟值和秒值,而小时值、分钟值和秒值为数组arrTimeVal的元素,即arrTimeVal[2]为小时值、arrTimeVal[1]为分钟值、arrTimeVal[0]为秒值,并输出转换结果。类:ConvertTime变量:小时hour,分钟min,秒sec输入:Scanner类运算输出4.基于数组的秒值-时间转换实验4.2实验原理数组的作用和特点:用于数据的存储,一旦定义一个数组,其中只能存放一种数据类型。声明数组创建数组初始化数组使用数组声明数组的两种语法格式:type[]arrayName;typearrayName[];先申明再分配内存:arrayName=newtype[n];申明的同时分配内存:type[]arrayName=newtype[n];静态初始化:type[]arrayName=newtype[]{element1,element2,…};

简化后type[]arrayName={element1,element2,…};动态初始化:type[]arrayName=newtype[length];arrayName[0]=0;…….arrayName[索引值];注意:Java语言中数组索引从0开始4.基于数组的秒值-时间转换实验4.3代码分析5.基于方法的秒值-时间转换实验5.1实验内容通过键盘输入一个0~86399之间的值,包括0和86399,使用calcHour()方法计算小时值,calcMin()方法计算分钟值,calcSec()方法计算秒值,在主方法中通过调用上述三个方法实现秒值-时间值转换,并输出转换结果。类:ConvertTime变量:小时hour,分钟min,秒sec输入:Scanner类运算输出5.基于方法的秒值-时间转换实验5.2实验原理方法:将代码封装起来,用来完成某个功能操作,便于以后他人使用。在某些语言中称为函数。修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2,…){

方法体 (return返回值;)}方法的定义修饰符:private/public/protected访问权限返回值类型:方法返回值的数据类型,若无返回值使用void,方法体中不需要return语句方法名:见名知意。命名采用第一个单词首字母小写,后续单词首字母大写,其余字母小写的格式命名(驼峰命名法)。参数列表:不确定因素函数与方法5.基于方法的秒值-时间转换实验5.3代码分析6.基于枚举的秒值-时间转换实验6.1实验内容

通过键盘输入一个0~86399之间的值,包括0和86399,使用calcTimeVal()方法计算时间值(包括小时值、分钟值和秒值),通过枚举区分具体是哪一种时间值,返回值为对应的时间输出,在main()方法中通过调用calcTimeVal()实现秒值-时间值转换,并输出转换结果。类:ConvertTime变量:小时hour,分钟min,秒sec输入:Scanner类运算输出6.基于枚举的秒值-时间转换实验6.2实验原理使用场景:一个变量只有几种可能的值,通过枚举把可能的值一一列举出枚举类型publicenumEnumTimeVal{TIME_VAL_HOUR,TIME_VAL_MIN,TIME_VAL_SEC,}关键字:enum枚举名:EnumTimeVal枚举成员:默认被publicstaticfinal修饰使用:

EnumTimeVal.TIME_VAL_HOURswitch…case…语句功能:判断一个变量与一系列值中某个值是否相等switch(表达式){case常量值1:

语句块1 [break;]…case常量值n:

语句块n [break;]default:

语句块n+1 [break;]}switch语句中表达式的值必须与case常量值的数据类型相同。规则如下:(1)当表达式的值与case常量值相等时,则执行case语句后面的语句块,直到遇到break语句为止。当遇到break语句时,程序跳转到switch…case…语句后面的语句执行。(2)case语句并不一定都要包含break语句,如果没有break语句,程序会继续执行下一条case语句,直到出现break语句为止。(3)default语句在没有case常量值和表达式的值相等的时候执行。6.基于枚举的秒值-时间转换实验6.3代码分析附.通过AndroidStudio使用java控制台1.File—New—NewModule—JavaLibrary附.通过AndroidStudio使用java控制台2.命名附.通过AndroidStudio使用java控制台3.打开创建的module附.通过AndroidStudio使用java控制台4.代码区右击运行安卓移动医疗应用开发面向对象程序设计03Contents.1类的封装实验2类的继承实验3类的多态实验4

抽象类实验5接口实验6类包实验7异常处理实验0类的基础知识0.类的基础知识0.1面向对象和面向过程编程思想函数1:打开冰箱(){人站在冰箱前,打开冰箱。。。}函数2:储存大象(){大象先迈左腿,再迈右腿。。。}函数3:关闭冰箱(){人站在冰箱前,关闭冰箱。。。}以事物为中心以分类的方式解决问题用类组织代码以过程为中心用函数组织代码按步骤去解决问题人{打开(冰箱){冰箱.打开();}存储(大象){大象.进入();}关闭(冰箱){冰箱.关闭();}}性能高易维护,易使用,易扩展优点面向过程面向对象举例特点人把大象装进冰箱冰箱{打开(){}关闭(){}}大象{进入(冰箱){}}共同点相辅相成,并不是对立。整体上用面向对象把控,细节上用面向过程解决。0.类的基础知识0.2类和对象面向对象具有共同属性和行为的事物的抽象客观存在的事物皆为对象对象是类的实例类是对象的模板类对象举例特点联系0.类的基础知识0.3类的定义类:对现实生活中具有共同属性和行为的事物的抽象。类的组成:属性和行为属性:在类中通过成员变量来体现(类中方法外的变量)行为:在类中通过成员方法来体现定义类的步骤定义类名编写类的成员变量编写类的成员方法publicclass类名{

//成员变量

变量1的数据类型变量1;

变量2的数据类型变量2 …

//成员方法

方法1;

方法2; …}类名:人(Person)成员变量:姓名(name)年龄(age)身高(height)性别(sex)成员方法:吃饭(eat)睡觉(sleep)自我介绍(introduce)0.类的基础知识0.4对象的使用创建对象格式:类名对象名=new构造方法名();示例:Personp=newPerson();Personp=newPerson();对象类型对象名称实例化构造方法(初始化)使用对象1、使用成员变量格式:对象名.变量名示例:2、使用成员方法格式:对象名.方法名()示例:p.eat()0.类的基础知识0.5构造方法作用:给创建的对象进行初始化格式:

publicclass类名{

修饰符类名(参数){}}示例:

publicclasstest{publicstaticvoidmain(String[]args){ Personp=newPerson();}}示例:

publicclassPerson{publicPerson(){ //构造方法内写的内容}}特点:一种特殊的方法,与类同名,无返回值调用方式:每实例化一个对象,类会自动调用构造方法使用隐式定义:Java编译器提供一个默认的无参构造方法显式定义:一个类可以定义多个构造方法使用注意事项:如果定义了构造方法,系统将不再提供默认的构造方法。如果定义了带参构造方法,还要使用无参构造方法,就必须再写一个无参构造方法。建议时刻保留无参构造方法的存在。生成构造方法快捷键:Alt+Insert——Constructor0.类的基础知识0.6方法的重载不带参构造方法:publicPerson(){ //构造方法内写的内容}带参构造方法:publicPerson(Stringa){ //构造方法内写的内容}方法重载指同一个类中定义的多个方法之间的关系,满足以下条件的多个方法相互构成重载方法位于同一个类中方法具有相同的方法名方法的参数不同:类型不同或者数量不同(与返回值无关)0.类的基础知识0.7成员变量和局部变量的区别区别成员变量局部变量类中的位置不同类中方法外方法内生命周期不同当前对象从创建到销毁当前方法从开始执行到执行完毕初始化值不同有默认的初始化值没有默认的初始化值,必须定义赋值后才能使用0.类的基础知识0.8this关键字的用法this关键字的使用场合:局部变量与成员变量命名相同时局部变量与成员变量同名,带this修饰的变量是成员变量局部变量与成员变量不同名,不管带不带this修饰,都指的都是成员变量,此时没有必要使用thisthis代表所在类的对象的引用方法被哪个对象调用,this就代表哪个对象publicclassPerson{

Stringname; //姓名

intage; //年龄//构造方法(带参)

publicPerson(Stringname,intage){

=name;

this.age=age;

}

}1.类的封装实验1.1实验内容创建ConvertTime类,在类中定义一个CalcTime类,进一步在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec(),用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。1.类的封装实验1.2实验原理什么是封装?封装的概念:封装是把过程和数据包围起来,提供相应的方式进行获取。封装是一种信息隐藏技术,在java中通过关键字private,protected和public实现封装。通俗地说,把该隐藏的隐藏起来,该暴露的暴露出来。如何进行封装(以属性封装为例):(1)将属性私有化:利用权限修饰符来控制权限,防止被随意获取(2)提供公有的方法来访问(3)在方法中可进行访问限制自动生成代码快捷键:Alt+Insert封装的好处:提高代码的安全性1.类的封装实验1.3代码分析创建ConvertTime类,在类中定义一个CalcTime类,进一步在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec(),用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。2.类的继承实验2.1实验内容

创建ConvertTime类,在类中定义一个父类CalcTime,在父类中依次定义用于指定小时值、分钟值的常量TIME_VAL_HOUR和TIME_VAL_MIN,用于保存小时值和分钟值的成员变量mHour和mMin,用于计算小时值和分钟值的CalcHour()和CalcMin()。然后定义一个继承父类的CalcAllTime子类,在子类中定义用于指定秒值类型的常量TIME_VAL_SEC,用于保存秒值的成员变量mSec,用于计算秒值的CalcSec()方法,最后,重写用于计算时间值的CalcTimeVal()方法和获取时间值的GetTimeVal()方法。在ConvertTime类中,通过new操作符创建一个CalcAllTime型对象,该对象名为cat,然后,在ConvertTime类中定义一个用于计算和显示时间的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。2.类的继承实验2.2实验原理继承学生类:Student

属性:国籍,姓名,学生号

方法:自我介绍,睡觉,学习教师类:Teacher

属性:国籍,姓名,教师号

方法:自我介绍,睡觉,讲课员工类:Employee

属性:国籍,姓名,工号

方法:自我介绍,睡觉,上班继承的格式格式:publicclass子类名extends

父类名{}范例:publicclassStudentextendsPerson{}Person:是父类,也被称为基类、超类Student:是子类,也被称为派生类继承的介绍:继承可以使得子类具有父类的属性和方法,还可以在子类中重新定义追加属性和方法。注意事项:继承必须在合理的范围内进行向上抽取。可以说:学生是人,狗是动物

不能说:狗是人抽取出共同的属性和方法人类:Person

属性:国籍,姓名

方法:自我介绍,睡觉学生类/教师类/员工类继承自人类示例:继承的好处:提高的代码的复用性和维护性。2.类的继承实验2.2实验原理重写方法重写表现形式:子类中出现和父类中一模一样的方法声明,但是方法体不同方法为什么要重写:当子类需要父类的功能,而子类又有自己特有的内容时,重写父类中的方法方法重写注意事项:可通过super关键字访问父类方法为防止方法名不一致,加上@override可通过方法名自动生成方法声明2.类的继承实验2.2实验原理重载与重写的区别重载:发生在同一个类中,当方法名相同,形参列表不同,多个方法构成了重载。重写:在不同类中,子类对父类提供的方法不满意的时候,要对父类进行重写。

英文位置修饰符返回值方法名参数方法体重载overload同一个类中无关无关必须相同必须不同不同重写override子类父类中大于等于小于等于必须相同必须相同不同2.类的继承实验2.2实验原理super和this关键字的区别super关键字的用法和this关键字的用法相似this:代表本类对象的引用super:代表父类存储空间的标识(可理解为父类对象引用)

关键字访问成员变量访问构造方法访问成员方法thisthis.成员变量访问本类成员变量this()访问本类构造方法this.成员方法()访问本类成员方法supersuper.成员变量访问父类成员变量super()访问父类构造方法super.成员方法()访问父类成员方法2.类的继承实验2.2实验原理权限修饰符修饰符同一个类中同一个包中子类

无关类不同包的子类不同包的无关类private√

默认√√

protected√√√

public√√√√2.类的继承实验2.3代码分析

创建ConvertTime类,在类中定义一个父类CalcTime,在父类中依次定义用于指定小时值、分钟值的常量TIME_VAL_HOUR和TIME_VAL_MIN,用于保存小时值和分钟值的成员变量mHour和mMin,用于计算小时值和分钟值的CalcHour()和CalcMin()。然后定义一个继承父类的CalcAllTime子类,在子类中定义用于指定秒值类型的常量TIME_VAL_SEC,用于保存秒值的成员变量mSec,用于计算秒值的CalcSec()方法,最后,重写用于计算时间值的CalcTimeVal()方法和获取时间值的GetTimeVal()方法。在ConvertTime类中,通过new操作符创建一个CalcAllTime型对象,该对象名为cat,然后,在ConvertTime类中定义一个用于计算和显示时间的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。3.类的多态实验3.1实验内容创建ConvertTime类,在类中定义一个CalcTime类,进一步在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec(),用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。在ConvertTime类中,通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中分别定义一个不带参数和带参数的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。3.2实验原理多态3.类的多态实验多态的含义:同一个行为具有多个不同表现形式或形态的能力。多态的体现方法重载成员覆盖:继承、重写、父类引用指向子类对象多态的好处:提高了程序的扩展性。具体体现在定义方法的时候,使用父类型作为参数,将来在使用的时候,使用子类的类型参与操作。多态的弊端:不能访问子类所特有的功能举例:动物会叫,猫会喵喵叫,狗会汪汪叫猫cat=new猫();cat.call();猫会喵喵叫动物animal=new猫();animal.call();猫是动物,会喵喵叫动物animal=new狗();animal.call();狗是动物,会汪汪叫同一个事件发生在不同的对象上会产生不同的结果执行子类重写的方法,无法运行子类独有的方法多态中成员访问的特点(只能访问父类中有的成员)成员变量:访问的是父类中的成员变量成员方法:访问的是子类被重写的成员方法3.3代码分析(方法重载为例)3.类的多态实验创建ConvertTime类,在类中定义一个CalcTime类,进一步在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec(),用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。在ConvertTime类中,通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中分别定义一个不带参数和带参数的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。4.抽象类实验4.1实验内容创建ConvertTime类,在类中定义一个Time抽象类,在抽象类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,以及用于显示时间的DispTime()方法,该方法为抽象方法。然后定义一个继承抽象类的CalcTime子类,在子类中定义用于计算小时值的CalcHour()方法,用于计算分钟值的CalcMin()方法,用于计算秒值的CalcSec()方法,最后,重写用于显示时间的DispTime()方法。在ConvertTime类中,通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中分别定义一个用于计算和显示时间的CalcDispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。4.2实验原理抽象类的理解4.抽象类实验抽象类的引入:动物是抽象的事物,只有实例化为具体的动物才知道具体的行为。所以在创建动物类的时候可以不写具体的行为,体现在方法中只有方法申明没有方法体。抽象类的特点抽象类和抽象方法必须使用abstract关键字修饰抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类抽象类不能实例化:可通过子类对象实例化,称为抽象类多态抽象类的子类如果不重写抽象类中的所有抽象方法,则还是抽象类成员变量:可以是变量,也可以是常量成员方法:可以有抽象方法(限定子类必须完成某些动作),也可以有非抽象方法(提高代码复用性)定义抽象方法:[权限修饰符]abstract

返回值类型方法名(参数列表);定义抽象类:[权限修饰符]abstractclass类名{//类体}动物抽象类的由来:在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。4.3代码分析4.抽象类实验

创建ConvertTime类,在类中定义一个Time抽象类,在抽象类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,以及用于显示时间的DispTime()方法,该方法为抽象方法。然后定义一个继承抽象类的CalcTime子类,在子类中定义用于计算小时值的CalcHour()方法,用于计算分钟值的CalcMin()方法,用于计算秒值的CalcSec()方法,最后,重写用于显示时间的DispTime()方法。在ConvertTime类中,通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中分别定义一个用于计算和显示时间的CalcDispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。5.接口实验5.1实验内容创建ConvertTime类,在类中定义一个接口Time,在接口中依次定义用于小时、分钟、秒值默认值DEFAULT_HOUR、DEFAULT_MIN和DEFAULT_SEC,用于显示时间的DispTime()方法,该方法为抽象方法。然后定义一个实现接口Time的CalcTime类,在该类中定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec()方法,最后,重写用于显示时间的DispTime()方法。在ConvertTime类中,通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中分别定义一个用于计算和显示时间的CalcDispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。5.2实验原理状态修饰符:static5.接口实验static修饰属性static修饰属性的应用场景:某些特定的数据想要在内存中共享,这个情况下,就可以用static修饰的属性访问方式:对象名.属性名

类名.属性名(推荐)静态内容被所有该类的对象共享(先于对象存在)5.2实验原理状态修饰符:final5.接口实验final的用法final修饰变量:表明该变量是常量,不能被再次赋值,约定俗成的规定-名字大写final修饰方法:表明该方法是最终方法,不能被子类重写final修饰类:表明该类是最终类,不能被继承5.2实验原理接口的理解5.接口实验接口的引入:接口是一种公共的规范标准。Java中的接口体现在对行为的抽象。JDK1.8之前,接口只包含常量和抽象方法。接口的特点接口用关键字interface修饰实现接口用implements表示成员变量只能是常量:默认修饰符publicstaticfinal成员方法只能是抽象方法:默认修饰符publicabstract接口的实现类如果不重写所有抽象方法,就是抽象类接口不能实例化

可通过实现类对象实例化,称为接口多态

多态的形式:具体类多态,抽象类多态,接口多态

多态的前提:有继承或者实现关系,有方法重写,有父

(类/接口)引用指向(子/实现)类对象定义接口:[权限修饰符]interface

接口名[extends父接口名列表]{[public][static][final]常量;[public][abstract]方法;}实现接口:[权限修饰符]class子类名implements

接口名1,接口名2,…{//类体}5.2实验原理类和接口的关系5.接口实验类和类的关系继承关系,只能单继承,但可多层继承类和接口的关系实现关系,可以单实现,也可多实现,还可以继承一个类的同时实现多个接口接口和接口的关系继承关系,可以单继承,也可多继承5.2实验原理抽象类和接口的区别5.接口实验设计理念的区别抽象类对类抽象,包括属性、行为接口对行为抽象,主要包括行为抽象类是对事物的抽象,而接口是对行为的抽象5.2实验原理抽象类和接口的区别举例5.接口实验//抽象类publicabstractclassPhone{

publicabstractvoidcall();

publicabstractvoidtext();}//接口publicinterfacePhone{voidcall();voidtext();}例子:当手机可以看视频手机基本功能打电话和发短信,额外增加看视频的功能。//抽象类publicabstractclassVideoPhone{

publicabstractvoidcall();

publicabstractvoidtext();

publicabstractvoidvideo();}//接口publicinterfaceVideoPhone{voidcall();voidtext();

voidvideo();}不够灵活5.2实验原理抽象类和接口的区别举例5.接口实验publicinterfaceVideo{voidvideo();}publicabstractclassPhone{publicabstractvoidcall();publicabstractvoidtext();}publicclassVideoPhoneextendsPhoneimplementsVideo{

publicvoidcall(){

//….

}publicvoidtext(){ //….}

publicvoidvideo(){ //….}}手机固有的功能:抽象类手机添加的功能:接口通过类继承和接口实现组装功能5.3代码分析5.接口实验只需要显示的场合:需要计算和显示的场合:6.类包实验6.1实验内容新建一个CalcTime.java文件,并在该文件中创建CalcTime类,并指定包名为com.leyutek.calc。在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec()方法,用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。新建一个ConvertTime类,通过import导入CalcTime类包,并在ConvertTime类中通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中定义用于计算和显示时间的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。6.2实验原理类包的概述6.类包实验包的定义格式格式:package包名;(多级包用.分开)范例:packagecom.leyutek.ConvertTime;包的本质是文件夹,包的作用是对类进行分类管理。为什么需要类包?张三张三工学院商学院解决命名冲突导包的格式格式:import包名;(多级包用.分开)范例:importcom.leyutek.ConvertTime;6.3代码分析6.类包实验

新建一个CalcTime.java文件,并在该文件中创建CalcTime类,并指定包名为com.leyutek.calc。在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec()方法,用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。新建一个ConvertTime类,通过import导入CalcTime类包,并在ConvertTime类中通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中定义用于计算和显示时间的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。7.异常处理实验7.1实验内容

创建TickException自定义异常类,实现构造方法。然后,创建ConvertTime类,在该类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算和显示时间值的CalcTimeVal()方法,如果tick值小于0或者大于86399,通过throw实例化TickException自定义异常类。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,在try语句中通过调用ct对象的CalcTimeVal()方法计算和显示时间值,在catch语句中输出异常信息,最后,在finally语句中关闭控制台输入对象。7.2实验原理异常7.异常处理实验异常:程序出现了不正常的情况。RuntimeException:不检查异常。在编译期是不检查的,出现问题后需要修改代码非RuntimeException:检查异常。编译期就必须处理,否则程序不能通过编译,更不能正常运行了Java异常的体系比较严重的错误不需要处理可以通过编译,捕获处理后程序可以继续执行无法通过编译7.2实验原理异常处理—try…catch处理异常7.异常处理实验执行流程:从try开始执行出现异常,自动生成一个异常对象,该对象被提交给java运行时系统java运行时系统接收到异常对象,到catch中找匹配的异常类,找到后进行异常处理执行完毕后,程序可以继续往下执行处理异常使用抓抛模型:java程序在执行过程中如果出现异常,会自动生成异常类对象,该异常对象将会被java运行时系统抛出。发生异常的方法一层一层向外抛出异常对象,直到异常被捕获。如果异常回到main方法也没被处理,程序运行终止。try{//可能发生异常的代码块}catch(异常类名

异常对象名){//异常的处理代码}…[finally{

//无条件执行的代码}]格式:处理异常主要有两种方案:try…catch处理异常:针对有权限进行处理的异常throws处理异常:主要用来抛出自定义异常try-catch快捷键Ctrl+Alt+T7.2实验原理异常处理—throws抛出自定义异常7.异常处理实验修饰符返回值异常所在方法(参数)throws异常类名{

…… throw异常对象名; ……}抛出异常的格式:自定义异常的格式:publicclass异常类名extendsException{

无参构造器

带参构造器}throwsthrow用在方法申明后,跟异常类名用在方法体内,跟异常对象名表示抛出异常,由该方法的调用者来处理表示抛出异常,由方法体内语句处理表示出现异常的一种可能性,并不一定会发生这些异常执行throw一定是抛出了某种异常throws和throw的区别7.3代码分析7.异常处理实验安卓移动医疗应用开发Android程序设计04Contents.1Activity2BroadcastReceiver3ContentProvider4

Service1.Activity1.1实验内容

Activity是一种应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。本小节主要介绍Activity的创建、跳转、数据交互以及它的生命周期。数据交互跳转生命周期1.Activity1.2实验原理匿名类实验1-创建Activity使用场景:直接通过类(可以是抽象类)或接口名实例化对象new类名或接口名(){

重写方法;};格式:匿名类本质:是继承了类或实现了接口的子类的匿名对象1.Activity1.2实验原理界面布局简介<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="/apk/res/android"

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent">

<Button

android:id="@+id/btn1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="button1"/>

</LinearLayout>实验1-创建Activityxml的版本和编码格式xml的命名空间,有了它就可以按alt+/作为提示排列方式为垂直设置控件的宽度和高度,match_parent属性指和父控件的长度一致,wrap_content属性指空间大小和内容大小刚好为控件设置id值,并且添加到R文件的id内部类中为控件设置文本1.Activity1.2实验原理AndroidManifest配置文件介绍实验1-创建Activity<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"package="com.leyutek.helloworld"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activityandroid:name=".MainActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/>

<categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application></manifest>定义程序所在的java包是否允许备份文件:允许注册一个activity,包括页面的名称,.前省略了包名定义应用的图标,引用mipmap中的资源定义应用的名称,引用string中的资源定义应用使用的主题定义应用的圆形图标,引用mipmap中的资源是否支持右对齐righttoleft:是应用程序最先启动该Activity决定应用程序是否显示在程序列表里1.Activity1.3代码分析实验1-创建ActivityActivity文件(逻辑)Layout布局文件(视图)AndroidManifest配置文件加载布局文件通过setContentView()方法注册活动配置主活动1.Activity1.2实验原理实验2-Activity之间的跳转Intent(页面跳转)Intent的介绍:

中文翻译“意图”。是一个消息传递对象,可以用于在不同组件之间传递数据,基本用例包括启动活动、启动服务、传递广播。Intent的分类

显示Intent隐式Intent区别直接指定目标组件的名称不指定具体的目标组件使用方法Intentintent=newIntent(ContextpackageContext,Class<?>cls)定义要执行的action、category、data,通过intent-filter意图过滤器来使用使用场景多用于在应用程序内部传递信息多用于在不同应用程序之间传递消息Intent实现页面跳转

Activity1构建Intent调用startActivity()方法Activity2根据Intent中的描述,执行相应的操作找到满足要求的Activity1.Activity1.2实验原理Context上下文实验2-Activity之间的跳转Context的介绍:

用来访问全局信息的接口,可以理解为上下文、运行环境、场景。比如应用程序的字符串、图片等资源。常用的组件一般继承自Context,目的是为了方便访问资源。Intentintent=newIntent(Context

packageContext,Class<?>cl

温馨提示

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

评论

0/150

提交评论