2019级软件工程应用与实践-人工智能快递柜(代码分析1)

2021SC@SDUSC
由于我负责的是安卓端代码解析的工作.之前并未接触过安卓的相关知识,先对一些基础知识的学习进行记录。

Android Studio的软件学习

界面介绍

在这里插入图片描述
Android Studio的界面主要分成了5部分

区域1介绍

在这里插入图片描述

这个区域是运行和调试相关的操作。

1、编译2中显示的模块

2、当前项目的模块列表

3、运行2中显示的模块

4、调试2中显示的模块

5、测试2中显示的模块代码覆盖率

6、调试安卓运行的进程

7、重新运行2中显示的模块

8、停止运行2中显示的模块

区域2介绍

在这里插入图片描述

这个区域主要是和Android设备和虚拟机相关的操作。

1、虚拟设备管理。

2、同步工程的Gradle文件,一般在Gradle配置被修改的时候需要同步一下。

3 、项目结构,一些项目相关的属性配置。

4、Android SDK管理

5、Genymontion模拟器(需要装Genymontion插件,安装篇[模拟器安装]部分)

区域3介绍

在这里插入图片描述

这个区域主要是工程文件资源等相关的操作。

1、展示项目中文件的组织方式,默认是以Android方式展示的,可选择“Project、Packages、Scratches、ProjectFiles、Problems…”等展示方式。平时用的最多的就Android和Project两种。

2、定位当前打开文件在工程目录中的位置。

3、关闭工程目录中所有的展开项。

4、额外的一些系统配置,点开后是一个弹出菜单:
在这里插入图片描述
Autoscroll to Source 和 Autoscroll from Source两个勾选起来后,Android Studio会自动定位当前编辑文件在工程中的位置,用起来会很爽。其他功能大家可以自己摸索摸索。

区域4介绍

在这里插入图片描述

这个区域主要是用来编写代码和设计布局。

1、已打开的文件的Tab页。(在Tab页上按下Ctrl键 + 点击鼠标会出现一个弹出菜单会有惊喜哦!)

2、UI布局预览区域。

3、布局编辑模式切换,对于一些老鸟来说更喜欢通过Text来编辑布局,新手可以试试Design编辑布局,编辑后再切换到Text模式,对于学习Android布局设计很有帮助。

区域5介绍

在这里插入图片描述

这个区域大部分是用来查看一些输出信息的。

1、终端 - 喜欢命令行操作的伙伴不用额外启动终端了。

2、监控 - 可以查看应用的一些输出信息。

3、信息 - 工程编译的一些输出信息。

4、运行 - 应用运行后的一些相关信息。

5、TODO - 标有TOTO注释的列表。

6、事件 - 一些事件日志。

7、Gradle控制台,通过这个可以了解Gradle构建应用的时候一些输出信息。

Android Studio目录结构

在这里插入图片描述

1、Gradle编译系统,版本由wrapper指定

2、Android Studio IDE所需要的文件

3、应用相关文件的存放目录

4、编译后产生的相关文件

5、存放相关依赖库

6、代码存放目录

7、资源文件存放目录(包括:布局、图像、样式等等)

8、应用程序的基本信息清单,描述哪些个组件是存在的

9、git版本管理忽略文件,标记出哪些文件不用进入git库中

10、Android Studio的工程文件

11、模块的gradle相关配置

12、代码混淆规则配置

13、工程的gradle相关配置

14、gradle相关的全局属性设置

15、本地属性设置(key设置,android sdk位置等属性)

基础语法介绍

除了部分新的Android知识,大部分是对以往java相关知识的回顾

基本概念

Android应用程序框架
每个应用程序其实是一组服务和系统,包括以下内容:
① 视图(View):丰富的、可扩展的视图集合,用来构建应用程序。包括列表(Lists)、网格(grids)、文本框(Textboxs)、按钮(Buttons),甚至是可嵌入的网页浏览器。
② 内容提供器(Content Providers):使应用程序可以访问其他应用程序(如通讯录)的数据,或共享自己的数据。
③ 资源管理器(Resource Manager):提供对于非代码资源的访问,如本地化字符串、图形和布局文件。
④ 消息管理器(Notification Manager):使得应用程序能够在状态栏显示自定义的提示信息。
⑤ 活动管理器(Activity Manager):管理应用程序的声明周期,并提供常用的导航回退功能。

一个标准的Android程序包括:
① Activity:Activity是在Android应用开发中最频繁、最基本的模块。在Android中,Activity类中主要是与界面资源相关联。Android系统会自动记录从首页到其他页面的所有跳转记录并自动将以前的Activity压入系统堆栈,用户可以通过编程的方式删除历史堆栈中的Activity Instance。
② Broadcast Intent Receiver:Intent为不同的Activity之间进行跳转提供了机制,比如当从A Activity跳转到B Activity,使用Intent实现如下:

Intent in=new Intent(A.this, B.class);
startActivity(in);

BroadcastReceiver还为各种不同的Android应用程序间进行进程间通信提供了可能。
③ Service:Service是一个没有用户界面的在后台运行执行耗时操作的应用组件。用户可以通过startService(Intent Service)启动一个Service,也可以偶同过Context.bindService来绑定一个Service。
④ Content Provider:Content Provider提供了应用程序之间的数据交换机制,一个应用程序通过实现一个Content Provider的抽象接口将自己的数据暴露出区,并且隐蔽了具体的数据存储实现。

面向对象程序设计初步
构造器(构造方法):

在Java程序中,每个类必须至少有一个构造器。
利用构造器可以产生一个类的实例,并且提供了一个地方用来定义创建类的实例时都需要执行的初始化代码。它和类中的方法很类似,可以将构造器看作一个特殊的方法。
构造器和普通方法的区别:
①修饰符:可以有访问修饰符(public,protected,private),不同的是,构造器不可以有非访问性质的修饰(abstract,final,native,static或者synchronized)。
②返回值:方法可以返回任何类型的返回值或者没有返回值,构造器没有返回值也不需要void。
③命名:构造器和类使用相同的名字。

public class Food
{
    private String food_name;
    public Food(String name)
    {
        this.food_name=name;

    }
}

Food myDinner = new Food("pizza");

简单数据类型数组

简单数据类型数组的内存空间
Java在内存分配时会涉及以下区域:
寄存器:在程序中无法控制。
栈:存放基本类型和对象的引用,但对象本身不存放在栈中,而是存放在堆中。
堆:存放用new产生的数据。
静态域:存放在对象中用static定义的静态成员。
常量池:存放常量。
非RAM存储:硬盘等永久存储空间。

继承

继承:用extends进行类的继承,后面紧跟父类的类名。
在Java中,一个类只能从一个父类继承,而不能从多个类中继承。
在java.lang包中有一个Object类,这个类是所有类的顶级父类。

抽象类

包含抽象方法的类叫做抽象类,抽象类不能被实例化。
在类名前加abstract关键字,就可以将一个类定义为抽象类。在抽象类中定义抽象方法是在方法返回值类型前加上关键字abstract。抽象方法只需要声明,不需要实现。

public abstract class IconShape //抽象类
{
    public abstract double iconArea();//抽象方法
}

子类继承抽象类时,语法和继承普通父类相同。
子类必须覆盖所有抽象方法才能被实例化,否则这个子类还是抽象类。
在以下一个条件成立时,类必须定义为抽象类:
① 类中至少有一个抽象方法;
② 类继承了父类中的抽象方法,但是至少有一个抽象方法没有实现;
③ 类实现了某个接口,但没有全部实现接口中的方法。

接口

接口是方法声明和常量值定义的集合。在接口中,没有提供任何具体的实现。一个接口可以理解为:所有实现了该特定接口的类都应该长这样。
一个类可以实现多个接口。
定义接口不用class,用interface。接口中可以定义常量但是不能有变量。接口的成员属性都会被自动加上public、static和final,而对于接口中的方法,也会自动将它们设置为public。接口中的方法只需要声明,不需要方法体, 也不需要加上关键字abstract来将它声明为抽象方法。

public interface ScreenBrightness
{
    public int DEFAULT_BRIGHTNESS=10;
    //自动加上public static final
    void brightUp();
    void brightDown();
}

实现接口要用implements,一个类只能继承一个父类,并且可以同时实现一个或多个接口,多个接口之间用“,”来分隔开,通过接口可以模拟实现多继承。
一个实现了接口的类必须实现接口的所有方法,或者将没有实现的方法定义为抽象的方法,此时类也必须为抽象类。

public class MobileSet implements ScreenBrightness,Volume
//实现两个接口,ScreenBrightness和Volumn
{
 //实现的内容
}
多态

在Java中,对象变量是多态的,一个类型为Aclass的变量既可以指向类型为Aclass的对象,又可以指向Aclas的任何子类的对象。实际上多台的作用是消除类型之间的耦合关系。

如果一个引用类型变量声明为父类的类型,但实际引用的是子类的对象,那么该变量就不能在访问子类中添加的属性和方法。
综上,引用变量的声明类型和其实际引用对象的类型可能不一致。可以用instanceof操作符鉴别一个对象真正的类型。 它返回true或者false。
原本是子类类型的对象被声明为父类类型时,可以使用强制转换的方式回复其本来面目。

内部类

也称为嵌套类,是定义在一个类内部的类,可以是其他类的成员,也可以在一个语句块中定义。
一个内部类的对象能够方位创建它的对象的实现,包括私有数据。
对于同一个包中的其他类来说,内部类能够隐藏起来。
匿名内部类可以方便地用在回调方法中,典型应用时图形编程中的事件处理。
可以将一个内部类定义成一个静态内部类,只要在内部类定义前加static即可。

public class Outer
{
    private int a=5;
    public class Inner
    {
        private int i=1;
        public void innerMethod()
        {
            System.out.println("a="+a+",i="+i);
        }
    }
}
public void testTheInner()
{
    Inner i=new Inner();
    i.innerMethod();
}

必须注意:实例化内部类必须首先有一个外部类实例存在,然后通过外部类实例来实例化内部类。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值