
java puzzler
文章平均质量分 50
iteye_8208
这个作者很懒,什么都没留下…
展开
-
小心无意识的遮蔽
//要小心无意间产生的遮蔽导致的错误class Pet{ public void sleep() { System.out.println("Zzzzzzz..."); } public void live() { new Thread() { @Override public void run() { //这里的sleep()被继承自Thread...原创 2016-05-03 13:11:58 · 89 阅读 · 0 评论 -
不可变类
//String、BigDecimal、BigInteger以及包装器类型:Integer、Long、Short、Byte、Character、Boolean、Float 和Double 的实例是不可变的。//你不能修改现有实例的值,对这些类型的操作将返回新的实例。不可变类型更容易设计、实现和使用;它们出错的可能性更小,并且更加安全。BigInteger fiveThousand = ...原创 2016-10-08 11:34:03 · 90 阅读 · 0 评论 -
本地变量声明语句出现在循环体中
//一个本地变量声明看起来像是一条语句,但是从技术上说,它不是;它应该是一//个本地变量声明语句(local variable declaration statement)。//Java 语言规范不允许一个本地变量声明语句作为一条语句在for、while 或do//循环中重复执行。一个本地变量声明作为一条语句只能直接出现在一个语句块中。//(一个语句块是由一对花括号以及包含在这...原创 2016-10-07 13:15:40 · 160 阅读 · 0 评论 -
instanceof运算符
// instanceof运算符://尽管null 对于每一个引用类型来说都是其子类型,但是instanceof 操作符被定义为在其左操作数为null//时返回false。这被证明是实践中非常有用的行为。如果instanceof 告诉你一个对象引用是某个特定类//型的实例,那么你就可以将其转型为该类型,并调用该类型的方法,而不用担心会抛出//ClassCastException...原创 2016-10-07 13:15:32 · 93 阅读 · 0 评论 -
java 类型扩展和移位运算
byte b = -1;System.out.println((int)(char) b); //65535System.out.println(b & 0xFF); //255 char c = 65535;System.out.println((int) c); //65535System.out.printl...原创 2016-10-03 21:56:57 · 144 阅读 · 0 评论 -
不管在什么时候,都要尽可能使用熟悉的惯用法和API
//不管在什么时候,都要尽可能使用熟悉的惯用法和API。//一个 char 不是一个 String,而是更像一个 int。//Random.nextInt(int)的规范描述道:“返回一个伪随机的、均等地分布在从0//(包括)到指定的数值(不包括)之间的一个int 数值”[Java-API]。//3个bug:分支2永远不会到达;没有break,总是最后的default为最后...原创 2016-05-18 11:46:44 · 141 阅读 · 0 评论 -
java 字符串
//String.replaceAll 接受了一个正则表达式作为它的第一个参数,而并非接受了一个字符序列字面常量。//正则表达式“.”可以匹配任何单个的字符,要想只匹配句点符号,在正则表达式中的句点必须在其前面添加//一个反斜杠(\)进行转义。System.out.println(Puzzlers.class.getName().replaceAll(".", "/") + ".c...原创 2016-05-18 11:45:59 · 99 阅读 · 0 评论 -
java二进制运算
//对于原码, 反码, 补码而言, 需要注意以下几点://(1) 二进制的最高位是符号位, 0表示正数, 1表示负数;//(2) 正数的原码, 反码, 补码都一样;//(3) 负数的原码=对应正数的二进制原码,最高位设为1;//(4) 负数的反码=它的原码符号位不变, 其他位取反;//(5) 负数的补码=它的反码+1;//(6) 0的反码,...原创 2016-05-18 11:44:33 · 310 阅读 · 0 评论 -
java表达式运算
//表达式计算顺序都是从左到右System.out.println(3 + 5 + " hello"); //8 helloSystem.out.println("hello " + 3 + 5); //hello 35int a = 3;int b[] = new int[5];b[a] = a = 6; //相当于b[3] = 6;for(i = 0; i <...原创 2016-05-18 11:43:02 · 141 阅读 · 0 评论 -
避免使用反射实例化非静态内部类
//考虑到从Java 程序到class 文件的映射的复杂度,请避免使用反射来实例化内部类。//更一般地讲,当我们在用高级语言特性定义的程序元素之上使用反射的时候,一定要小心,//从反射的视角观察程序可能不同与从代码的视角去观察它。//一个非静态的嵌套类的构造器,在编译的时候会将一个隐藏的参数作为它的第一个参数,//这个参数表示了它的直接外围实例(immediately encl...原创 2016-05-13 13:01:48 · 331 阅读 · 0 评论 -
Date 和 Calendar
//在Java平台首次发布时,它唯一支持日历计算类的就是Date 类。//这个类在能力方面是受限的,特别是当需要支持国际化时,它就暴露出了一个基本的设计缺陷:Date 实例是易变的。//在1.1 版中,Calendar 类被添加到了Java 平台中,以矫正Date的缺点,由此大部分的Date 方法就都被弃用了。//Date 将月份表示为0-11,而Calendar 延续了这个错误。...原创 2016-05-13 13:00:24 · 92 阅读 · 0 评论 -
泛型和原生类型
//泛型类的内部类可以访问到其外围类的类型参数。//当你在一个泛型类中嵌套另一个泛型类时,最好为它们的类型参数设置不同的名字,即使那个嵌套类是静态的也应如此。class LinkedList<E> { /* 访问外围类的类型参数 private Node head = null; private class Node { E value; No...原创 2016-05-13 13:00:15 · 302 阅读 · 0 评论 -
实现Serializable的单例类
//一个实现了Serializable 的单例类,必须有一个readResolve 方法,用以返回它的唯一的实例。//对一个实现了Serializable 的类进行了扩展,或者实现了一个扩展自Serializable 的接口,//使得我们在无意中实现了Serializable。static class Dog extends Exception { public stat...原创 2016-05-13 11:28:56 · 186 阅读 · 0 评论 -
隐藏超类方法、变量
//Java 语言允许你去隐藏变量、嵌套类型,甚至是静态方法。//当你在声明一个域、一个静态方法或一个嵌套类型时,如果其名字与基类//中相对应的某个可访问的域、方法或类型相同,就会发生隐藏。//一旦基类的一个方法或者域在子类中被隐藏,你就不能在子类的实例上调用它了(除了在子类内部,通过使用super 关键字)。//如果一个类要隐藏一个域,而用来隐藏该域的域具有的可访问性比被隐藏域...原创 2016-05-13 11:25:46 · 169 阅读 · 0 评论 -
覆写equals 方法时,一定要记着覆写hashCode 方法。
//当你覆写equals 方法时,一定要记着覆写hashCode 方法。//否则类与基于hashCode的集合类一起正确使用时,会出现不可预期的行为。//为了避免在覆盖override时错误的进行了重载overload,应该始终在覆盖的方法前加上@Override。Set<Name> s = new HashSet<Name>();s.add(new N...原创 2016-10-08 11:37:26 · 291 阅读 · 0 评论