Java常用API的运用,效率及技巧1.Java面向对象基本概念2.System3.String,StringBuffer4.数值,字符,布尔对象与简单类型的操作5.Class,ClassLoader6.JavaIO系统7.Java集合类8.ResourceBundle,Properties9.Exceptions10.JDBC类库11.常用设计模式1.Java面向对象基本概念Java基本上是面向对象的程序设计语言,除了一些简单类型(primitive)的变量以外,一切都是对象,程序是对象的组合,每个对象都有自己的空间,并且每个对象都有一种类型,同一类所有对象都能接受相同的消息。下面只对Java中对象的结构作简单的说明:类(class):class是定义类的关键字,类中包含类变量,方法,内部类,内部接口等。由class可以生成类的实例,即一个个对象。如果一个类的成员被定义成static的,则这个成员不专属于任何对象,而是属于这个类,所有的对象共享这个成员。抽象类(abstractclass):抽象类不能直接生成一个实例,抽象类中必需有方法是abstract的,抽象类的意思就是它实现了一部分的方法,而定义为abstract的方法则需要在它的字类中去实现。接口(interface):接口可以理解为纯抽象的类,它的每个方法都是未实现的,它可以有成员变量,但必须是static的。一个类如果从这个接口继承(implements)则它必须实现这个接口的所有方法。继承类用关键字:extends,继承接口用关键字:implements。一个类只能从一个类继承下来,但可以从多个接口继承(类似于C++的多重继承)。字类可以覆盖父类的方法(method),但不能覆盖父类的成员变量(field)。如果父类的方法为final或static的则不能被覆盖。类的初始化顺序是,如果有父类,则先初始化父类的field,然后执行父类的构造函数,如果子类没有显式的去调父类的构造函数则缺省的会去调父类的无参数构造函数。然后是子类的field与构造函数的初始化。publicinterfaceSuperInterface{publicstaitcStringSOME_FLAG=“1”;publicvoidsomeMethod();}publicClassSuperClass{{System.out.println(“initSuperClassfield”);}publicSuperClass(){System.out.println(“initSuperClassConstructor”);}publicvoidrunMethod(){System.out.println(“runSuperClassrunMethod()”);}}publicClassSubClassextendsSuperClassimplementsSuperInterface{{System.out.println(“initSubClassfield”);}publicSubClass(){System.out.println(“initSubClassConstructor”);}publicvoidsomeMethod(){System.out.println(“runSubClasssomeMethod()”);}publicvoidrunMethod(){System.out.println(“runSubClassrunMethod()”);}}有以下test代码:publicclassTest{publicvoidmain(String[]args){SubClasssub=newSubClass();sub.runMethod();}}则会输出:initSuperClassfieldinitSuperClassConstructorinitSubClassfieldinitSubClassConstructorrunSubClassrunMethod()以下章节所讲述到的常用的JavaAPI就是一些Java自带的一些Class或Interface的用法。2.SystemSystem类位于packagejava.lang下面,凡是此package下面的类我们可以直接引用无需先import进来,因为JVM缺省就load了这下面的所有class。System包含了一些我们常用的方法与成员变量。System不能被实例化,所有的方法都可以直接引用。主要作用大致有:输入输出流:(PrintStream)System.out(标准终端输出流),(PrintStream)System.err(标准错误输出流),(InputStream)System.in(标准输入流)。我们还可以重定向这些流,比如将所有的System.out的输出全部重定向至一文件中去。System.setOut(PrintStream)标准输出重定向System.setErr(PrintStream)标准错误输出重定向System.setIn(InputStream)标准输入重定向取当前时间:System.currentTimeMillis()所取到的时间是从1970/01/01以来1/1000秒计算的long型值。这个值可以转换至Date或Timestamp值。它一般还可以用来计算程序执行的时间。例:longbeginTime=System.currentTimeMillis();……System.out.println(“runtime=”+(System.currentTimeMillis()–beginTime));数组拷贝:System.arraycopy(Objectsrc,intsrc_position,Objectdst,intdst_position,intlength)src:源数组。src_position:源数组拷贝的起始位置。dst:目标数组dst_position:拷贝至目标数组的起始位置length:拷贝元素的长度利用System.arraycopy进行数组的拷贝效率是最高的,一般情况下我们自己很少直接用到这个方法,但在集合类的内部中都大量使用了这个方法。例:int[]array1={1,2,3,4,5};int[]array2={4,5,6,7,8};intarray3=newint[8];System.arraycopy(array1,0,array3,0,5);System.arraycopy(array2,2,array3,5,3);此时array3={1,2,3,4,5,6,7,8}这比用for循环来进行赋值效率要高。存取系统的Properties:System.getProperties():取得当前所有的Properties,Properties将在后面的集合一节进行详细的论述。System.setProperties(Propertiesprops):设置系统的Properties。System.getProperty(Stringkey):根据一个键值来取得一个Property。System.setProperty(Stringkey,Stringvalue):设置系统的一个Property。JVM起动的时候将会有一些缺省的Properties值,例如:java.versionJava运行环境版本java.homeJava主目录installationdirectoryjava.class.pathJava的classpathjava.ext.dirsJava的扩展目录路径file.separator文件分隔符(/onUNIX)path.separator路径分隔符(:onUNIX)line.separator行分隔符(\nonUNIX)user.name用户名user.home用户主目录user.dir用户当前工作目录更详细的信息请参照JavaAPI。另外在起动一个java程序的时候可以通过-D来设置系统的Property,比如java–Dejb.file=ejb_TestPrintTest在PrintTest里面就可以通过System.getProperty(“ejb.file”)来取得值ejb_Test。其它System.loadLibrary(Stringlibname):加载native的动态库。可以用C写JNI的库,然后在java中通过native方法来调用。System.setSecurityManager(SecurityManagers)System.getSecurityManager():设置与取得系统的securityclass。3.String,StringBuffer3.1基本用法String可以说是我们最常用的一个类,熟练掌握它的一些基本用法是很有用的。String是由一组字符组成的字符串,下标由0开始。一旦有必要改变原来的内容,每个String方法都有返回了一个新的String对象。charcharAt(intindex)返回指定位置的字符。intcompareTo(Objecto)intcompareTo(StringanotherString)与另外一个对象进行比较。intcompareToIgnoreCase(Stringstr)与另一个String进行比较,不区分大小写Stringconcat(Stringstr)连接两字符串,可以直接用+,因为Java给String覆盖了+staticStringcopyValueOf(char[]data)staticStringcopyValueOf(char[]data,intoffset,intcount)将data数组转换至StringbooleanendsWith(Stringsuffix)测试此String是否以suffix结尾。booleanstartsWith(Stringprefix)测试此String是否以prefix开头。booleanequals(ObjectanObject)booleanequalsIgnoreCase(StringanotherString)比较两字符串的值。不相等则返回falsebyte[]getBytes()根据缺省的字符编码将String转换成字节数组。byte[]getBytes(Stringenc)根据指定的编码将String转换万字节数组。voidgetChars(intsrcBegin,intsrcEnd,char[]dst,intdstBegin)拷贝字符至一数组中intindexOf(intch)从字串的起始位置查找字符ch第一次出现的位置intindexOf(intch,intfromIndex)从指定的fromIndex位置向后查找第一次出现ch的位置,intindexOf(Stringstr)intindexOf(Stringstr,intfromIndex)如果不存在ch或str都返回-1intlastIndexOf(intch)从字串的最终位置往前查找第一次出现ch的位置intlastIndexOf(intch,intfromIndex)从指定的位置往前查找第一次出现ch的位置,intlastIndexOf(Stringstr)intlastIndexOf(Stringstr,intfromIndex)如果不存在则返回-1intlength()该字符串的字符长度(一个全角的汉字长度为1)Stringreplace(charoldChar,charnewChar)将字符oldChar全部替换为newChar,返回一个新的字符串。Stringsubstring(intbeginIndex)返回从beginIndex开始的字符串子集Stringsubstring(intbeginIndex,intendIndex)返回从beginIndex至endIndex结束的字符串的子集。其中endIndex–beginInde