1.//显示为0
int j = 0;
for (int i = 0; i
j = j++;
System.out.println(j);
2.//死循环
public static final int END = Integer.MAX_VALUE;
public static final int START = END -100;
int n = 0;
for (int i = START; i <= END; i++) {
n++;
System.out.println(START+" "+END);
}
3.//位移规则
4.//double设置nan值
double i = 0.0/0.0;
or
double i =Double.NaN
so
i-i==0 = false
//5.在包含finally块的try|catch中,在try|catch中断操作,使用break.continue,return,总是会最终执行finally。
//6.静态常量,是可以通过static块来进行初始化的
public static final long USER_ID;
static{
USER_ID = 123l; //给予的值只能是常量或者是静态的
}
//7.当使用system.exit(0)来终止程序后,finally中不会再执行
//8.stackoverflowerror异常大多数情况
//9.不要依赖于NoClasDefFoundError,如果需要测试在程序中某一个类是否丢失,请使用反射来进行检测!
//10.当你在执行你的构造器的时候,程序会选择精准匹配来执行
public Test(Object obj){
System.out.println("obj");
}
public Test(String []arr){
System.out.println("arr");
}
new Test(null);//打印的是 “arr”
如果要打印"obj" 需要使用new Test((Object)null);
//10.当父类是有静态方法的时候,子类也有同名的静态方法,需要注意编译时的类型。因为多个子类对象可能共享一个静态对象。
//11.当使用instance的时候,如果前对象是一个空引用的时候,返回的是false.
//12.BigInteger是不可变的,特性(想通于String)
//13.不要在一个整型字面常量的前面加上一个0,这样会使它变成一个八进制的字面常量。在决定应该包含什么特性时,考虑其限制条件。
//14.Math.abs当在他的参数是Integer.MIN_VALUE或者是Long.MIN_VALUE时不一定会返回非负的结果,没有任何int类型可以表示Integer.MIN_VALUE的负值,long也一样不能表示Long.MIN_VALUE的负值。
//15.比较器在做两个int或者long数值的减法时,其结果可能会溢出。所以不要使用基于减法的比较器
//16.规则:当一个变量和一个类型具有相同名字,并且它们位于相同的作用域时,变量名具有优先权,变量名遮掩类型名。相似的,变量名和类型名可以遮掩包名。
//17.在使用Thread的时候,除非有关于某个类的详细说明作为保证,否则千万不要假设库中的这个类对它的实例或者类上的锁会做(或者不会做)某些事情。对于库的任何调用都可能会产生对wait,notify,notifyAll方法或者某个同步方法的调用。这些都是可能对应用级的代码产生影响。对于这样的问题的修复可以使用Object类型的私有域作为锁,并在所有同步方法上来进行这个锁的同步。
另一种方式就不使用Thread,而去实现Runnable,如果要防止新的线程创建,可是使用:
synchronized(Thread.class){
Thread.sleep(Long.MAX_VALUE);
}
//18. 名词:限定类型
PS:尽量的使用Type.class.xxx 而不是 type.getClass().xxxx
//19. 在我们的作为开发者来说,要小心无意间产生的方法或者变量和类型所产生的屏蔽。所以尽量的不要去使用具有相同的名字来命名我们的方法,变量和类型。
//20. 在开发中,尽量的使用熟悉的惯用法,如果要使用其陌生的api的时候,需要详细的阅读其说明文档!
//21. 在多线程中,为了确保子进程能够结束,你必须排空它的输出流;对于错误流也是,而且它可能更麻烦。
//22. 如果一个单例类实现了Serializable,就必须使用一个readResolve,用它返回唯一的实例,否则可以通过序列化来获取多个实例。如:
staitc public Object deepCopy(Object obj){
try{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
new ObjectOutputStream(bos).writeObject(obj);
ByteArrayInputStream bin = new ByteArrayInputStream(bos.toByteArray());
return new ObjectInputStream(bin).readObject();
}catch(Exception e){
throw new IllegalArgumentExcetption(e);
}
}
如果要避免,则使用
private Object readResolve(){
retrun INSTANCE;
}
//23. 在多线程编程中 如果调用Thread.interrupted 方法会对线程的中断状态造成影响。因为在调用它的时候总是会清除当前线程的中断状态。
//24. 在类的初始期间,尽量的不要去启动其他的线程,要让类的初始化的动作尽量的简单。如果一定要这样做,最好是让主线程等待后台线程之前完成类的初始化。
//25. 如你需要实例化一个内部类,你则需要提供一个外部类的实例给构造器。而且需要注意的是,当一个类是外部类又是其他类的超类的方式是不合理的。
//26. 尽量的不要把静态变量编译到客户端中。