摘要: 分派(Dispatch)可能是静态也可能是动态的,根据分派依据的宗量数可分为单分派和多分派。这两种分派方式的两两组合就构成了静态单分派,静态多分派,动态单分派,动态多分派这4种组合。本章讲静态分派。 1.静态分派 所有依赖静态类型来定位方法执行版本的分派动作称为静态分派。静态分派的典型应用是方法重载 阅读全文
posted @ 2017-04-30 11:36 kingsleylam 阅读(659) 评论(0) 推荐(0) 编辑
摘要: 方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还没有涉及到方法内部的具体运行过程。在程序运行时,进行方法调用是最普遍最频繁的操作,但Class文件的编译过程不包含传统编译中的连接步骤,一切方法调用在Class文件里存储的都只是符号引用,而不是方法 阅读全文
posted @ 2017-04-30 10:31 kingsleylam 阅读(812) 评论(0) 推荐(0) 编辑
摘要: 初始化是类加载过程的最后一步,但由于比较重要,故放在前面先讲。 在前面的连接(准确来说是准备)阶段,类的变量已经被赋予默认值(如int类型为0,布尔类型为false,引用类型为null等)。而在初始化阶段,则根据程序员通过程序制定的主观计划去初始化类变量和其他资源。或者可以从另一个角度来表达:初始化 阅读全文
posted @ 2017-04-11 23:32 kingsleylam 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 1. 类的生命周期 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading),验证(Verification 阅读全文
posted @ 2017-04-11 00:13 kingsleylam 阅读(416) 评论(0) 推荐(0) 编辑
摘要: 备忘录模式是在不破坏封装的原则下,捕获一个对象的状态,在对象之外保存这个状态,在必要时恢复到这个状态。 应用场景主要是将状态恢复到之前,例如Ctrl+Z的恢复,游戏从存档重新开始,JDBC事务控制。 备忘录模式的主要角色有三个: Originator,发起人,职责是发起一次存档,将自身的状态存放到M 阅读全文
posted @ 2017-04-08 17:43 kingsleylam 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 在实际的开发过程中,我们经常会遇到对于不同的对象采用不同的算法或者策略的场景。 一个真实的例子是这样的: 假设现在要将一个Student对象存入数据库。在逻辑层,需要对对象的字段进行合法性判断,比如ID是否超过某个阈值,名字长度是否超长。 1. if else分支方法 最常见的做法,是将参数的类型进 阅读全文
posted @ 2017-04-05 22:35 kingsleylam 阅读(572) 评论(0) 推荐(0) 编辑
摘要: 正则表达式(Regular Expression, 简称RegEx)是一些用来匹配和处理文本的字符串,它是用正则表达式语言创建的,这种语言的用途主要是为了检索和替换某些文本。 本文只是《正则表达式必知必会》和传说中的三十分钟学会正则表达式的一个小总结,因此,不打算从头开始介绍正则表达式,只记录一些知 阅读全文
posted @ 2017-01-08 20:53 kingsleylam 阅读(1412) 评论(2) 推荐(0) 编辑
摘要: 在Effective Java中看到的,试了一下,有点意思,考查的知识点是volatile关键字。 下面这段代码,预期是打印it takes xxxx miliseconds. 。但实际上,陷入了死循环。 学习过Java内存模型就会知道,这是因为stopRequested这个域,在主线程和backg 阅读全文
posted @ 2016-11-19 23:45 kingsleylam 阅读(633) 评论(0) 推荐(0) 编辑
摘要: 1.什么是延迟初始化 延迟初始化(lazy initialization,即懒加载)是延迟到需要域的值时才将它初始化的行为。如果永远不需要这个值,这个域就永远不会被初始化。这种方法既静态域,也适用于实例域。 最好建议“除非绝对必要,否则就不要这么做”。 2.延迟初始化线程安全的一个策略:同步 延迟初 阅读全文
posted @ 2016-11-19 23:01 kingsleylam 阅读(1583) 评论(0) 推荐(2) 编辑
摘要: 1. 什么时候需要重写Object.equals方法 如果类具有自己特有的“逻辑相等”概念(不同于对象等同的概念),而且超类还没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法。 这通常属于“值类(value class)”的情形。值类仅仅是一个表示值的类,例如Integer或 阅读全文
posted @ 2016-11-16 22:29 kingsleylam 阅读(1538) 评论(0) 推荐(0) 编辑
摘要: 1. Java内存模型(Java Memory Model, JMM) Java的内存模型如下,所有变量都存储在主内存中,每个线程都有自己的工作内存。 共享变量:如果一个变量在多个线程中都使用到了,那么这个变量就是这几个线程的共享变量。 可见性:一个线程对共享变量的修改,能够及时地到主内存并且让其他 阅读全文
posted @ 2016-10-30 23:34 kingsleylam 阅读(2718) 评论(0) 推荐(1) 编辑
摘要: 建造者模式和工厂模式有点类似。所以建议复习一下工厂模式的文章 工厂模式小结 1. 适用场景 建造者模式,跟工厂模式一样,对客户端屏蔽了产品实现的细节,对外只呈现一个最终的产品。 与工厂模式不太一样的是: 1). 该产品相对于工厂模式的产品更为复杂,通常是由好几个模块组装而成; 2). 模块的生成顺序 阅读全文
posted @ 2016-10-30 08:59 kingsleylam 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 最近做CodeReview,发现了一位已经离职同事写的代码,大致如下,令人费解。(其中map是Map<String, Object>) 先不说这样写好不好,引起我兴趣的是,map这个变量,已经在上文判断是否为空指针了,map.get("count")也不会抛出空指针异常。为什么这里还要判断? 经过一 阅读全文
posted @ 2016-10-29 08:17 kingsleylam 阅读(1792) 评论(1) 推荐(0) 编辑
摘要: 工厂模式是23种设计模式中比较基础的一种,其目的是隐藏了创建对象的细节,客户端与具体的实现类解耦,令客户端能够面向接口编程。 从简单到复杂的场景,一共有三种模式。下面拿最常见的球衣作为例子讲解一下,如有不正确的地方请指正,图片和部分语言摘自网络,侵删。 假设现在有一个球衣的抽象类,有两个实现类,一个 阅读全文
posted @ 2016-07-01 00:33 kingsleylam 阅读(824) 评论(0) 推荐(1) 编辑
摘要: 1. synchronized同步方法 1) synchronized修饰方法,表示方法是同步的,当某线程进入并拿到当前整个对象的锁时 a. 其他synchronized方法排队等锁 b. 非synchronized方法可异步执行 示例代码(折叠) 1 package com.khlin.threa 阅读全文
posted @ 2016-06-09 16:34 kingsleylam 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 标题起得略拗口,大概意思就是说在一个Java类中,域和构造方法的调用顺序。 1. 没有继承的情况 单独一个类的场景下,初始化顺序为依次为 静态数据,继承的基类的构造函数,成员变量,被调用的构造函数。 其中静态数据只会初始化一次。 输出: 2. 继承的情况 稍微修改一下代码,添加两个基类,让Son继承 阅读全文
posted @ 2016-05-27 22:27 kingsleylam 阅读(13116) 评论(0) 推荐(0) 编辑
摘要: 1. 动态绑定 将一个方法调用同一个方法主体关联起来被称作绑定。 在运行时根据对象的类型进行绑定,叫做后期绑定或运行时绑定。Java中除了static方法和final 例如,下面定义了一个Shape类型的变量,这是个Shape引用,由于后期绑定,赋予其子类Circle的一个对象引用,最终调用的是Ci 阅读全文
posted @ 2016-05-27 20:08 kingsleylam 阅读(479) 评论(0) 推荐(0) 编辑
摘要: 使用Jackson的ObjectMapper对象的readValue和writeValueAsString方法可以进行转换。 对于简单基本类型或String类型的对象,使用上述方法可以满足。 但是如果要转换复杂类型Collection如 List<YourBean>,那么就需要先反序列化复杂类型为泛 阅读全文
posted @ 2016-04-30 12:58 kingsleylam 阅读(468) 评论(0) 推荐(0) 编辑
摘要: 1. Workbook维护一个调色板,可以自定义设置56种颜色,下标从8到63. 用到颜色的地方,可以输入下标获取颜色,如CellStyle的setFillForegroundColor(); 2.CreateCellStyle 创建之后,会把CellStyle放入到workbook维护的队列中,最 阅读全文
posted @ 2016-04-06 22:06 kingsleylam 阅读(4618) 评论(0) 推荐(0) 编辑
摘要: 最近在工作中遇到这么一个场景:需要根据配置文件,动态地生成一个Excel模板。模板有首页,内容页,链接页等几个页签。 工头,哦不,老大指导可以使用装饰器模式,于是我就学习了一下,就有这篇文章。 初涉设计模式,请大牛们鞭挞。 1. 什么是装饰器模式 装饰模式能够实现动态的为对象添加功能,是从一个对象外 阅读全文
posted @ 2016-03-26 23:46 kingsleylam 阅读(2881) 评论(0) 推荐(1) 编辑