免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2072 | 回复: 0
打印 上一主题 下一主题

《编写高质量代码:改善Java程序的151个建议》笔记 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-26 15:09 |只看该作者 |倒序浏览
《编写高质量代码:改善Java程序的151个建议》笔记

第1章  Java开发中通用的方法和准则
1、 包名全小写,类名首字母全大写,常量全部大写并且用下划线分隔,变量采用骆驼命名
法命名等。
2、 字母“l”(还包括大写字母“O”)尽量不要和数字混用。如果字母和数字必须混合使用,
字母“l”务必大写,字母“O”则增加注释。
3、 三元操作符的类型务必一致:
public class Client {
public static void main(String[] args) {
   int i = 80;
    String s = String.valueOf(i < 100 ? 90 : 100);
    String s1 = String.valueOf(i < 100 ? 90 : 100.0);
    System.out.println("两者是否相等:" + s.equals(s1));
  }
}
4、 Java对自加是这样处理的:首先arr的值(注意是值,不是引用)拷贝到一个临时变量区,
然后对arr变量加1,最后返回临时变量区的值。
◆每种语言对自增的实现方式各不同。
5、 少用静态导入。
6、 对于静态导入,一定要遵循两个规则:
(1)不使用*(星号)通配符,除非是导入静态常量类(只包含常量的类或接口)。
(2)方法名是具有明确、清晰表象意义的工具类。
7、不要在本类中覆盖静态导入的变量和方法。
   ◆编译器有一个“最短路径”原则:如果能够在本类中查找到的变量、常量、方法,就
不会到其他包或父类、接口中查找,以确保本类中的属性、方法优先。
8、记住在case语句后面随手写上break,养成良好的习惯。
9、JCP(Java Community Process)提出了JSR223规范,只要符合该规范的语言都可以Java
平台上运行(它对JavaScript是默认支持的)。
10、从Java6版本它开始支持动态编译了,可以在运行期直接编译.java文件,执行.class。
11、instanceof关键字:
   (1)instanceof只能用于对象的判断,不能用于基本类型的判断。
   (2)若左操作数是null,结果就直接返回false,不再运算右操作数是什么类。
   (3)(String)null instanceof String:返回值是false,不要看这里有个强制类
型转换就认为结果是true,不是的,null 是一个万用类型,也可以说它没有类
型,即使做类型转换还是个null。
   (4)instanceof操作符的左右操作数必须有继承或实现关系,否则编译会失败。
第2章  基本类型
1、用偶判断,不用奇判断。
2、用整数类型处理货币。(把参与运算的值扩大100倍,并转化为整型,然后在展现时再缩
小100倍)
3、不要让类型默默转换。
4、Java 是先运算然后再进行类型转换的。
5、在单元测试中,有一项测试叫做边界测试(也叫做临界测试),如果一个方法接收的是
int类型的参数,那以下三个值是必测的:0、正最大、负最小,其中正最大和负最小是
边界值,如果这三个值都没有问题方法才是比较安全可靠的。
6、通过valueOf产生包装对象时,如果int参数在-128和127之间,则直接从整型池中获
得对象,不在该范围的int类型则通过new生成包装对象。
7、自动装箱有一个重要的原则:基本类型可以先加宽,再转变成宽类型的包装类型,但不
能直接转变成宽类型的包装类型。
8、在Java 中,随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:
(1)种子不同,产生不同的随机数;
(2)种子相同,即使实例不同也产生相同的随机数。
9、除非必要,否则不要设置随机种子。
第3章  类、对象及方法
1、在接口中不要存在实现代码。
2、静态变量一定要先声明后赋值。
   ◆静态变量是在类初始化时首先被加载的,JVM 会去查找类中所有的静态声明,然后分
配空间,注意这时候知识完成了地址空间的分配,还诶有赋值,之后JVM会根据类中
静态赋值(包括静态类赋值和静态块赋值)的先后顺序来执行。
3、一个实例对象有两个类型:表面类型和实际类型,表面类型是声明时的类型,实际类型
是对象产生时的类型。对于非静态方法,它是根据对象的实际类型来实行的。
4、如果是通过对象调用静态方法,JVM 则会通过对象的表面类型查找静态方法的入口,继
而执行之。
5、子类实例化时,会首先初始化父类(注意这里是初始化,可不是生成父类对象),也就是
初始化父类的变量,调用父类的构造函数,然后才会初始化子类的变量,调用子类自己
的构造函数,最后生成一个实例对象。
6、避免在构造函数中初始化其他类。
7、在Java中一共有四种类型的代码块:
  (1)普通代码块
  (2)静态代码块
  (3)同步代码块
  (4)构造代码块(在类中没有任何的前缀或后缀,并使用“{}”括起来的代码片段)
   注意:
     (1)编译器会把构造代码块插入到每个构造函数的最前端。若有super,则插在super
后!如果遇到this关键字,则不插入构造代码块!
     (2)构造代码块会在每个构造函数内首先执行(需要注意的是:构造代码块不是在构
造函数之前执行的,它依托于构造函数的执行)
8、只有在是静态内部类的情况下才能把static修复符放在类前,其它任何时候static
都是不能修饰类的。
9、静态内部类与普通内部类的区别:
  (1)静态内部类不持有外部类的引用,普通内部类持有外部类的一个引用!
  (2)普通内部类与外部类之间是相互依赖的关系,内部类实例不能脱离外部类实例。静
态内部类是可以独立存在的,即使外部类消亡了,静态内部类还是可以存在的。
  (3)普通内部类不能声明static的方法和变量,常量(也就是final static 修饰的
属性)还是可以的。
10、匿名函数虽然没有名字,但也是可以有构造函数的,它用构造函数块来代替。
11、一般类(也就是具有显式名字的类)的所有构造函数默认都是调用父类的无参构造的。
匿名类在初始化时直接调用了父类的同参数构造,然后再调用了自己的构造代码块。
12、浅拷贝方式并不会把对象的所有属性全部拷贝一份,而是有选择性的拷贝,它的拷贝规
则如下:
   (1)如果变量是基本类型,则拷贝其值;
   (2)如果变量是一个实例对象,则拷贝地址引用;
   (3)String 字符串,拷贝的也是一个地址,是个引用,但是在修改时,它会从字符串
池中重新生成新的字符串,原有的字符串对象保持不变。
13、不要主动进行垃圾回收。
第4章  字符串
1、在字符串池中所容纳的都是String字符串对象,它的创建机制是这样的:创建一个字符
串时,首先检查池中是否有字面值相等的字符串,如果有,则不再创建,直接返回池中
该对象的引用,若没有则创建之,然后放到池中,并返回新建对象的引用。
2、创建字符串的两种方式:
   方式一:String str1 = “ddd”;
   方式二:String str2 = new String(“ddd”);
   直接声明一个String对象是不检查字符串池的,也不会把对象放到池中,如方式二;方
式一会检查当前的对象在对象池中是否有字面值相同的引用对象,如果有则返回池中对
象,如果没有则放置到对象池中,并返回当前对象。
◆建议在开发中使用直接量赋值方式,除非确有必要才新建一个String对象!
3、实现从原始字符串中删除与之匹配的所有字符串:
   public class StringUtils{
  public static String remove(String source, String sub){
    return source.replace(sub, "");
  }
}  
4、String类是不可改变的量;StringBuffer对象的值是可改变的。StringBuffer是线程
安全的;StringBuilder是线程不安全的。
5、在字符串拼接方式中,append方法最快,concat方法次之,加号最慢。

点击查看全部>>
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP