首页 > 代码库 > Android基础笔记

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无任何引用链相连 则证明该对象不可用

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

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

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

Android基础笔记