三、表达式、语句与保留字
1.
表达式
(
1
)表达式单一意图规则,使得程序易读
(
2
)方法返回值比较
int temp = obj.getAge();
if( temp = = i) …
|
(
3
)字符串比较规则
一般采用
equals()
方法,但可以用字符串驻留在提高比较效率:
String str = new String(“Zhangshan”);
str = str.intern();
if( str = = “Zhangshan”)
….
|
2.JAVA
语句中的保留字
(
1
)静态变量引用规则:
ü
可以在非静态方法中引用静态变量
ü
在静态方法中不可以引用非静态变量
ü
可以在静态方法中创建非静态方法
(
2
)调用基类的构造函数
super ()
方法应该放在构造器的最上面
Public class B extends A{
Public B(){
Super();
Methods();
}
}
|
(
3
)关键字
final
final
的应用范围:
ü
用来申明类的常量
ü
用来声明方法的常量参数:防止被方法体中的语句改变
ü
用来声明不可覆盖的方法
ü
用来声明不可继承的类
使用
Inner Class
,也可以防止被其他类继承与覆盖,在一定程度上提高性能,但内隐类的函数体不能太大。
(
4
)同步
synchronized
在任何时刻,只能被一个线程访问,这样保证多线程环境下共享资源。
Synchronized
可以放在一个函数之前,或者声明为一个
synchronized
的方法块。
(
5
)实例识别
instanceof
用来判断一个引用的类型,
a instanceof b
方式使用。
3.
表达式和判断语句
(
1
)判断语句与循环语句
对于循环语句的优化建议:
ü
当作数组拷贝操作时候,使用
System.arraycopy()
方法要比循环快
ü
尽量避免在循环体中调用方法
ü
最好避免在循环体内存取数组元素,可以采用临时变量
ü
循环尽量采用
0
作为结束符,因为减法要比加法快
for ( int j=3 ; j>0 j--){
……
}
|
ü
避免在做最终条件比较时采用方法返回值进行判断
譬如,你可以这样
boolean isTrue = isTrue();
while ( isTrue ){
……
}
|
ü
避免在循环体内使用
try-catch
块
ü
在多重循环,尽可能将较长的循环放在最内层
ü
如果循环体内有
if-else
类的逻辑判断,并且循环的次数很大,最好将
if-else
动到循环体外去,但如果循环次数很少,在放在循环体看起来要明朗一些。
4.
正则表达式
在字符串匹配的时候,尽量使用正则表达式。
第四章
Java
核心类与性能优化
1.
散列表与性能优化
(
1
)线程安全,线程同步,在不要求线程安全的情况下,应尽可能的使用非线程安全的散列表类。
Vector
与
ArrayList
,在恰当的情况,应尽可能的使用
ArrayList
。
(
2
)
ArrayList
初始
使用
List list = new ArrayList();
声明方式,在已经知道容量较大数组的时候,应该调用
ensureCapactiy()
方法,
list. ensureCapactiy(N);
预先分配比动态分配的性能总要好。
(
3
)
ArrayList
和
LinkList
性能比较
ArrayList
通过内部数组结构
Object[]
来实现的,而
LinkList
通过一系列内部记录连接在一起的。所以通常如果有比较大的操作,譬如插入新元素等操作,用
LinkList
的性能要高很多。
2.String
类与性能优化
(
1
)字符串累加与性能优化
采用
StringBuffer
:
StringBuffer strbuffer = new StringBuffer();
strbuffer.appand(“ str1”);
strbuffer.appand(“ str2 ”);
//
使用直接,
String str = strbuffer.toString();
|
(
2
)
Str.length()
方法,不宜多次调用
超过
2
次以上,可采用这样的方式:
int legth = Str.length();
(
3
)字符串转化为字符数组采用
toCharArray()
方法
(
4
)字符串转换成数字是比较耗时的,所以注意在使用
new Double ( 3.67 )
的方式,而不是使用
new Double ( “ 3.67”)
。
3.
系统
I/O
类
Java
中的数据流可以分为两类:二进制的输入
/
出流与字符的输入
/
输出流。
(
1
)通过系统缓存流类来提高
I/O
效率
在一个字符串的读中间加上一个缓存区。譬如读写文件:
String filename = “ ”;
InputStream in = new FileInputStream( filename);
InputStream inBuffer = new BufferedInputStream( in );
…..
|
(
2
)通过自定制缓存区来提高
I/O
操作效率,结论:
ü
采用默认的数据输入输出方式将会导致系统性能下降
ü
采用系统数据库缓冲流类读取与写入数据将提高系统性能
ü
采用自定制合理的缓冲区读写数据将会在更大程度上提高系统性能
(
3
)通过压缩流提高
I/O
效率
这个要综合考虑,压缩需要时间等额外的开销。
参考资料:
《JAVA优化编程》