Java核心技术学习笔记(一)

1.浮点数值的计算遵循IEEE754规范,有三种用于表示溢出和出错情况的情况的浮点数值:正无穷大,负无穷大,NaN(不是一个数字)。

例如,一个正整数除以0的结果为正无穷大,计算0/0或者负数的平方根结果为NaN

常量Double.POSITIVE_INFINITY,Double.NEGATIVE_INFINITY和Double.NaN分别表示这三个值,但在实际应用中很少用到。

检测一个特定值是否等于Double.NaN,应该使用Double.isNaN(X),而不是x == Double.NaN


2.浮点数值不适用与禁止出现舍入误差的金融计算中,二进制系统中无法精确的表示分数1/10,如果不需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类。


3.&&和||是按照短路方式求值的


4.用简单的方式打印数组中的所有值,即利用Arrays类的toString方法,调用Arrays.toString(a),返回一个包含数组元素的字符串,这些元素被放置在括号内,并用逗号分隔,例如“[2,3,5,7,11,13]”,要想快速地打印一个二维数组的数据元素列表,可以调用Arrays.deepToString(a)方法


5.可以使用一个静态的初始化块来对静态域进行初始化。


6.类设计技巧:

(1)一定要将数据设为私有

(2)一定要对数据初始化

(3)不要在类中使用过多的基本数据类型

(4)不是所有的域都需要独立的域访问器和域更改器

(5)使用标准格式进行类的定义

(6)将职责过多的类进行分解

(7)类名和方法名要能够体现它们的职责


7.如果重新定义equals方法,就必须重新定义hashCode方法,以便用户可以将对象插入到散列表中


8.Enum类的toString的逆方法是静态方法valueOf,例如Size s = (Size) Enum.valueOf(Size.class,"SMALL")


9.一个Class对象实际上表示的是一个类型,而这个类型未必一定是一种类。例如,int不是类,但int.class是一个Class类型的对象。

虚拟机为每一个类型管理一个Class对象,因此,可以利用==运算符实现两个类对象比较的操作


10.将forName与newInstance配合起来使用,可以根据存储在字符串中的类名创建一个对象。

String s = "java.util.Date";

Object m = Class.forName(s).newInstance();


11.能够分析类能力的程序被称为反射,使用它的主要对象是工具构造者,而不是程序员。在程序运行期间,java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息保存着每个对象所属的类足迹。保存这些信息的类被称为Class.


12.在java.lang.reflect包中有三个类Field、Method、Constructor分别用于描述类的域,方法和构造器。

这三个类都有一个叫做getName的方法,用来返回项目的名称。

利用java.lang.reflect包中的Modifier类的静态方法可以分析getModifier返回的整型数值,如isPublic、isPrivate、isFinal。

Class类中的getField、getMethods和getConstructors方法将分别返回类提供的public域、方法和构造器数组,其中包括超类的公有成员.Class类的getDeclarFields、getDeclarfields、getDeclareMethods和getDeclaredConstructors方法将分别返回类中声明的全部域、方法和构造器,其中包括私有和受保护成员,但不包括超类的成员。


13.查看对象域的关键方法是Field类中的get方法,如果该方法是私有的,需要调用setAccessible方法。

setAccessible方法是AccessibObject类中的一个方法,它是Field、Method和Constructor类的公共超类,这个特性是为调试、持久存储和相似机制提供的。

当然,可以查看就可以修改,f.set(obj,value)可以将obj对象的f域设置为新值


14.创建于原数组类型相同的新数组,关键是使用Array类中的静态方法newInstance,它能够构造新数组,在调用 它的时候需要提供两个新参数,一个是数组的元素类型,一个是数组的长度


15.继承设计的技巧:

(1)将公共操作和域放在超类

(2)不要使用受保护的域

(3)使用继承实现"is-a"关系

(4)除非所有继承的方法都有意义,否则不使用继承

(5)在覆盖方法时,不要改变预期的行为

(6)使用多态,而非类型信息

(7)不要过多的使用反射



你可能感兴趣的:(Java核心技术学习笔记(一))