Android基础笔记

Java基础
面向对象三个特征
封装 继承 多态

多态
定义 允许不同类的对象对同一消息做出响应
技术 动态绑定 执行期间判断所引用对象的实际类型 根据实际类型调用相应方法
作用 消除类型之间的耦合关系
条件 继承 重写 父类引用指向子类对象
好处 扩充 替换 接口 灵活 简化

接口意义
规范 扩展 回调

抽象类意义
为其它子类提供一个公共类型
封装子类中重复定义的内容
定义抽象方法 子类中有不同的实现但是定义是一致的

抽象类接口区别
默认方法 抽象类可以有默认方法实现 接口中没有
实现方式 抽象类extends 接口 implements
构造器 抽象类中可以有 接口没有
和正常类区别 接口不可实例化 接口是不同的类型
访问修饰符 接口默认public 其它不能
多继承 一个子类可以存在多个接口

Override和Overload区别
Override 重写 子类对父类同一方法的重新定义
Overload 重载 定义一个与已定义方法名称相同但签名不同的新方法

父类的静态方法能否被子类重写
不能 称为隐藏

内部类作用

switch能否用String做参数
Java7前 只支持byte short char int及对应封装类 Enum
Java7 支持String

九种基本数据类型
boolean Boolean
byte 1 Byte
short 2 Short
int 4 Integer
long 8 Long
float 4 Float
double 8 Double
char 2 Character
void Void

Java集合
Collection
AbstractList
Vector
ArrayList
AbstractSequentialList
LinkedList
Map
AbstractMap
HashMap
TreeMap
Dictionary
Hashtable
AbstractSet
HashSet
TreeSet
Vector
基于数组实现
很多方法加入synchronized同步语句 保证线程安全
允许元素为null
现在基本不使用

ArrayList
基于数组实现
非线程安全 只能单线程环境使用
允许元素为null
查找效率高 插入删除需要移动大量元素 效率低

LinkedList
基于双向循环链表实现 可做链表 栈 队列 双端队列
非线程安全 只能单线程环境使用
允许元素为null
插入删除效率高 查找效率低

HashMap
基于哈希表实现 每一个元素是一个key-value 内部通过单链表解决冲突
非线程安全
key-value都允许为空

TreeMap
基于红黑树实现 特殊二叉排序树
key不能为null
查询 插入 删除都没有HashMap效率高 一般需对key排序才用

Hashtable
基于哈希表实现 1.0引入
线程安全
key-value都不允许为空

HashSet
通过Map中的HashMap实现
TreeSet
通过Map中的TreeMap实现

JVM
四种引用
强引用 new内存空间不足JVM不会回收
软引用 内存空间不足 JVM会回收
弱引用 JVM一旦发现 无论当前内存空间是否充足都会回收
虚引用 它指向的对象回收时 它会加入到引用队列中 由此可知它指向的对象何时销毁

分区
线程共享
Java堆 存放所有对象实例和数组
方法区 存放已被虚拟机加载的类信息 常量 静态变量 即时编译器编译后的代码
线程私有
程序计数器 当前线程所执行字节码的行号指示器
虚拟机栈 Java方法执行的内存模型
每个方法被执行都会创建一个栈帧
栈帧用于存储局部变量表 操作数栈 动态链接 方法返回地址 一些额外附加信息
本地方法栈 与虚拟机栈类似 为native方法服务

分区例子
Object obj = new Object()
obj作为引用类型保存在虚拟机栈中
该引用的实例化对象保存Java堆中
该对象类型数据的地址信息保存在方法区

内存泄漏
分配出去的内存没有回收回来 失去了对该内存区域的控制 造成了资源浪费
内存溢出
程序所需要的内存超出了系统所能分配内存的上限

垃圾回收判断方法
引用计数
对象有引用计数器加1 引用失效减1 为0的对象不可被使用
很难解决对象循环引用的问题

引用链
通过一系列GC Roots的对象作为起始点
从这些节点向下搜索所走过的路径称为引用链
当一个对象到GC Roots无任何引用链相连 则证明该对象不可用

垃圾回收算法
标记清除法
标记所有需要回收的对象 标记完成后统一回收
标记和回收效率不高 产生大量内存碎片

复制算法
将内存划分为大小相等两块 每次只使用其中一块 当一块使用完了
将还存活的对象复制到另一块上面 已使用的一次性清理掉

标记整理 适合老年代
标记所有需要回收对象 让所有存活对象都向一端移动
然后直接清理掉边界以外的内存

时间: 2024-08-10 02:10:54

Android基础笔记的相关文章

Java for Android 基础笔记-数据类型

Java的基本数据类型 布尔类型 boolean true | false java是一个强类型的语言,与JS中的布尔类型的自由转换相比,JAVA的Boolean类型只有两种true和false,JS中相应的只可以自行转换. 字符类型 char 可以存储一个汉字,和其他语言非常类似不再赘述. 整型 byte, 占用一个字节 -128`-127 short 2字节 -2^15~2^15-1 int 4字节 -2^31~2^31-1 long 8字节  -2^63~2^63-1 整型常量默认为int

Android基础笔记(十七)- 多媒体编程

MediaPlayer播放音频的基本使用 音乐播放器的完善 视频播放SurfaceView 视频播放VideoView vitamio框架 如何调用照相机和录像机 MediaPlayer播放音频的基本使用 MediaPlayer播放音频的基本使用步骤: ①创建一个MediaPlayer实例 ②设置播放的数据格式 ③设置数据源 ④准备播放 ⑤开始播放 整体的示例代码很简单: // 1. 创建一个音频播放器实例 final MediaPlayer player = new MediaPlayer()

Android基础笔记(十八)- Fragment

博客的感悟终点-开始 什么是Fragment 添加fragment到Activity的两种方式 Fragment的生命周期 Fragment的向下兼容 Fragment之间的通信 博客的感悟,终点-开始 这个是基础的最后一篇博客了,学习了很多,也有很多感触. 就在这里大致总结一下. 坚持往往很难,完美的坚持下去更难.这是写这十八篇博客的感悟. 时间流失的很快,总是感觉时间不够用.慢慢的就会让自己博客的质量下降.今天反思了一下,我这样不就是在制造"破窗户"吗?(破窗户理论不知道的可以去看

Android基础笔记(一)

1G - 5G的介绍 Android的操作系统的介绍 Android版本 Android系统的架构 两种虚拟机的不同 ART模式 模拟器的简介 SDK目录 Android工程目录结构 打包的过程 ADB常用指令 案例电话拨号器 四种点击事件 Android的常用布局 Andriod中的单位 1G - 5G的介绍 1st - Generation 代表作是:大哥大,只能进行语音通信,不能够发短信.更不能上网. 2nd - Generation 代表作是:小灵通,可以收发短信.可以上网,但是速度几十

Android基础笔记(三)

SQLite Android下数据库的创建 SQLiteDatabase简介 Android下数据库的第一种增删改查方式 Android下数据库的第二种增删改查方式 Android下数据库的事务 SQLite SQLite,是一款轻量级的数据库,是遵循ACID(原子性.一致性.隔离性.持久性)的关联式数据库管理系统,多用于嵌入式开发中. Android平台中嵌入了一个关系型数据库SQLite,和其他数据库不同的是SQLite存储数据时不区分类型. 例如一个字段声明为Integer类型,我们也可以

Android基础笔记(十一)- Service基础和注意事项以及Activity与Service的通信

Service的基本概念 为什么要有Service Service的基本用法 电话窃听器的小案例 Service和Activity通信 Service和Thread的关系 向光明而行! Service的基本概念 Service是Android的四大组件之一,在每一个应用程序中都扮演者非常重要的角色. 它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务.必要的时候,我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态. 既然都是被用于处理耗时的操作,那么我们什么

Android基础笔记(九)- 广播

广播的概念 案例-监听短信到来并解析短信内容 案例-拦截外拨电话并设置区号 案例-SD卡状态监听 介绍一些常用的广播 发送自定义广播 有序广播和无序广播 启程!!! 广播的概念 广播的种类: 无序广播(Normal broadcasts),类似于日常使用的WIFI,由一个广播者发出信号,可以有很多接收者同时接收,并且信号无法被中断和篡改: 有序广播(Ordered broadcasts),可以有最终的接收者,并存在信号接收的优先级: 定义广播接收者的步骤: ①定义一个类,继承BroadcastR

Android基础笔记(十五)- 图形、解决大图OOM、绘画工具的使用和练习

计算机图形表示的原理 加载大图出现OOM 缩放加载大的图片资源 创建一个原图的副本 图形处理的常用的API 傻瓜版美图秀秀 画画版 计算机图形表示的原理 首先要明确的一点是,一张图片的在内存中存储所需的大小和图片在屏幕设备上完整显示所需的内存大小是有非常大的差异的. 如下图,从中我们可以清晰的看出这张图片,在硬盘上所占的存储空间是303KB,也就是310272个字节.但是如果想把这样图片完整的展示到屏幕设备上,所需的内存空间远远不止这些. 有这样一个计算公式:图片展示所需内存 = 图片的宽度像素

Android基础笔记(十四)- 内容提供者读取联系人

利用内容提供者读取联系人 利用内容提供者插入联系人 内容观察者的原理 利用内容观察者监听系统应用数据库或者自己应用数据库的变化 利用内容提供者读取联系人 读取联系人相对于读取短信来说就复杂很多了,我们一步一步来吧. 先看看一下联系人的数据库,是位于什么地方! 既然很复杂,我们就一步步分析吧,我们把contacts2.db导出到电脑中,并使用SQLite数据库软件打开.你可以看到一大堆的表和视图,当然我们使用到的也只有三张.分别是raw_contacts.data.mimetypes分别存储着联系

Android基础笔记(十)- 帧动画、补间动画详解、对话框

帧动画 补间动画Tween Animation 对话框以及面试中的注意点 帧动画 帧动画很简单,我们首先看一下Google官方解释This is a traditional animation in the sense that it is created with a sequence of different images. 意思表达的很明了,一个传统的动画是由一组不同的图片组成的.帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果. 创建一帧动画分为一下几步(支持4