java解惑笔记
今天抽空下了《java解惑》这本书看了一下,确实不错,提出了很多我们平时不会注意的小问题。想想如果不注意说不定会因为一个BUG郁闷个一两天也找不到。以下是总结的笔记,备忘~~
1.判断奇数
i % 2 == 1 在i 为负数时结果为-1,所以使用i % 2 != 0来判断;当有性能要求时使用 (i & 1) != 0。
*在使用%时一定要考虑到操作数的符号的影响!
2.不是所有小数都可以用二进制浮点数来表示(如1.1等)
2.00-1.10 = 0.89999999999
*方法一:使用整型来计算 (200-110)/100 = 0.9
*方法二:new BigDecimal("2.00").subtract(new BigDecimal("1.10")); //必须使用new Decimal(String)这个构造
3.在操作很大的数字时要防止溢出
long a = 24*60*60*1000*1000; //因为是int之间的运算,结果先保存在一个int中再赋给a,导致溢出
long b=24*60*60*1000;
a/b = 5;
*方法:long a = 24L*60*60*1000*1000;
4.在使用条件操作符(?a:b)时,尽量保持a与b的类型一致
5.复合赋值表达式自动将运算的结果转型为左侧变量的类型
相关文档:
创建一个类的实例时,
1.会为它以及它的所有父类的实例变量分配内存空间,如果分配空间成功,则所有实例变量都会初始化为默认值0、false、null
2.会递归调用父构造函数,但是暂不执行构造函数的语句;
3.对该父构造函数对应的类的实例变量赋值
4.执行父构造函数的其他语句
5.对于子类,执行2-4步骤 ......
1. 创建线程(继承Thread和实现runnable接口) class SubThread {
private class InnerThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
super.run();
}
}
public Thread getThread() {
return new InnerThread();
}
}
......
import java.io.UnsupportedEncodingException;
/**
* 转换字符串的编码
*/
public class ChangeCharset {
/** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
public static final String US_ASCII = "US-ASCII";
/** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */
public static final String ISO_ ......