重新探索自我

    客观条件受制于人,并不足惧。重要的是,我们拥有选择的自由,可以对现实环境积极回应,
    为生命负责,为自己创造有利的机会,做一个“真正”操之在我的人!

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  3 随笔 :: 10 文章 :: 5 评论 :: 0 Trackbacks

三、表达式、语句与保留字

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优化编程》

posted on 2006-09-06 11:50 蒋利文 阅读(222) 评论(0)  编辑  收藏 所属分类: 技术总结

只有注册用户登录后才能发表评论。


网站导航: