北京MLDN软件实训中心联系电话:010-51283346第(1)页共(32)页E-Mail:mldnqa@163.com1、课程名称:Java常用类库2、知识点2.1、上次课程的主要知识点1、Eclipse的JDT、Junit、CVS2、三种Annotation:@Override、@Deprecated、@SuppresssWarnings。2.2、本次预计讲解的知识点1、掌握StringBuffer的使用2、掌握正则表达式、大数操作、日期格式化、Random类的使用3、理解System、Runtime、Process、Math、Calendar类的使用4、理解反射机制在程序中的应用北京MLDN软件实训中心联系电话:010-51283346第(2)页共(32)页E-Mail:mldnqa@163.com3、具体内容类库(API,应用程序接口),主要是由系统为了完成某些特定的操作而使用的系统提供的开发包,这些开发包的中的各个类依然符合与之前讲解的面向对象中的各个基本概念,但是对于类库的学习一定要学会查询DOC文档。3.1、StringBuffer(重点)在程序中可以使用String表示一个字符串的操作,但是String本身有如下特点:·两种声明的方式,而且比较的时候靠equals()比较内容·一个字符串的内容声明之后则不可改变实际上String最要命的一个问题就是内容无法改变,但是这种功能在实际的开发中又不可能避免掉,此时就可以依靠StringBuffer类来完成这种功能。当字符串的内容需要被改变的时候就使用StringBuffer。3.1.1、StringBuffer简介StringBuffer是java.lang提供的一个开发包,类的定义如下:publicfinalclassStringBufferextendsObjectimplementsSerializable,CharSequence此类实现了一个CharSequence接口,这个接口中定义了charAt()、length()等方法,而且String也是这个接口的子类。在String中如果要想完成两个字符串的连接,依靠“+”,但是在StringBuffer类中要想完成连接则需要使用的是append()方法,此方法被重载过很多次,而且每个方法返回类型都是StringBuffer:publicStringBufferappend(charc)。根据这种返回类型的特性,所以对于append()方法,可以采用代码链的形式,例如:StringBuffer对象.append().append()。范例:进行字符串的连接packageorg.lxh.api.stringbufferdemo;publicclassStringBufferDemo01{publicstaticvoidmain(String[]args){StringBufferbuf=newStringBuffer();buf.append(hello);//增加内容buf.append(world).append(!!!);System.out.println(buf);}}但是一定要注意的是,StringBuffer虽然与String都属于CharSequence的子类,但是这两个类的对象是不能够直接转换的,如果现在需要将一个StringBuffer的类型变成String的话,则必须依靠toString()方法完成。packageorg.lxh.api.stringbufferdemo;publicclassStringBufferDemo02{publicstaticvoidmain(String[]args){StringBufferbuf=newStringBuffer();buf.append(hello);//增加内容buf.append(world).append(!!!);北京MLDN软件实训中心联系电话:010-51283346第(3)页共(32)页E-Mail:mldnqa@163.comStringstr=buf.toString();//StringBuffer--StringSystem.out.println(str);}}由于StringBuffer与String相比内容是允许改变的,所以以后在进行引用传递的时候,肯定可以将方法中对StringBuffer操作的结果返回。packageorg.lxh.api.stringbufferdemo;publicclassStringBufferDemo03{publicstaticvoidmain(String[]args){StringBufferbuf=newStringBuffer();buf.append(hello);//增加内容buf.append(world).append(!!!);fun(buf);System.out.println(buf);}publicstaticvoidfun(StringBuffertemp){temp.append(\n).append(1).append(+).append(2).append(=).append(1+2);}}从程序中的最终结果来看,StringBuffer的内容是完全允许改变的。3.1.2、StringBuffer的应用根据StringBuffer的特点实际上就可以发现,对于需要经常改变内容的字符串肯定要使用StringBuffer,而相反,如果某些内容不需要随时改变的话,那么使用String就够了。范例:以下情况就必须使用StringBufferpackageorg.lxh.api.stringbufferdemo;publicclassStringBufferDemo04{publicstaticvoidmain(String[]args){StringBufferbuf=newStringBuffer();for(intx=0;x1000;x++){buf.append(x);}System.out.println(buf);}}一般在此种情况下往往都会使用StringBuffer。3.1.3、StringBuffer的方法StringBuffer本身也属于一个类,所以里面也提供了很多的操作方法,但是这些方法大部分都与String类似。但是StringBuffer也有许多自己的定义的方法,下面依次来看这些方法。北京MLDN软件实训中心联系电话:010-51283346第(4)页共(32)页E-Mail:mldnqa@163.com1、字符串反转·方法:publicStringBufferreverse()packageorg.lxh.api.stringbufferdemo;publicclassReverseDemo{publicstaticvoidmain(String[]args){StringBufferbuf=newStringBuffer();buf.append(helloworld!!!);System.out.println(buf.reverse());}}2、字符串替换·在String类中依靠replaceAll()方法完成替换·方法:publicStringBufferreplace(intstart,intend,Stringstr)|-需要指定替换的开始和结束位置packageorg.lxh.api.stringbufferdemo;publicclassReplaceDemo{publicstaticvoidmain(String[]args){StringBufferbuf=newStringBuffer();buf.append(helloworld!!!);System.out.println(buf.replace(0,buf.length(),XXX));}}3、插入内容在使用append()方法的时候实际上所有的内容都是采用顺序的方式依次连接到后面的位置,也可以使用insert()方法完成在指定位置上的增加:publicStringBufferinsert(intoffset,charc),此方法被重载过很多次,可以插入各种数据类型。packageorg.lxh.api.stringbufferdemo;publicclassInsertDemo{publicstaticvoidmain(String[]args){StringBufferbuf=newStringBuffer();buf.append(world!!!).insert(0,hello);System.out.println(buf);}}3.2、Runtime(理解)Runtime表示的是运行时的状态对象,即:每当有一个JVM进程产生的时候都会自动生成一个Runtime类的对象。但是在此类的定义中发现并没有构造方法的声明,很明显构造方法被私有化了,那么一旦构造方法被私有化,则内部一定会存在一个方法,可以取得本类的实例化对象:publicstaticRuntimegetRuntime()。以后查询DOC文档的时候只要没有发现构造方法,则构造方法一定被私有化了,属于单例设计,则此时一定可以从类的内部找到一个static方法,取得本类的实例。Runtimerun=Runtime.getRuntime();Runtime类可以取得一些系统的信息或者是建立一个新的进程。北京MLDN软件实训中心联系电话:010-51283346第(5)页共(32)页E-Mail:mldnqa@163.com3.2.1、取得系统信息在Runtime类中定义了如下的三个方法,这些方法可以取得系统的内存使用情况:·总共可以使用的内存:publiclongtotalMemory()·取得最大可用的内存:publiclongmaxMemory()·取得当前空余的内存:publiclongfreeMemory()范例:观察内存的使用情况packageorg.lxh.api.runtimedemo;publicclassRuntimeDemo01{publicstaticvoidmain(String[]args){Runtimerun=Runtime.getRuntime();System.out.println(**1、maxMemory:+run.maxMemory());System.out.println(**1、totalMemory:+run.totalMemory());System.out.println(**1、freeMemory:+run.freeMemory());Stringstr=;for(intx=0;x10000;x++){//将产生大量的垃圾str+=x;}System.out.println(=========产生垃圾之后============);System.out.println(**2、maxMemory:+run.maxMemory());System.out.println(**2、totalMemory:+run.totalMemory());System.out.println(**2、freeMemory:+run.freeMemory());}}由于本程序中产生大量的垃圾,所以当操作完成之后,freeMemory()的空间明显减少。在Java中对于垃圾收集实际上存在两种形式:·手工回收:publicvoidgc()·自动回收:由系统完成范例:再次观察垃圾收集之后的内存情况packageorg.lxh.api.runtimedemo;publicclassRuntimeDemo01{publicstaticvoidmain(String[]args){Runtimerun=Runtime.getRuntime();System.out.println(**1、maxMemory:+run.maxMemory());