java中构造方法、实例初始化、静态初始化执行顺序探索

除了构造方法,java中比较有特点的、可以用来初始化的还有实例初始化块和静态初始化
实例初始化块:在类中用{}括起来的语句,在每个对象实例创建时都会被执行:

class instance {
	{
		 //实例初始化块
	} 
}

静态初始化块:在类中static{}中的语句,仅在这个类第一次被用到时被执行,通常用来初始化静态变量

class instance {
	static{
		 //静态初始化块
	} 
}

阅读更多

4+

浮点数的机器表示

上图为浮点数在机器中表示的结构,分为三部分:

若浮点数表示为(-1)s M 2E的形式,则

s(符号位,0代表正,1代表负)

exp(阶码) = E +bias  (bias为偏移量:float 取127,double取1023)

frac(尾数域,M是一个位于区间[1.0,2.0)内的小数,而frac隐含了M的整数部分1,只保留小数部分)

阅读更多

4+

java实现精确的浮点数运算

众所周知小数在机器里通常表示为二进制浮点数的形式,而浮点数的精度是有限的:单精度float类型的尾数域(表示数值的部分)是23位,而双精度double类型的尾数域也只有52位(详细参见 浮点数的机器表示
于是,当一个十进制小数不能转换为有限位的二进制数时,这个小数就不能在机器里精确表示
例如0.1在机器里就不能精确表示,其尾数域表现为0011循环:

阅读更多

4+

java子类继承方法和接口方法重名/冲突(下)

在上篇文章java子类继承方法和接口方法重名/冲突(上)中提到,只要从父类继承的方法权限是public,就能覆盖接口的同名方法。

然而还有一种情况会让人生疑:jdk1.8后,接口的方法也能提供默认实现,那么如果从父类方法不是抽象方法,接口的同名方法也提供了默认实现,那么子类的方法是否会冲突,或是否需要重写?

阅读更多

5+