第7章 常用系统类_第1页
第7章 常用系统类_第2页
第7章 常用系统类_第3页
第7章 常用系统类_第4页
第7章 常用系统类_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章常用系统类主要任务:介绍Java常用的系统类,包括JavaApplet、字符串类、输入输出流类、数学函数类、日期类、随机数类以及向量类等。本章主要内容1.Applet类2.字符串类3.输入输出流类4.其他常用类7.1Applet类Applet是一种特殊的Java程序,经过编译后可被嵌入到HTML文件中,并由Web浏览器内置的Java解释器执行。所有Applet都继承自同一个类:java.applet.Applet,这个类是Java语言的基础类,有关Applet的所有特性都被定义在这个类中。7.1.1Applet的特点Applet是一种在Web页中运行的小应用程序。Java的Applet与Application有一个明显的区别:Application是独立程序,可直接通过Java解释器来解释运行;而Applet只能在Web浏览器上运行,必须通过<Applet>标签将编译后的字节码文件嵌入到Web页中。Applet的限制有以下几个方面:·不能加载库函数或定义本地方法。·不能读写本地计算机上的文件系统。·除了下载它的服务器外不能和其它主机建立网络通讯。·不能运行本地计算机上的任何程序。·不能读取某些系统特性。·Applet打开的窗口和Application打开的窗口在外观上有所不同。Applet能够做的事情:

·可以和它所在的Web服务器建立网络连接。·能使Web浏览器方便地显示HTML文档内容。·离开网页后Applet可以继续运行也可以停止运行。·可在状态栏显示短信息。·可以调用同一个网页上的其它Applet中的公共方法。·可以播放声音文件。·可以从HTML的<Applet>标签中获取参数。·从本地计算机上加载Applet时没有从网络加载时所附带的限制。7.1.2Java和HTML的关系理解Applet和HTML的关系对应用Applet非常重要。HTML是网页设计语言,它采用一整套标记来定义Web页。一个HTML文件可定义一个Web页,文件的扩展名为.html或.htm。HTML可以没有Applet,但很多重要功能将无法实现,而Applet有赖于HTML才能运行,二者共同为Internet这个虚拟世界增添光彩。含有JavaApplet的Web页

Web页源文件部分内容

7.1.3Applet的生命周期与基本方法程序运行从开始到结束的过程称为程序的生命周期。独立应用程序的生命周期从main()方法开始,直到运行结束。而Applet应用程序的生命周期与浏览器相关。作为浏览器的一部分,Applet程序何时运行,何时结束都由浏览器控制,Applet对象只是作为浏览器窗口中运行的一个线程。Applet在浏览器中运行的全过程:在浏览器中打开包含Applet对象的页面时,创建并初始化其中的Applet对象。显示Applet时,启动Applet线程运行。不显示Applet时,停止Applet线程运行。在浏览器中关闭页面窗口时,销毁Applet对象。例7.1一个显示生命周期的Applet,如图所示。importjava.applet.Applet;importjava.awt.Graphics;publicclassLifeextendsApplet{StringBufferbuffer=newStringBuffer();publicvoidinit(){addWords("初始化...");}publicvoidstart(){addWords("开始...");}publicvoidstop(){addWords("停止...");}

publicvoiddestroy(){addWords("清除...");}voidaddWords(Strings){System.out.println(s);buffer.append(s);

repaint();}publicvoidpaint(Graphicsg){g.drawString(buffer.toString(),5,15);}}Applet的6种基本方法

1.初始化2.开始运行3.停止运行4.清除5.画出(显示)6.刷新7.1.4HTML和Applet的参数传递从HTML文件向Applet传递参数为用户提供了一个强有力的手段,通过参数传递大大加强了Applet的灵活性,使你的Applet不用修改和重新编译就能适用于多种情形。HTML语言有一个<Applet>标签,可加入各种属性来指定与Applet有关的内容,其中code、width、height是必选属性。如果需要向Applet传递参数,可通过param标签来指定。例7.2Applet的参数传递,如图所示。importjava.applet.Applet;importjava.awt.Graphics;publicclassAxsextendsApplet{Stringstring=null;intx,y;publicvoidinit(){string=getParameter("message");x=Integer.parseInt(getParameter("xPos"));y=Integer.parseInt(getParameter("yPos"));}

publicvoidpaint(Graphicsg){if(string!=null)g.drawString(string,x,y);g.drawString("参数x为"+x,30,60);g.drawString("参数y为"+y,30,90);}}相应的Axs.html文件内容如下:<html><Applet

codebase=e:/java/程序

code=Axs.classwidth=300height=120>

<paramname=messagevalue="参数传递示例">

<paramname=xPosvalue=30>

<paramname=yPosvalue=30></Applet></html>7.1.5Applet标签属性语法格式如下:

<Appletcode=字节码文件名width=宽度height=高度

[codebase=字节码文件路径][alt=可替换的文本内容][name=对象名][align=对齐方式][vspace=垂直间隔][hspace=水平间隔]>[<paramname=参数名value=参数值>]…[alternateHTML]</Applet>属性的用法Ⅰ:(p126)·code用来指定Applet字节码文件名,可省略扩展名。·width和height用来指定Applet显示区域的大小,以像素点为计量单位。·codebase用来指定Applet字节码文件路径。·name用来指定Applet的实例化对象名,使同一个Web页上的多个Applet可以互相识别出来。·alt用来指定替换显示的文本内容。属性的用法Ⅱ:(P126)·align用来指定Applet在浏览器窗口中的对齐方式。·vspace和hspace用来指定Applet四周的间隔,以像素点为计量单位。·param标签包含两个参数:name指定参数名,value指定参数值。·alternateHTML用来指定可替换的HTML代码。例7.3通过参数给Applet程序传递不同字号、不同颜色、文本内容的例子。如图所示。AP3.html代码如下:<html><Appletcode=AP3.classwidth=300height=100><paramname=textvalue="带有颜色的文本"><paramname=sizevalue=30><paramname=colorvalue=007000></Applet></html>其中,颜色的值为16进制数007000。AP3.java源程序代码如下:importjava.applet.*;importjava.awt.*;publicclassAP3extendsApplet{privateStringtext;privateintsize,color;publicvoidinit(){text=getParameter("text");//获得文本参数

size=Integer.parseInt(getParameter("size"));//获得字体大小

color=Integer.parseInt(getParameter("color"),16);//获得颜色值

}

publicvoidpaint(Graphicsg){Colorc=newColor(color);g.setColor(c);Fontf=newFont("",1,size);g.setFont(f);g.drawString(text,10,50);//显示指定大小颜色的字符串

}}7.2

字符串类字符串是程序设计中经常用到的数据结构,很多编程语言将字符串定义为基本数据类型。但在Java语言中,字符串被定义为一个类,无论是字符串常量还是变量,都必须先生成String类的实例对象然后才能使用。java.lang有两个字符串类String和StringBuffer,封装了字符串的全部操作。其中String用来处理创建以后不再改变的字符串,StringBuffer用来处理可变字符串。7.2.1字符串与字符串类字符串是一个完整的字符序列,可以包含字母、数字和其它符号。在Java中,用双引号括起来的字符串是字符串常量,又称为无名字符串对象,由Java自动创建。字符串常量可以赋给任何一个String对象引用,这样处理从表面上看起来和其它编程语言没有大的差别,照顾了程序员的习惯,但实际上存在着较大的差异。Java将字符串定义为类有哪些好处呢?首先,在任何系统平台上都能保证字符串本身以及对字符串的操作是一致的。其次,String和StringBuffer经过了精心设计,其功能是可以预见的。为此,二者都被说明为最终类,不能派生子类,以防用户修改其功能。最后,String和StringBuffer类在运行时要经历严格的边界条件检验,它们可以自动捕获异常,提高了程序的健壮性。例7.4字符串的翻转,如图所示。importjava.Applet.Applet;importjava.awt.Graphics;publicclassStringReverseextendsApplet{publicvoidpaint(Graphicsg){Stringstr="Thisisateststring";g.drawString("正常字符串:"+str,30,30);g.drawString("翻转字符串:"+reverse(str),30,60);}

publicStringreverse(Strings){intlen=s.length();StringBufferbuffer=newStringBuffer(len);for(inti=len-1;i>=0;i--)buffer.append(s.charAt(i));returnbuffer.toString();}}7.2.2字符串类的构造方法例7.5字符串的构造方法,如图所示。importjava.io.*;importjava.applet.Applet;importjava.awt.Graphics;publicclassStringDemoextendsApplet{byteb[]={'A','','b','y','t','e','','a','r','r','a','y'};charc[]={'A','','c','h','a','r','','a','r','r','a','y'};Strings1,s2,s3,s4,s5,s6,s7,s8,s9;StringBufferb1,b2,b3;

publicvoidinit(){b1=newStringBuffer();//创建一个空StringBuffer对象

b2=newStringBuffer(10);//创建长度为10的空StringBuffer对象

b3=newStringBuffer("Astringbuffer");//以字符串为参数创建StringBuffer对象

s1=newString();//创建一个空String对象

s2=newString("Astring");//以字符串为参数创建String对象

s3=newString(b3);//以StringBuffer对象为参数创建String对象

s4=newString(b);//以b为参数创建String对象,8位字节自动转为16位字符s5=newString(b,2,4);//从b的第3位,取4个元素为参数创建String对象

try{//如果下面的字符集编码不存在将抛出异常

s6=newString(b,2,10,"GBK");//同s5,最后的字符串参数为字符集编码

s7=newString(b,"GBK");//同s4,最后的字符串参数为字符集编码

}catch(UnsupportedEncodingExceptione){}//捕获异常

s8=newString(c);//以字符数组c为参数创建String对象

s9=newString(c,2,4);//从c的第3位,取4个元素为参数创建String对象

}

publicvoidpaint(Graphicsg){g.drawString("s1="+s1,20,20);g.drawString("s2="+s2,20,35);g.drawString("s3="+s3,20,50);g.drawString("s4="+s4,20,65);g.drawString("s5="+s5,20,80);g.drawString("s6="+s6,20,95);g.drawString("s7="+s7,150,20);g.drawString("s8="+s8,150,35);g.drawString("s9="+s9,150,50);g.drawString("b1="+b1.toString(),150,65);g.drawString("b2="+b2.toString(),150,80);g.drawString("b3="+b3.toString(),150,95);}}7.2.3String类的应用1.求字符串长度publicintlength()可返回字符串长度。例如:

Strings="欢迎使用Java语言";intlen=s.length();len的值为10。注意:Java采用Unicode编码,每个字符为16位长,因此汉字和其它符号一样只占用一个字符。另外,字符串的length方法和表示一个数组长度的length是不一样的,后者是一个实例变量。2.字符串连接publicStringconcat(Stringstr)可返回一个字符串,它将把参数str添加在原字符串的后边。例如:"to".concat("get").concat("her")的返回值为“together”。但在Java中,更多地是用“+”来连接字符串。例如:

Stringstr="hello";str=str+"world!";3.字符串截取字符串截取有两个途径:一次截取一个字符或一次截取一个子串。前者可通过charAt方法(参见例7.4),后者使用substring方法。它有两种形式:Stringsubstring(intstart)Stringsubstring(intstart,intend)其中start代表起始位置,end代表结束位置。例如:

Stringstr="ashortstring";Strings1=str.substring(2);Strings2=substring(8,14);4.字符串比较有两组方法用于字符串比较,一组是equals,用于比较两个字符串是否相等,返回值为布尔值。一组是compareTo,用于按字符顺序比较两个字符串,返回值为整型数。共有5个方法:

booleanequals(Objectobject)booleanequalsIgnoreCase(Stringstr)//忽略字符大小写

intcompareTo(Objectobject)intcompareTo(Stringstr)intcompareToIgnoreCase(Stringstr)//忽略字符大小写5.拷贝到字符串一个字符数组的内容可以全部或部分地拷贝到一个字符串中。有两个静态方法用于这种拷贝:staticStringcopyValueOf(char[]data)staticStringcopyValueOf(char[]data,intoffset,intcount)例如:

charc[]={'A','','c','h','a','r','','a','r','r','a','y'};Strings1=newString(),s2=newString();s1=s1.copyValueOf(c);s2=s2.copyValueOf(c,2,4);6.字符串大小写转换一个字符串可以整体转换为大写或小写字符,例如:

Strings1="allislowercase";Strings2="SomeIsUppercase";s1=s1.toUpperCase();s2=s2.toLowerCase();结果是s1的字符全部为大写,s2的字符全部为小写。7.字符串检索你可以在一个字符串中检索指定字符或子串的位置,如果检索到将返回一个代表位置的整数,否则返回值为-1。有两组方法实现这种操作,indexOf方法返回字符或子串首次出现的位置,lastIndexOf方法返回字符或子串最后一次出现的位置。我们各选择两个典型的方法来说明这种检索操作:

intindexOf(intch)intindexOf(Stringstr)intlastIndexOf(intch)intlastIndexOf(Stringstr)8.字符串转换为数组字符串可以转换为字节数组或字符数组,这种转换在Java流处理中十分有用。字符串转为字节数组将进行特别处理,因为字符是16位长,而字节为8位长,所以要将字符的高8位去掉,只保留低8位成为一个字节。有3个方法:

byte[]getBytes()//按系统缺省字符集编码转换为字节数组

byte[]getBytes(Stringenc)//其中enc为字符集编码,参见例7.5char[]toCharArray()//转换为字符数组9.转换为字符串String类提供了一组valueOf方法用来将其它数据类型转换成字符串,其参数可以是任何数据类型(byte类型除外)。它们都是是静态的,也就是说不必创建实例化对象即可直接调用这些方法,其基本用法为:valueOf(数据类型)。例如:

chardata[]={'a','b','c','d','e'};System.Out.println(String.valueOf(12D));System.Out.println(String.valueOf(3<2));System.Out.println(String.valueOf(data,1,3));7.2.4StringBuffer类的应用StringBuffer提供的方法有一些与String相同,有一些不同。最主要的方法有两组,一组是append,另一组是insert,每组各有10个方法。1.append方法append的10个方法主要在参数上有所不同,它可以把各种数据类型转换成字符串后添加进来(byte类型除外),其基本用法为:append(数据类型)。2.insert方法insert方法和append方法在使用上非常类似,唯一的不同是多了一个位置参数,该参数必须大于等于0。其基本用法为:insert(插入位置,数据类型)。例如:

chardata[]={'a','b','c','d','e'};StringBufferbuffer=newStringBuffer();buffer.insert(0,100);buffer.insert(0,2.5F);buffer.insert(3,'*');buffer.insert(0,250.0D);buffer.insert(5,"isequalto");最后,buffer的内容为“250.0isequalto2.5*100”。3.其它方法下面几个方法对程序员来说是经常用到的:publicStringBufferdelete(intstart,intend)//删除子串publicStringBufferdeleteCharAt(intindex)//删除指定位置上的字符publicStringBufferreplace(intstart,intend,Stringstr)//替换子串StringBufferreverse()//翻转字符串

7.3

输入输出(I/O)流类1.数据流(Stream)与数据流是传递信息数据的载体,是程序中的数据所经历的路径。流分为输入流与输出流两大部分。数据是指一组有顺序的、有起点和终点的字节集合,数据的发送者与数据接收者可以是:一个文件、磁盘、内存、另一个程序或是网络,数据可以是不同的格式:字符串、图像、声音或对象等。2.输入流与输出流建立数据流实际上就是建立数据传输通道,将起点和终点连接起来。例如,程序要读写文件,可以在程序和文件之间建立一个数据流。如果要从文件中读数据,则文件是起点,程序是终点;写入数据,则刚好相反。输入流只能读不能写,而输出流只能写不能读。

java.io包中具体声明了用于读写操作的输入流与输出流类,例如,FileInputStream(文件输入流类)、ObjectOutputStream(对象输出流类)。3.缓冲流对数据流的每次操作都是以字节为单位进行,即可以向输入流或输出流中读取或写入一个字节,显然这样的数据传输效率很低。为了提高数据传输效率,通常使用缓冲流(bufferedstream),即为一个流配有一个缓冲区(buffer)。当向一个缓冲流写入数据时,系统将数据发送到缓冲区,而不是直接发送到外部设备,缓冲区自动记录数据,当缓冲区满时,系统将数据全部发送到相应设备。7.3.2Java的标准数据流标准输入输出指在字符方式下(如DOS提示符),程序与系统进行交互的方式,键盘和显示器屏幕是标准输入输出设备,数据输入的起点为键盘,数据输出的终点是屏幕,输出的数据可以在屏幕上显示出来。标准输入输出的功能是通过Java中的系统类System实现的。System类在java.lang包中,是一个最终类,有三个公共的静态的成员变量:in、out和err,可以在程序中直接调用它们。1.标准输入System.inSystem.in作为InputStream类的对象实现标准输入,可以调用它的read方法来读取键盘数据。read方法有3种格式:

publicabstractintread()publicintread(byte[]b)publicintread(byte[]b,intoff,intlen)如果输入流结束,返回-1。发生I/O错时,会抛出IOException异常。2.标准输出System.outSystem.out作为PrintStream打印流类的对象实现标准输出,可以调用它的print、println或write方法来输出各种类型的数据。print和println的参数完全一样,不同之处在于println输出后换行而print不换行。write方法用来输出字节数组,在输出时不换行。例7.6从键盘输入字符,在屏幕显示输出数据。如图所示。classIO1{publicstaticvoidmain(String[]args)throwsjava.io.IOException{bytebuffer[]=newbyte[40];System.out.println("从键盘输入不超过40个字符,按回车键结束输入:");intcount=System.in.read(buffer);//读取标准输入流

System.out.println("保存在缓冲区的元素个数为"+count); System.out.println("输出buffer元素值:");for(inti=0;i<count;i++){System.out.print(""+buffer[i]);}System.out.println();System.out.println("输出buffer字符元素:");System.out.write(buffer,0,buffer.length);}}7.3.3java.io包中的数据流类及文件类java.io包封装了大量的数据流类,支持基于字节流的数据流和基于字符流的数据流。基本流类有4个,它们都是抽象类,它们是基于Unicode字符的输入流Reader和输出流Writer,基于二进制字节的输入流InputStream和输出流OutputStream。其它所有数据流类都是从它们中派生出来的子类。7.3.4数据流的应用例7.7基于字符型的文件输入输出流与缓冲流的应用。该程序具有复制文件,在屏幕显示文件内容的功能。运行结果如图所示。importjava.io.*;publicclassIO2{publicstaticvoidmain(String[]args)throwsIOException{FileReaderin=newFileReader("Hello.java");//建立文件输入流

BufferedReaderbin=newBufferedReader(in);//建立缓冲输入流

FileWriterout=newFileWriter("Hello.txt",true);//建立文件输出流

Stringstr;while((str=bin.readLine())!=null){System.out.println(str);out.write(str+"\n");}in.close();out.close();}7.4其它常用类本节介绍Java语言的6个常用类,它们是数学函数类Math,提供了基本数学运算;日期类Date、Calendar和DateFormat,提供了日期和时间操作;随机数类Random,提供了随机数生成器;向量类Vector,提供了类似于可变长数组的操作。7.1.4数学函数类Math

Math是一个最终类,含有基本数学运算函数,如指数运算、对数运算、求平方根和三角函数等,可以直接在程序中加Math前缀调用。下面是其成员变量和常用成员方法(举例说明):staticdoubleE //数学常量estaticdoublePI //圆周率πstaticdoublesin(doublea) //正弦函数staticdoublecos(doublea) //余弦函数staticdoubletan(doublea) //正切函数staticdoubleexp(doublea) //常数e的a次幂7.4.2日期类Java提供了3个日期类:Date、Calendar和DateFormat。在程序中,对日期的处理主要是如何获取、设置和格式化,Java的日期类提供了很多方法以满足程序员的各种需要。其中,Date主要用于创建日期对象并获取日期,Calendar可获取和设置日期,DateFormat主要用来创建日期格式化器。Java语言规定的基准日期为1970.1.100:00:00格林威治(GMT)标准时。例7.10日期的获取、设置和格式化,如图所示。importjava.text.*;importjava.util.*;importjava.awt.*;importjava.Applet.*;publicclassDate1extendsApplet{publicvoidpaint(Graphicsg){Datetoday;Calendarnow;DateFormatf1,f2;Strings1,s2;today=newDate();//获取系统当前日期

g.drawString("字符串格式:"+today.toString(),20,20);f1=DateFormat.getInstance();//以默认格式生成格式化器

s1=f1.format(today);//将日期转换为字符串

g.drawString("系统格式:"+s1,20,40);//生成长格式的中国时间格式化器f2=DateFormat.getTimeInstance(DateFormat.LONG,Locale.CHINA);s1=f1.format(today);//将日期转换为日期字符串

s2=f2.format(today);//将日期转换为时间字符串

g.drawString("中国格式:"+s1+""+s2,20,60);now=Calendar.getInstance();//获取系统时间

s1=now.get(now.HOUR)+"时"+now.get(now.MINUTE)+"分"+now.get(now.SECOND)+"秒";g.drawString("调整前时间:"+s1,20,80);now.set(2001,2,15,9,9,9);today=now.getTime();g.drawString("调整后时间:"+today.toString(),20,100);}}7.4.3随机数类RandomRandom有两个构造方法:Random()、Random(longseed)。前者使用系统时间作为种子数,后者使用指定的种子数。构造方法只是创建了随机数生成器,必须调用生成器的方法才能产生随机数。Random具有nextBoolean、nextInt等方法。例7.11生成各种类型的随机数,如图所示。importjava.util.*;classRD1{publicstaticvoidmain(Stringargs[]){Randomr1=newRandom(1234567890L);Randomr2=newRandom(1234567890L);booleanb=r1.nextBoolean();//随机数不为0时取真值

inti1=r1.nextInt(100);//产生大于等于0小于100的随机数

inti2=r2.nextInt(100);//同上

doubled1=r1.nextDouble();//产生大于等于0.0小于1.0的随机数

doubled2=r2.nextDouble();//同上

System.out.println(b);System.out.println(i1);System.out.println(i2);System.out.println(d1);System.out.printl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论