(第四节)分析你的第一个 Android 程序 2
0 前言
今天我们会继续分析第一节生成的程序,另外由于马上就要分析真正的代码了,得学不少基础知识,所以还会讲一下 Java 的流程控制中的 if 语句。
1 分析 app 目录
在第三讲分析了我们第一个 Android 应用程序的外部结构,发现了除了 app 目录外,别的似乎都是自动生成的。明显,app 目录内大有玄机。先来整体观察一下,主要包含【 build , libs , androidTest , java , res , AndroidManifest.xml , test , .gitignore , app.iml , build.gradle , prpguard-rules.pro 】共 11 个文件及目录。下面我们逐一分析。
1.1 build
这个文件夹外部也有,都是编译产生的缓存文件夹,我们无需过分关心也不要手动去修改。只是在发生编译器错误时把他删掉。
1.2 libs
这个文件夹是用来放置第三方 Jar 文件的。至于什么是 jar 包,以你现在的知识储备可能还理解不了,等你需要用到它时自然就知道这个是干什么的了。
1.3 androidTest
这个文件夹是用来编写自动化测试用例的,可以对项目进行一些自动化测试。我们暂时不会涉及,这个文件夹无需关心。
1.4 Java
我们的 Java 代码就放置在这个文件夹里,我们现在学的 Java 就是在这个文件夹下写。不信你看我们刚刚创建的 MainActivity 文件就在这个文件夹里。
1.5 res
这个是资源文件夹,项目里所有的图片,布局,字符串等资源都是放在这里的。里面的结构也挺复杂的,我们单独开一节来讲。
1.6 AndroidManifest.xml
这东西叫清单文件,是整个项目的主配置文件,程序里定义的四大组件,权限等都要在这里注册。他很重要也会单独开一节来讲。
Android 系统有四大组件,分别是 Activity (活动), Service(服务), Broadcast Receiver(广播接收器)和 Content Provider(内容提供器)。无论多么复杂的程序都是由四大组件构成的。一个程序你能看到的界面,都是活动;退出了仍然在后台运行的,都是活动;能被一些情景,像电话,网络状态变化等唤醒的都是广播接收器;能跨程序共享数据的,都是内容提供器。
1.7 test
这里是用来编写 Unit Test 的,另一种自动化测试的方式,我i们暂时不学习他。
1.8 .gitignore
这个文件外层也有,作用类似,用于将 app 内的制定文件或目录排除在版本控制之外。什么?你问什么是版本控制? 陈独秀同志你的凳子上有钉子吗,等我给你买个橘子#(手动滑稽)。关于版本控制,我们很久很久之后才会讲,我们先分析最主要的。
1.9 app.iml
IntelliJ IDEA 项目自动生成的文件,Android Studio 是基于 IntelliJ IDEA 社区版开发的,所以也有这个文件。我们不需要去关心或修改这个文件。
1.10 build.gradle
这个是 app 模块的构建脚本,制定了很多的构建设置。我会单独开一节来讲。
1.11 prpguard-rules.pro
这个文件用于控制混淆规则。
你可以试着反编译一些程序,会发现里面的明明都相当奇怪,难以阅读。这就是混淆的效果,主要是为了防止反向分析和破解
2 Java 的流程控制
2.1 顺序结构
任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是程序至上而下执行,中间没有任何的判断和跳转。观察如下代码,这是标准的顺序结构
System.out.println("第一条语句");
System.out.println("第二条语句");
System.out.println("这是顺序结构,从上之下执行,没有任何的跳转");
2.2 分支结构
Java 提供了两种常见的分支结构:if 语句和 switch 语句。其中 if 语句用布尔表达式或布尔值作为分支条件进行分支控制;而 switch 语句这是用于对多个整型值进行匹配,从而实现分支控制。
2.2.1 if 条件语句
if 语句使用布尔表达式或布尔值作为条件来控制分支。if 语句有 3 种形式,观察三个例子:
int a = 1;
if(a < 3){
System.out.println("a 小于 3");
}
//输出结果:a 小于 3
int a = 1;
if(a < 3){
System.out.println("a 小于 3");
} else {
System.out.println("a 大于或等于 3");
}
//输出结果:a 小于 3
int a = 1;
if(a < 3){
System.out.println("a 小于 3");
} else if(a = 3){
System.out.println("a 等于 3");
} else if(a > 3){
System.out.println("a 大于 4");
}
//可以有无数的 else if 语句
挺简单的吧,先写个 if 然后加个括号,括号里是一个判断,括号里的表达式是真就执行条件后的花括号里的,是假就执行else后面的的语句。else 后面没有语句时, else 省略;else 后是几行代码,就加个花括号在里面写代码;else 后还要继续判断的话就再加一个 if。结合例子多看几遍,相信你会理解的。
比较运算符:
这个配合代码比较好理解,
int a = 3;
if(a != 0){ //新符号 != 不等于
System.out.println("a 不等于 3");
} else if(a >= 1) { //新符号 >= 大于等于,同理还有 <=
System.out.println("a 大于等于 1");
}
逻辑运算符:
- &&:与,前后两个操作数必须都是 true 才返回 true ,否则返回 false
- &:不短路与,作用与&&相同,但是不短路
- || :或,前后两个操作数,只要有一个为 true 就返回 true ,两个都是 false 才返回 false
- | :不短路或,作用与||相同,但是不短路
- ! :只需要一个操作数。如果操作数为 true ,就返回 false ;如果操作数为 false ,就返回 true;就是反过来
- ^ :异或,当两个不同时才返回 true ,否则返回 false
短路:我听到了你内心的呐喊,这特么是物理?举个例子,像用 && 连接两个条件,两个都是 true 才返回true ,换句话说,第一个是 false 就不判断第二个了,因为已经不满足条件了。这个弯道超车跳过第二个判断就叫短路。不短路就是即使第一个已经不满足条件了,仍然判断第二个。什么?你还不明白?那我就这么告诉你,你就都用 && 和 || 就完事了,等你遇到那种还需要再判断的时候,你自然就想起来了
我知道你蒙了,来看代码,其实挺容易的
int a = 2;
if(a > 1 && a <3){//条件是同时满足 a > 1 和 a <3 两个条件
System.out.println("a 大于 1 且小于 3");
}
if(a = 0 || a > 0){//a 等于零和大于零这两个条件满足其一即可,等效于 a >= 0
System.out.println("a 等于零或大于 0")
}
if(!a > 0){//条件是不满足 a 大于 0
Syetem.out,println("a 不大于 0")
}
//其余的用的时候比较少,不演示了,不明白的可以留言或百度,都是很基础的一查就有一大堆。
3 总结
今天我们学会了 Android 项目中 app 文件夹下的结构。学会了最最最常用的结构 if 语句,还学了比较运算符和逻辑运算符。虽然很累但是收获满满,加油,你是最棒的!!!
欢迎关注我的公众号,
每日一文,轻轻松松带你入门 Android 开发
2020/5/24 注:
这是我 2018 年高中毕业的假期写的,当时并没有自己搭建博客,近期我给这一系列的文章都放到我自己的博客上。
当时写这个系列文章的想法就是扎实下基础,然后能帮到更多的人就更好了,但是大学开学之后就开始了新生活,没有大块的时间去编撰,系列文章也没有再更新过。但是我其实并不想放弃这个系列,那就,有缘再见吧,拜拜ヾ(•ω•`)o