java优化

第一节 String

String类是java语言中重要的核心类。Java语言中的string代表字符串类型的对象,可以存储16位的unicode字符序列及其长度。

规则:

1)  使用stringBuffer.append()方法串联字符串;

2)  禁止将string.length() 方法作为循环语句参数条件使用;

3)  使用toCharArray()方法,获取指定的字符;

4)  避免将字符转换成数字的;

样例:

String  str = “this is a string”;

stringBuffer tmp =new stringBuffer(str);

int len =str.length();

for ( int charLeng=len; charLeng>=0; charLeng--) {

tmp.append ( “second string” );

}

str = tmp.toString();

 

char ss[] = str.toCharArray();

int sslen=ss.length();

for ( int len=sslen; len>=0; len--) {

         if(ss[len]==’a’) {  }

}

 

第二节   arraylist 

1arraylist 为非线程安全,如果需要可使用如下方法将其转化为线程安全:

         list  list = Collections.synchronizedList ( new ArrayList() );

通过上述方法可以将ArrayList类标识为线程安全的对象。

2)调用ArrayList对象中的ensureCapacity()方法设置ArrayList初始化容量,提高添加新元素的速度,优化系统性能。

         示例:

         Final int N = 1000;

         Object obj = new Object();

         ArrayList list = new ArrayList();

         list.ensureCapacity(N);

         for (int i=N;i>=1;i--) {

                   list.add(obj);

         }

3)  ArrayList java语言专门提供用来处理数据元素列表的类之一,是一个数组对象并通过内部数组结构Object[]实现的。

4)  使用list接口解决ArrayListLinkedList的性能问题;方法是使用如下声明方式:

List list = new ArrayList();                void f (List list) { }

替代:

ArrayList list =new ArrayList();                                      void f( ArrayList list ) {   }

 

 

第三节   LinkedList

1LinkedListjava语言专门提供用来处理数据元素列表的类之二,是数据结构中的链表对象并通过将一系列的内部记录连接在一起实现的。

第四节   i/O 

操作文件读写时,必须要使用数据缓存流类;

对于大文件要使用压缩流方式;

第五节   数据格式化

数据格式化优先考虑通过操作符进行数据格式化信息串,其次是采用messageFormat类格式化信息串。

 

 

第九章   异常定义规则

第一节   异常

1、  创建定义异常从已有的异常类继承,并选择意思相近的异常类继承;

2、  捕获所有异常类exception ,要放在处理程序列表的末尾;

3、  使用异常链时,应该用initCause()方法而不是构造器;

4、  避免抛出空引用异常,即NullPointerException异常;

5、  保证异常处理的完整性;

格式如下:

try {  

} catch ( exception ex) { 

} finally {  

}

注:finally 做清理资源的工作;

6、  避免在构造函数里抛出异常;

7、  避免异常子类catch顺序颠倒;示例:

 

Class Annoyance extends Exception {  }

 

Class Sneeze extends Annoyance {   }

 

Public class Human {

 

         Public static void font() throw Sneezes,Annoyance {

                   Try {

 

                   }catch(Annoyance a ) {

 

                   }catch(Sneeze s) {

                   }

         }

}

 

第二节   抛出异常和捕获规则

 

1)         任何抛出异常的方法必须先声明异常,如下示例:

MyClass.java

{

 

   // Constructor

 

   public MyClass( String name )

            throws NullPointerException, llegalArgumentException

 

   {

 

            ...

 

   }

 

}

2)         异常声明后,调用异常对象的构造器抛出异常。如下示例:

MyClass.java

public MyClass( String name )

 

   throws NullPointerException, IllegalArgumentException

 

{

 

   if ( name == null )

 

            throw new NullPointerException( );

 

   if ( name.length == 0 )

 

            throw new IllegalArgumentException( );

 

   ...

 

}

Java异常都从Throwable类继承而来。

3)         trycatch声明捕捉异常。如下示例:

MyClass.java

try

{

 

   MyClass newobj = new MyClass( name );

 

}

 

catch ( NullPointerException e )

{

 

   //  Do something about it

 

}

 

catch ( IllegalArgumentException e )

{

 

   //  Do something about it

 

}

try中的语句产生异常时,在异常处理函数捕捉了该异常而又没有重新抛出异常时,则在执行完处理函数后,将跳出发生异常的try块,接着执行下面的语句。

    try中的语句产生异常时,在异常处理函数捕捉了该异常而又重新抛出异常时,则将把异常抛出到上一层,发生异常的语句之后的代码将不执行。

如果没处理相应异常的处理函数,将把异常抛出到上一层,发生异常的语句之后的代码将不执行。

如果想捕捉所有异常,只要捕捉Exception异常就行。

如果某段代码不管是否发生异常都要执行,那可把它放入finally块中,以finally进行清理。

 

第三节   获取异常信息常用函数

 

1)         String getMessage()getLocalizedMessage toString()取得异常对象中的信息。

2)         void printStackTrace()Throwable fillStackTrace()printStackTrace打印出Throwable和其call stack traceFillStackTrace则在调用点设立新的stack trace信息。

3     RuntimeException异常。RuntimeException及其子类所代表的异常我们在程序中不用进行捕捉,如果发生此类异常,Java会自动抛出相应的异常对象。

 

第四节   异常分类

 

1Checked Exception是指那些需要程序显式的处理(捕获或者继续抛出)的异常。在项目中Checked Exception主要可以分为以下三种:

1BizException

项目自己定义的业务异常,BizException下继承了若干个子异常。也就是说BizException是所有项目自定义异常的根类。

2RollbackableBizException

         项目自己定义的业务异常,是BizException的子类。

3Other Checked Exception

         其他非本项目定义的Checked Exception类异常

2Unchecked Exception是指那些不需要程序进行显式处理(捕获或继续抛出)的异常,如果程序需要处理这类异常则其处理方式和Checked Exception一样。在项目中Unchecked Exception 主要可以分为以下两类:

         1DataAccessException

这类异常主要是Spring框架定义的数据访问类异常,其具体类型根据数据库的不同和数据库所产生的错误的不同而不同。该类异常描述了数据库访问过程中所产生的错误。

 

                            2Other RuntimeException

                                     其他类型的RuntimeException,例如:NullPointException等。

 

 

第五节   异常使用原则

 

使用异常主要是为了报告系统运行中出现的非正常情况。目前异常使用的方法有两种。一种是使用不同的异常类来表示不同的异常,这些异常类的类名就表达了系统所处的非正常状态。另一种是系统中出现的所有异常都用很少的几个异常类来表示,通过这些异常类中Message来表达具体的异常信息。项目主要使用的的是后一种方法。但在某些主要的子系统或与外系统交互时也会采用一些第一种方法。

 Message主要由两部分组成KeyParam[],其中key的命名规则为:级别(1)_模块名(可选)_逻辑名,其中级别主要分为Warn(W)ErrorE)两个级别。模块名:指应用功能的名称。逻辑名:从某种角度上来说可以理解为异常的编码。Param[]是具体的异常信息的参数。其具体使用方法如下,首先应用程序从异常中获取Message,然后从Message中获取key值,根据key值从resouce文件中获得异常描述信息,将Param[]通过填空形式放入获得异常描述信息中形成一个完整的异常描述信息。

 

1、  需要事务RollBack则抛出RollbackableBizException

2、  如果不需要事务作RollBack操作则抛出BizException

3、  鼓励应用程序重用一些通用的UncheckedException异常,如IllegalArgumentsException, NullPointException等。

4、  大多数情况下DataAccessException这类异常应用程序不用关心,特别是DAO类的对象不用关心这类异常。它是Spring框架所抛出的数据库访问的异常。

 

第六节   异常处理原则

 

异常处理需要遵循几点基础原则

第一,能处理则进行处理和关心的异常,不能处理或不关心的异常则继续抛出。决不允许出现捕获异常但又不做任何处理或抛出操作,这样会丢失异常信息。

第二,异常抛出源需要在抛出异常之前将异常写入日志中。以备进行检查。

应用程序所处层次的不同其对异常的处理也有所差别。下面列出了每个层次的应用程序在处理异常的一些原则。

下图是项目中异常使用的一个图释:

你可能感兴趣的:(java,编程技术,性能,编程规范)