当前位置:首页 > Java编码规范
try {
statements;
} catch (exception-declaration) {
statements; } try {
statements; } finally {
statements; } try { statements;
} catch ( exception-declaration) {
statements; } finally {
statements; } 8.2.8
synchronized语句
synchronized (expression) {
statements; }
8.3 标签语句
标签语句通常用花括号封装,而标签本身则应在单独一行,后面跟一个冒号。 例如: statement-label: {
}// statement-label
9 性能优化常识
9.1 前提
首先让程序运行起来,再考虑变得更快--但只有在自己必须这样做、而且经证实在某部分代码中的确存在一个性能瓶颈的时候,才应进行优化。除非用专门的工具分析瓶颈,否则很有可能是在浪费自己的时间。性能提升的隐含代价是自己的代码变得难于理解,而且难于维护。
对于像字符串的连接操作不使用\+\而使用专有方法 concat等其他方法,这类问题,则不能称为性能优化,而只能叫做基本常识。因而这类问题的解决并不能影响程序的可读性和易维护性,所以我们提倡为性能优化打基础。以下将介绍一些常识:
9.2 运算时间
运算 示例 标准时间 本地赋值 i=n;
1.0
1.2
实例赋值 this.i=n; Int增值 i++;
1.5
Byte增值 b++; 2.0 Short增值 s++; 2.0 Float增值 f++;
2.0
Double增值 d++; 2.0 空循环
while(true) n++;
2.0
三元表达式 (x<0)?-x:x; 2.2
2.5
算术调用 Math.abs(x); 数组赋值 a[0]=n; 2.7 Long增值 l++;
3.5
方法调用 funct(); 5.9 Throw 或者catch 违例
Try{throw e;} 320
同步方法调用 synchMethod(); 570 新建对象 new Object(); 980 新建数组 new int[10];
3100
标准时间 = 语句执行时间/本地赋值时间
9.3 java.lang.String
字串的开销:字串连接运算符\+\看似简单,但实际需要消耗大量系统资源。编译器可高效地连接字串,但变量字串却要求可观的处理器时间。该操作要创建并拆除一个StringBuffer对象以及一个String对象。
上述问题的通常解决方法是新建一个StringBuffer(字串缓冲),用append方法追加自变量,然后用toString()将结果转换回一个字串。当要追加多个字串,则可考虑直接使用一个字串缓冲--特别是能在一个循环里重复利用它的时候。通过在每次循环里禁止新建一个字串缓冲,可节省980单位的对象创建时间(见上表)。
更有效的解决办法是:在构造 StringBuffer 时,应该粗略的估计出它最终的总长度。默认构造函数预设了16个字符的缓存容量。append()方法首先计算字符串追加完成后的总长度,如果这个总长度大于StringBuffer的存储能力,append()方法调用私有的expandCapacity()方法。expandCapacity()方法在每次被调用时使StringBuffer存储能力加倍,并把现有的字符数组内容复制到新的存储空间。存储能力的扩展,从而导致了两次代价昂贵的复制操作。因此,我们至少有一电可以做得比编译器更好,这就是分配一个初始存储容量大于或者等于最终字符长度StringBuffer。
因此,使用默认构造函数创建的StringBuffer在字符串连接操作上的效率其实和用\+\是一样的。如果首先估计出整个字符串最终的总长度,才会显著提高效率!
沈阳东软软件股份有限公司 版权所有 2006 19 JAVA 编码规范
其他的字符串运算操作尽可能使用 String 已经提供的方法。比如,短字符串的连接可以使用 concat;子串的查找可以使用 indexOf,substring 等。
9.4 java.util.Vector
一个Vector就是一个java.lang.Object实例的数组。Vector与数组相似,它的元素可以通过整数形式的索引访问。但是,Vector类型的对象在创建之后,对象的大小能够根据元素的增加或者删除而扩展、缩小。
1) 避免把新元素添加到Vector 的最前面
除非有绝对充足的理由要求每次都把新元素插入到Vector的前面,否则对性能不利。在默认构造函数中,Vector的初始存储能力是10个元素,如果新元素加入时存储能力不足,则以后存储能力每次加倍。Vector类就象StringBuffer类一样,每次扩展存储能力时,所有
共分享92篇相关文档