十二月份复习部分重要知识点总结
2018-01-01 15:06
316 查看
十二月份复习部分重要知识点总结
kotlin 中data class只做数据类,不要有封装其他逻辑操作。“null”也可以以有 toString()。Java 内部类的final字段,从反编译结果可知本质上是为了杜绝数据的不一致性。因为传递的实际上是拷贝而不是值或对象本身,如同方法传参无法在方法里面改变原来的值或者对象的引用。如果不为final,在内部类中看似可以成功改变外部的值或引用,但实际上是没有的,为了防止出现这种情况出现,定位final,实际上编译后会生成一个有构造方法的类,传入的是局部方法里面的值或引用(final修饰),还有外部对象的引用。跟方法传参一样,修改传进来的并不会影响原有的值。jdk 1.8以后可以不用在为final,但是原理还是一样的,只不过是jvm修饰。
看一个例子:证明传递给类的引用和方法一样,都只是个名字相同,却分属不同类或者方法的副本,改变它不会影响原来,不管是内部类还是方法,都是一样的道理。
public class TestClass { public static void main(String [] args) { A a = new A(); System.out.println("第一个A:"+a.getMsg()); B b = new B(a); System.out.println("第二个A:"+b.getMsg()); System.out.println("第一个A是否被修改:"+a.getMsg()); } } class A{ String msg ="AAA"; String getMsg() { return msg; } void setMsg(String m) { this.msg =m; } } class B{ A aa; public B(A a) { a = new A(); a.setMsg("Anthor A"); aa = a; } String msg ="BBB"; String getMsg() { return msg+aa.getMsg(); } void setMsg(String m) { this.msg =m; } } 输出第一个A:AAA 第二个A:BBBAnthor A 第一个A是否被修改:AAA
Java ThreadLocal对象。使用该类可以在不同线程中引用同一个对象,但却可以有不同的数据存储。通过 get() set()方法。原因是每个线程内部都有一个ThreadLocalMap对象(不是Map,里面维护有一个Entry[],容量为16,名字为table[]),调用set()时,先获得当前线程,再拿到map,如果为空,就实例化map,传入当前sThreadLocal对象,产生特定的数组索引i,然后把sThreadLocal当作key,和value一起放入entry中,再放到特定的数组中去。调用get()时同理通过sThreadLocal获得放入的value。如果没有set()返回null。也就是说一个线程里面可以放16个与不同ThreadLocal对象关联的值。而在Android,不是Map,而是localValues对象,这个对象里面的是一个Object数组,也叫table[],它的储存是在特定索引存入threadLocal,然后在他的下一个索引存值。
在Android中,Looper.prepare()获得Looper实例,Looper里面持有thread和messageQueue字段,初始化时赋值和实例化。Handler里面持有Looper,实例化时传入赋值或者通过sThreaLocal对象获取存储在本线程的Looper,如果没有,则抛出异常。就是说使用子线程handler前必须传入或初始化Looper对象,使其关联当前线程。Message里面还持有没有暴露的target(Handler)和callback(Runable)引用,消息发送之后最终都调用sentMessageAtTime(),在调用消息队列的分发消息方法到队列,再取出根据target处理。更多信息查看相关源码。
RecyclerView有新增SnapHelper抽象类,有两个实现类可以实现类似ViewPager的效果。LinearSnapHelper和PageSnapHelper。使用代码类似ItemTouchHelper简单。
Camer类相机的编程和基础使用。自定义一个SurfaceView实现SurfaceHolder接口,PreViewCallbak接口。在Activity里面获取相机实例,传入SurfaceView,及时释放camera(先移除所有接口在移除View,最后释放。在View的Surface创建监听里面初始化相机参数Parameter之后设置camera显示到holder后startPreview。还可以视情况设置拍照监听和面部检测监听)。
-Java多线程并发的生产者消费者问题。为了避免生产者和消费者的不同步而导致的异常,需要对共享对象(也就是生产者消费者之间的缓冲池)加锁,双方调用while()在缓存池不为空或者不为满从缓存池中不断取出或者放入数据 直到条件不成立,调用shareObject.wait(),wait()之前调用shareObject.notifty()唤醒其他线程。注意总是使用whlie()而不是if()。
Java运行时数据区分为方法区(含常量池)、程序计数器、Java堆、Java栈(Native Stack和JVM Stack)其中方法区和堆Heap是线程共享的,而其他则是线程独立的。每一个线程每个方法的调用都是出栈入栈操作,当动态扩展的栈超过了最大深度则会StackOverflow,如递归次数过多(尾递归避免),当扩展栈时内存不足则会OOM。
Glide相关用法,详看郭霖博客。http://blog.csdn.net/guolin_blog/article/details/78582548。
GPUImage大致用法。gpuImage.setBitmap() gpuImage.setFilter() gpuImage.getBitmapWithFilterApplied()。混合滤镜使用GPUImageGroupFilters 和 updateFilters()再getBitmap()。
暂时先寄到这里吧。 = =
相关文章推荐
- java面试部分知识点总结
- 黑马程序员--网络通信UDP编程的总结及部分知识点查询
- OOAD面向对象分析与设计复习知识点总结
- OC基础学习重要小知识点总结
- Android 消息循环机制的重要问题和知识点总结
- 计算机网络第三章知识点复习总结
- 知识点总结: Java 面试宝典 2013版(超长版) - Java 基础部分
- 【前端GUI】——网站设计的重要知识点总结&思维导图(一)
- Struts2重要知识点总结
- HTML总结 HTML详细介绍重要知识点
- IBM主机系统与和操作系统导论期末复习知识点总结
- 2016年初中数学知识点中考总复习总结归纳
- 计算机网络重要知识点总结 面试必备
- STL + c++ + 模板 + 重要思维 + 基础算法+ 经典算法 + 经典实例 + 编程总结+ 心得+ 入门必会 + 知识点汇总。+string +dfs +bfs等重要算法
- CSS3主要知识点复习总结+HTML5新增标签
- 2011东软校园招聘笔试题部分知识点总结——语言部分(JAVA)
- 计算机网络知识点总结-2009年针对网工的复习资料
- 浪潮面试总结——知识点部分
- c# winform项目用到的部分知识点总结
- css重要知识点总结(1)