记录在初学Android开发时遇到的问题以及一些知识点,方便自己查阅.

adb相关
  1. 记得将adb所在目录添加到Path中;
  2. adb是一个C/S模式的程序。client和server运行在开发机器上,daemon运行在emulator设备上。
  3. adb常用命令: adb pull , adb push , adb install -r **.apk
阅读全文 »

类从被加载到虚拟机内存中开始到从内存中卸载,主要的生命周期有:加载、验证、准备、解析、初始化、使用和卸载这七个阶段。

加载时机
  • 加载
    Java虚拟机没有进行强制约束,可由具体实现自己把握
  • 初始化
    Java虚拟机严格规定了有且只有五种情形必须立即对类进行初始化:
    (1)遇到new,getstatic,putstatic,invokestatic这4条指令时,如果类没有进行初始化则进行初始化
    (2)使用reflect包进行反射调用时,如果类没有初始化则进行初始化
    (3)如果类初始化时发现父类还没有过初始化,则需要先触发父类初始化
    (4)虚拟机启动时,用户制定一个要执行的类,虚拟机先初始化这个主类
    (5)当使用JDK1.7动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getStatic,REF_putStatic,REF_invokeStatic方法句柄,并且这个方法句柄所对应的类没有进行过初始化,则需要先触发其初始化。
    
    这5种行为称为对一个类进行主动引用,其余称为被动引用。被动引用不会引发类的初始化。

阅读全文 »

Java是一门面向对象语言。程序中对象的创建(eg. 克隆,反序列化)非常常见。在语言层面上创建对象通常仅仅通过一个new关键字而已,而在虚拟机中,对象创建又是怎样的呢?

主要过程有三个部分:

  • 对象的创建
  • 对象的内存布局
  • 对象的访问定位
阅读全文 »

摘自Core Java
Java语言规范要求equals方法具有下面的特性:

  • 自反性:对应任何非空引用x, x.equals(x)返回true
  • 对称性:对应任何引用x和y,当且仅当y.equals(x)返回true, x.equals(y)才应该返回true
  • 传递性:对于任何引用x、y、和z,如果x.equals(y)返回true,y.equals(z)返回true, x.equals(z)也应该返回true
  • 一致性: 如果x和y引用的对象没有发生变化,返回调用x.equals(y)都一样返回同样的结果
  • 对应任何非空x, x.equals(null)应该返回false
阅读全文 »