Timer和ScheduledExecutorService是JDK内置的定时任务方案,而业内还有一个经典的定时任务的设计叫时间轮(Timing Wheel), Netty内部基于时间轮实现了一个HashedWheelTimer来优化百万量级I/O超时的检测,它是一个高性能,低消耗的数据结构,它适合用非准实时,延迟的短 […]
Timer和ScheduledExecutorService是JDK内置的定时任务方案,而业内还有一个经典的定时任务的设计叫时间轮(Timing Wheel), Netty内部基于时间轮实现了一个HashedWheelTimer来优化百万量级I/O超时的检测,它是一个高性能,低消耗的数据结构,它适合用非准实时,延迟的短 […]
序列化和反序列化 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 什么时候需要用到序列化和反序列化呢? 当我们只在本地 JVM 里运行下 Java 实例, 这个时候是不需要什么序列化和反序列化的, 但当我们需要将内存中的对象持久化到磁盘, 数据库中时, 当 […]
如果我们有一组类型相同的变量,例如,5位同学的成绩,可以这么写: public class Main { public static void main(String[] args) { // 5位同学的成绩: int n1 = 68; int n2 = 79; int n3 = 91; int n4 = 85; in […]
在Java中,字符和字符串是两个不同的类型。 字符类型 字符类型char是基本数据类型,它是character的缩写。一个char保存一个Unicode字符: char c1 = 'A'; char c2 = '中'; 因为Java在内存中总是使用Unicode表示字符,所以,一 […]
对于布尔类型boolean,永远只有true和false两个值。 布尔运算是一种关系运算,包括以下几类: 比较运算符:>,>=,<,<=,==,!= 与运算 && 或运算 || 非运算 ! 下面是一些示例: boolean isGreater = 5 > 3; // tru […]
NullPointException应该算是每一个码农都很熟悉的家伙了吧?谁的代码不曾抛过几个空指针异常呢... 比如:你写了段如下的代码: public void getCompanyFromEmployee() { Employee employee = getEmployee(); Company company […]
浮点数运算和整数运算相比,只能进行加减乘除这些数值计算,不能做位运算和移位运算。 在计算机中,浮点数虽然表示的范围大,但是,浮点数有个非常重要的特点,就是浮点数常常无法精确表示。 举个栗子: 浮点数0.1在计算机中就无法精确表示,因为十进制的0.1换算成二进制是一个无限循环小数,很显然,无论使用float还是doubl […]
Java的整数运算遵循四则运算规则,可以使用任意嵌套的小括号。四则运算规则和初等数学一致。例如: // 四则运算 public class Main { public static void main(String[] args) { int i = (100 + 200) * (99 - 88); // 3300 i […]
变量 什么是变量? 变量就是初中数学的代数的概念,例如一个简单的方程,x,y都是变量: y=x^2+1 在Java中,变量分为两种:基本类型的变量和引用类型的变量。 我们先讨论基本类型的变量。 在Java中,变量必须先定义后使用,在定义变量的时候,可以给它一个初始值。例如: int x = 1; 上述语句定义了一个整型 […]
我们先剖析一个完整的Java程序,它的基本结构是什么: /** * 可以用来自动创建文档的注释 */ public class Hello { public static void main(String[] args) { // 向屏幕输出文本: System.out.println("Hello, wor […]
我有一瓢酒,可以慰风尘。