随笔分类 - Java基础知识
摘要:最近看到一句话:内部锁synchronized不会造成锁泄漏(Lock Leak)。 锁泄漏是指一个线程获得某个锁以后,由于程序的错误、缺陷致使该锁一直没法被释放而导致其他线程一直无法获得该锁的现象。(摘自《Java多线程编程实战指南(核心篇)》--黄文海) 很好奇JVM是怎么保证的。 我想,Jav
阅读全文
摘要:1. Java内存模型(Java Memory Model, JMM) Java的内存模型如下,所有变量都存储在主内存中,每个线程都有自己的工作内存。 共享变量:如果一个变量在多个线程中都使用到了,那么这个变量就是这几个线程的共享变量。 可见性:一个线程对共享变量的修改,能够及时地到主内存并且让其他
阅读全文
摘要:最近做CodeReview,发现了一位已经离职同事写的代码,大致如下,令人费解。(其中map是Map<String, Object>) 先不说这样写好不好,引起我兴趣的是,map这个变量,已经在上文判断是否为空指针了,map.get("count")也不会抛出空指针异常。为什么这里还要判断? 经过一
阅读全文
摘要:标题起得略拗口,大概意思就是说在一个Java类中,域和构造方法的调用顺序。 1. 没有继承的情况 单独一个类的场景下,初始化顺序为依次为 静态数据,继承的基类的构造函数,成员变量,被调用的构造函数。 其中静态数据只会初始化一次。 输出: 2. 继承的情况 稍微修改一下代码,添加两个基类,让Son继承
阅读全文
摘要:1. 动态绑定 将一个方法调用同一个方法主体关联起来被称作绑定。 在运行时根据对象的类型进行绑定,叫做后期绑定或运行时绑定。Java中除了static方法和final 例如,下面定义了一个Shape类型的变量,这是个Shape引用,由于后期绑定,赋予其子类Circle的一个对象引用,最终调用的是Ci
阅读全文
摘要:使用Jackson的ObjectMapper对象的readValue和writeValueAsString方法可以进行转换。 对于简单基本类型或String类型的对象,使用上述方法可以满足。 但是如果要转换复杂类型Collection如 List<YourBean>,那么就需要先反序列化复杂类型为泛
阅读全文