版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章异常处理和常用系统类4.1异常处理机制4.2String类和StringBuffer类4.3AWT4.4Javaapplet第4章异常处理和常用系统类4.1异常处理机制4.1异常处理机制4.1.1什么是异常 用任何一种计算机语言设计的程序在运行时都可能出现各种错误,常见的错误如除数为0、文件不存在、文件不能打开、数组下标超过界限、内存不够用等。对于这种在运行中出现的错误,计算机系统中通常有两种处理办法。4.1异常处理机制4.1.1什么是异常 (1)由计算机系统本身直接检测程序错误,遇到错误时使程序终止运行。这种处理方法的优点是使程序设计比较简单。但是,对程序错误一概地采用终止运行办法,显然过于简单化。因为有些情况下,完全可以通过其他途径保持程序继续运行。比如,由于文件名不符合要求而无法打开文件,那么,可以提示用户输入一个新的文件名,从而使程序继续往下运行。 (1)由计算机系统本身直接检测程序错误,遇到错误时使程序终 (2)由程序员在程序设计中兼顾错误检测、错误信息显示和出错处理。这种处理方法的优点是减少了中途终止程序运行的可能性。但是,要求程序员在程序设计中不仅将精力用于正常处理过程,还要精心考虑错误检测和处理,这会使程序变得复杂。并且,这类错误检测往往是多数程序中重复甚至在一个程序中多次重复。而另一方面,如果程序中某处忽略了应有的检测,又将引起程序总体结果的错误。 (2)由程序员在程序设计中兼顾错误检测、错误信息显示和出错 Java采用异常处理机制来处理程序运行中的错误。按照这种机制,将程序运行中的所有错误都看成一种异常,通过对语句块的检测,一个程序中所有的异常被收集起来放在程序的某一段中去处理。在Java系统中,专门设置了一个调用栈,此栈中装有指向异常处理方法的指针。 Java采用异常处理机制来处理程序运行中的错误。按照这种机 在程序运行时,系统会把收集到的异常和异常处理指针所指的处理类型逐个比较,如果找到相符的类型,那么就转向相应的方法处理,如没有在调用栈中找到相应的类型指针,则终止程序运行,并显示解释信息。 在程序运行时,系统会把收集到的异常和异常处理指针所指的处理在Java程序中,异常一般由以下两种原因引起。(1)程序中存在非法操作,最简单的例子就是除数为0的除法操作。这种原因常常是程序员出于无意或大意造成的,所以称为隐式异常。常见的隐式异常可以通过java.lang包中的Throwable类的子类Error处理。在Java程序中,异常一般由以下两种原因引起。 (2)程序员在程序中使用了throw语句引起的异常。这种异常是程序员出于某种考虑有意安排的,所以称为显式异常。在throw语句中,都会指出处理显式异常的对象,这些对象都是由java.lang包的类Throwable的子类Exception再派生的子类生成的,每个对象完成对某种异常的处理功能,这些对象综合起来实现各种异常处理。 (2)程序员在程序中使用了throw语句引起的异常。这种异比如Array-IndexOutOfBoundsException子类处理数组越界异常,IOException子类处理输入输出异常,而ArithmeticException子类处理除数为0导致的算术异常等。比如Array-IndexOutOfBoundsExcept4.1.2异常的层次结构4.1.3异常的处理4.1.4创建自己的异常4.1.2异常的层次结构4.2String类和StringBuffer类4.2.1String类1.String类的主要构造方法 String类有多个构造方法,主要的有下列5个:4.2String类和StringBuffer类4.2.String();String(charchars[]);String(charchars[],intstartIndex,intnumChars);String(byteascii[],inthiByte);String(byteascii[],inthiByte,intstartIndex,intnumChars);String();第1个构造方法生成一个空串。第2个构造方法生成一个字符数组。第3个构造方法生成一个字符串,这个字符串是从字符数组chars[]中提取的,具体讲,即从chars[]数组的startIndex位置开始提取字符,共提取numChars个字符组成一个字符串。第1个构造方法生成一个空串。第4个构造方法是以字节数组的形式生成一个字符串,数组中存放字符串各字符对应的ASCII码。第5个构造方法也是从字节数组生成一个字符串。具体讲,就是以字节数组ascii[]的startIndex处开始,共提取numChars个字符构成字符串,如为ASCII字符,则hiByte的值为0。第4个构造方法是以字节数组的形式生成一个字符串,数组中存放字例4-5:importjavax.swing.*;publicclassStringConstructors{publicstaticvoidmain(Stringargs[]){charcharArray[]={'b','i','r','t','h','','d','a','y'};例4-5:bytebyteArray[]={(byte)'n',(byte)'e',(byte)'w',(byte)'',(byte)'y',(byte)'e',(byte)'a',(byte)'r'};StringBufferbuffer;Strings,s1,s2,s3,s4,s5,s6,s7,output;s=newString("hello");bytebyteArray[]={(byte)'nbuffer=newStringBuffer("WelcometoJavaProgramming!");s1=newString();s2=newString(s);s3=newString(charArray);s4=newString(charArray,6,3);s5=newString(byteArray,4,4);s6=newString(byteArray);s7=newString(buffer);buffer=newStringBuffer("Weoutput="s1="+s1+"\ns2="+s2+"\ns3="+s3+"\ns4="+s4+"\ns5="+s5+"\ns6="+s6+"\ns7="+s7;JOptionPane.showMessageDialog(null,output,"DemonstratingStringClassConstructors",
output="s1="+s1+"\ns2JOptionPane.INFORMATION_MESSAGE);System.exit(0);}}运行结果见图4-5。JOptionPane.INFORMATION_MESSAG图4-5图4-5程序分析:String类提供了9个构造函数,以便使用各种方法初始化String对象。例题共演示了7种。程序“s1=newString()”实例化一个新的String对象,并使用String类的缺省构造函数将它赋给引用s1。新的String对象没有字符(即空串),长度为0。程序分析:String类提供了9个构造函数,以便使用各种方法“s2=newString(s);”例化一个新的String对象,并使用String类的拷贝构造函数,将它赋给引用s2。s被当作参数传送给构造函数,新的String对象包含了String对象s中的字符的拷贝。在大多数情况下,没有必要拷贝已有的String对象。String对象是不变的,一旦创建后就不能改变它们的内容(字符串)。“s2=newString(s);”例化一个新的Strin而且,如果有一个或多个引用指向某个String对象,垃圾收集器就不能回收该对象。也就是说,String引用既不能用于修改String对象,也不能删除String对象。这一点与C语言或C++语言是不同的。“s3=newString(charArray);”实例化一个新的String对象,并使用以字符数组为参数的String类构造函数,将它赋给引用s3。新的String对象包含了数组中字符的拷贝。而且,如果有一个或多个引用指向某个String对象,垃圾收集“s4=newString(charArray,6,3);”实例化一个String对象,使用以一个字符数组和两个整数为参数的String类构造函数,将它赋给引用s4。第2个参数指定了在数组中拷贝字符的起始位置(offset)。第3个参数指定了数组中拷贝字符的数目(count),新的String对象包含了数组中指定字符的拷贝。如果offset或count参数指定的所取元素超过了字符数组的界限,就会产生StringIndexOutOfBoundsException的例外处理。“s4=newString(charArray,6,3);“s5=newString(byteArray,4,4);”实例化一个新的String对象,使用以一个byte数组和两个整数为参数的String类构造函数,将它赋给引用s5。第2和第3个参数分别指定了offset和count。新的String对象包含了数组中指定byte的拷贝。如果offset或count参数指定的所取元素超过了byte数组的界限,就会产生一个StringIndexOutOfBoundsException的例外处理。“s5=newString(byteArray,4,4);“s6=newString(byteArray);”实例化一个新的String对象,使用以一个byte数组为参数的String类构造函数,将它赋给引用s6。新的String对象包含了数组中byte的拷贝。“s7=newString(buffer);”实例化一个新的String对象,使用以StringBuffer为参数的String类构造函数,将它赋给引用s7。StringBuffer是一个可动态改变大小和内容的字符串。新的String对象包含了StringBuffer中字符的拷贝。“s6=newString(byteArray);”实例化2.String类的length、charAt和getChars方法 下面的例子演示了String类的length、charAt和getChars方法,它们分别用于确定String类的长度、取String某一指定位置的字符以及取String某一子串。2.String类的length、charAt和getCha3.String类的字符串比较例4-7:importjavax.swing.JOptionPane;publicclassStringCompare{publicstaticvoidmain(Stringargs[]){3.String类的字符串比较 Strings1,s2,s3,s4,output;s1=newString("hello");s2=newString("goodbye");s3=newString("HappyBirthday");s4=newString("happybirthday");output="s1="+s1+"\ns2="+s2+"\ns3="+s3+"\ns4="+s4+"\n\n"; Strings1,s2,s3,s4,outpuif(s1.equals("hello"))output+="s1equals\"hello\"\n";elseoutput+="s1doesnotequal\"hello\"\n";if(s1=="hello")output+="s1equals\"hello\"\n";elseoutput+="s1doesnotequal\"hello\"\n";if(s1.equals("hello"))if(s3.equalsIgnoreCase(s4))output+="s3equalss4\n";elseoutput+="s3doesnotequals4\n";output+="\pareTo(s2)is"+pareTo(s2)+if(s3.equalsIgnoreCase(s4"\pareTo(s1)is"+pareTo(s1)+"\pareTo(s1)is"+pareTo(s1)+"\pareTo(s4)is"+pareTo(s4)+"\pareTo(s3)is"+pareTo(s3)+"\n\n";"\pareTo(s1)is"+if(s3.regionMatches(0,s4,0,5))output+="First5charactersofs3ands4match\n";elseoutput+="First5charactersofs3ands4donotmatch\n";if(s3.regionMatches(true,0,s4,0,5))output+="First5charactersofs3ands4match";if(s3.regionMatches(0,s4,elseoutput+="First5charactersofs3ands4donotmatch";JOptionPane.showMessageDialog(null,output,"DemonstratingStringClassConstructors",
elseJOptionPane.INFORMATION_MESSAGE);System.exit(0);}}4.在字符串中定位字符和子串5.从字符串中抽取子串JOptionPane.INFORMATION_MESSAG6.字符串连接publicStringconcat(Stringst)可返回一个字符串,它将把参数str添加在原字符串的后面形成一个新的字符串。但在Java中,更多的是使用“+”来连接字符串。这里读者可能会产生一个小小的迷惑,因为前面我们讲过String对象是不能改变的。实际上,字符串的连接是由编译器利用StringBuffer的方法append来实现的。这在下面的章节中讲解。6.字符串连接例4-10:importjavax.swing.*;publicclassStringConcat{publicstaticvoidmain(Stringargs[]){Strings1=newString("Happy"),s2=newString("Birthday"),例4-10:output;output="s1="+s1+"\ns2="+s2;output+="\n\nResultofs1.concat(s2)="+s1.concat(s2);output+="\ns1afterconcatenation="+s1;JOptionPane.showMessageDialog(null,output,output;"DemonstratingStringMethodconcat",JOptionPane.INFORMATION_MESSAGE);System.exit(0);}}运行结果见图4-10。7.转化为字符串"DemonstratingStringMethod图4-10图4-104.2.2StringBuffer类 String类提供了很多处理字符串的功能。但是,一旦创建了字符串对象,它的内容就永远不会变。下面将讨论StringBuffer类的特点。这个类可以创建和操纵动态字符串,即可修改的字符串。每个StringBuffer都能够存储由它的容量所指定的一些字符。如果超过了StringBuffer的容量,容量就会自动地扩大以容纳多出来的字符。我们将看到,StringBuffer类还可用来实现用于字符串连接的运算符"+"。4.2.2StringBuffer类 String对象是常量字符串,StringBuffer对象是可修改的字符串。Java区分字符串和可修改的字符串是为了优化的目的。特别地,Java可以实现有关String对象的某些优化,例如多个引用共享一个String对象,因为它知道这些对象不会改变。 String对象是常量字符串,StringBuffer 注意:在选择是用String对象还是用StringBuffer对象来表示一个字符串时,如果该对象确实不会改变,则总是使用String对象,这样做可以改善性能。对String对象调用非String类的StringBuffer方法是一种语法错误。StringBuffer提供的方法有一些与String相同,有一些不同。最主要的方法有两组,一组是append,另一组是insert。 注意:在选择是用String对象还是用StringBuff4.3AWT4.3.1AWT概述4.3.2AWT的特点4.3.3AWT应用4.3AWT4.3.1AWT概述4.4Javaapplet4.4.1Javaapplet的特点 Javaapplet与Java应用程序不同。它们的不同之处有以下几个方面。 (1)Java应用程序中,必须有一个main()方法。Main()方法是程序的入口,当程序开始运行时,解释器首先查找main()方法并执行。而Javaapplet中则不需要main()方法,它必须嵌入HTML文件中,由支持Javaapplet的浏览器运行。4.4Javaapplet4.4.1Javaap(2)Java应用程序可以独立运行。而Javaapplet不能独立运行,需要依赖于网络浏览器。(3)Java应用程序所实现的功能是完全的,不需依赖于其他程序。而Javaapplet实现的功能是不完全的,它必须借助于浏览器中预先设计好的功能和已有的图形界面。Javaapplet只需接收浏览器发送给它的消息,并及时做出响应。(2)Java应用程序可以独立运行。而Javaapplet (4)Java应用程序中的所有方法的使用是通过调用实现的。可以人为控制。而Javaapplet中有一部分方法是固定的,只能由浏览器在特定时刻和场合调用,不能人为控制,但可以重载。 (4)Java应用程序中的所有方法的使用是通过调用实现的。4.4.2Javaapplet的程序结构 Javaapplet的一般程序结构如下: importjava.applet.*; importjava.awt.*; publicclass子类名extendsApplet //定义Applet类的子类4.4.2Javaapplet的程序结构{publicvoidinit(){方法体}//初始化方法
publicvoidstart(){方法体}//开始执行方法
publicvoidstop(){方法体}//停止执行方法
publicvoiddestroy(){方法体}//退出方法
publicvoidpaint(Graphicsg){方法体}//绘画方法}……{publicvoidinit()从Javaapplet程序结构看出,Javaapplet由若干类组成,无需main()方法,但必须有且仅有一个主类,该类是Applet类的子类,且被声明为public。程序被保存时,程序名必须命名为主类名,即程序名与主类名完全相同,后缀为.java。主类中定义了init()、start()、stop()、destroy()和paint()方法,这些方法是从Applet中继承的,有固定的含义,由浏览器在时机成熟时自动执行。从Javaapplet程序结构看出,Javaapplet4.4.3Applet的主要方法 在浏览器中运行Applet程序,从运行开始到运行结束,Applet程序需经历4个状态,分别是初始状态、运行状态、停止态和消亡状态。这4种状态分别对应Applet的4个主要方法:init()、start()、stop()和destroy()。4.4.3Applet的主要方法 对于支持Java的浏览器,如果在运行一个HTML文件时发现该文件包含Applet程序,浏览器就会生成该Applet的一个实例,并调用init()方法,进入初始化状态,在该状态下完成Applet的一些初始化操作。初始化完成后,浏览器接着调用start()方法,进入运行状态,真正开始执行Applet,在该状态下Applet通常会启动一些线程执行各种任务。 对于支持Java的浏览器,如果在运行一个HTML文件时发现 当退出当前主页时,浏览器调用stop()方法终止在运行状态下启动的线程,进入停止状态。当用户退出浏览器时,浏览器首先调用Applet的stop()方法,停止Applet的执行,然后调用destroy()方法释放Applet占用的系统资源,进入消亡状态。 当退出当前主页时,浏览器调用stop()方法终止在运行状态下面具体介绍init()、start()、stop()和destroy()4种方法。1.Init()方法在Applet执行过程中,init()方法只执行一次。当浏览器第一次浏览含有Applet的Web页载入Applet时,就会执行init()方法。下面具体介绍init()、start()、stop()和de由于在Applet执行过程中,该方法只被执行一次,所以可以在init()方法中进行一些只需执行一次的初始化操作,如变量的初始化、设置Applet初始状态、载入图形或字体、获取HTML中Applet标记单元中<PARAM>设定的参数等。由于在Applet执行过程中,该方法只被执行一次,所以可以在2.start()方法调用完init()方法,浏览器将调用start()方法启动Applet。和init()方法不同,在Applet的执行过程中,start()方法可被浏览器调用多次。在下列情况下,浏览器会调用start()方法。2.start()方法(1)浏览器从图标状态恢复为窗口状态或缩放浏览器窗口时。(2)Applet第一次载入时。(3)离开该Web页后又再返回时。(4)reload该页面时。在start()方法中可启动相关线程来控制Applet,给引入类对象发送消息,或以某种方式通知Applet开始运行。该方法是Applet的主体。(1)浏览器从图标状态恢复为窗口状态或缩放浏览器窗口时。3.stop()方法该方法与start()方法是相对应的,在Applet执行过程中,也会被浏览器调用多次。在下列情况下,浏览器会调用stop()方法。(1)浏览器从图标状态恢复为窗口状态或缩放浏览器窗口时。(2)离开Applet所在Web页时。3.stop()方法(3)reload该页面时。(4)关闭该Web页时。(5)从该Web页退出浏览器运行时。stop()方法可在适当时机挂起Applet,停止一些占用系统资源的工作,释放系统处理资源,以提高系统的运行速度。(3)reload该页面时。4.destroy()方法在彻底结束对该Web页的访问或退出浏览器时调用destroy()方法,卸载Applet,释放载入Applet时分配的系统资源。在Applet的执行过程中,destroy()方法只执行一次。4.destroy()方法destroy()方法是Applet类的类方法,只能用于Applet。可在该方法中执行释放系统资源的代码。但一般不需重写destroy()方法,因为Java运行系统本身会自动进行“垃圾”处理和内存管理,除非用了特殊的资源如创建的线程。destroy()方法是Applet类的类方法,只能用于Ap注意:destroy()方法与stop()方法不同。除了上述4个方法外,Applet还提供一个非常重要的方法:paint(Graphicsg)方法。该方法用于进行绘图的具体操作,但没有实现任何操作,用户可重写该方法,实现个性化的绘图操作。注意:destroy()方法与stop()方法不同。在Applet执行过程中,paint()方法可以被浏览器自动调用执行绘图操作,可调用多次。当调整浏览窗口大小、缩放浏览窗口、移动窗口或reload等需要重绘窗口时都会调用paint()方法。与其他4个方法不同的是,paint()中需传递一个参数,该参数是Graphics类的对象,由这个对象来完成具体的绘图操作。Graphics对象由浏览器自动创建并将其传送给paint()方法。在Applet执行过程中,paint()方法可以被浏览器自动注意:应在Applet中引入Graphics类的包或该类:importjava.awt.Graphics;注意:应在Applet中引入Graphics类的包或该类:例4-16:importjava.applet.*;importjava.awt.*;publicclassexample4_16extendsApplet{privateintInitCount;privateintStartCount;例4-16:privateintStopCount;privateintDestroyCount;privateintPaintCount;publicexample4_16(){InitCount=0;StartCount=0;StopCount=0;DestroyCount=0;PaintCount=0;}privateintStopCount;publicvoidinit(){InitCount++;}publicvoiddestroy(){DestroyCount++;}publicvoidinit()publicvoidstart(){StartCount++;}publicvoidstop(){StopCount++;}publicvoidstart()publicvoidpaint(Graphicsg){PaintCount++;g.drawString("Paint()方法执行了:"+PaintCount+"次。",20,20);g.drawString("Init()方法执行了:"+InitCount+"次。",20,70);publicvoidpaint(Graphicsg)g.drawString("Start()方法执行了:"+StartCount+"次。",20,120);g.drawString("Stop()方法执行了:"+StopCount+"次。",20,170);g.drawString("Destroy()方法执行了:"+DestroyCount+"次。",20,220);}}g.drawString("Start()方法执行了:"+4.4.4Javaapplet的运行 Javaapplet程序不能独立运行,必须由浏览器来运行,因此我们需编写一个HTML文件,通过<applet>标记将applet程序编译生成的字节码文件嵌入HTML文件,通知浏览器来运行Javaapplet。 如要运行例4-16,可编写如下的HTML文件:4.4.4Javaapplet的运行<html><head><title>example4_16</title></head><body><appletcode=example4_16.classwidth=300height=250></applet></body></html><html>第4章异常处理和常用系统类4.1异常处理机制4.2String类和StringBuffer类4.3AWT4.4Javaapplet第4章异常处理和常用系统类4.1异常处理机制4.1异常处理机制4.1.1什么是异常 用任何一种计算机语言设计的程序在运行时都可能出现各种错误,常见的错误如除数为0、文件不存在、文件不能打开、数组下标超过界限、内存不够用等。对于这种在运行中出现的错误,计算机系统中通常有两种处理办法。4.1异常处理机制4.1.1什么是异常 (1)由计算机系统本身直接检测程序错误,遇到错误时使程序终止运行。这种处理方法的优点是使程序设计比较简单。但是,对程序错误一概地采用终止运行办法,显然过于简单化。因为有些情况下,完全可以通过其他途径保持程序继续运行。比如,由于文件名不符合要求而无法打开文件,那么,可以提示用户输入一个新的文件名,从而使程序继续往下运行。 (1)由计算机系统本身直接检测程序错误,遇到错误时使程序终 (2)由程序员在程序设计中兼顾错误检测、错误信息显示和出错处理。这种处理方法的优点是减少了中途终止程序运行的可能性。但是,要求程序员在程序设计中不仅将精力用于正常处理过程,还要精心考虑错误检测和处理,这会使程序变得复杂。并且,这类错误检测往往是多数程序中重复甚至在一个程序中多次重复。而另一方面,如果程序中某处忽略了应有的检测,又将引起程序总体结果的错误。 (2)由程序员在程序设计中兼顾错误检测、错误信息显示和出错 Java采用异常处理机制来处理程序运行中的错误。按照这种机制,将程序运行中的所有错误都看成一种异常,通过对语句块的检测,一个程序中所有的异常被收集起来放在程序的某一段中去处理。在Java系统中,专门设置了一个调用栈,此栈中装有指向异常处理方法的指针。 Java采用异常处理机制来处理程序运行中的错误。按照这种机 在程序运行时,系统会把收集到的异常和异常处理指针所指的处理类型逐个比较,如果找到相符的类型,那么就转向相应的方法处理,如没有在调用栈中找到相应的类型指针,则终止程序运行,并显示解释信息。 在程序运行时,系统会把收集到的异常和异常处理指针所指的处理在Java程序中,异常一般由以下两种原因引起。(1)程序中存在非法操作,最简单的例子就是除数为0的除法操作。这种原因常常是程序员出于无意或大意造成的,所以称为隐式异常。常见的隐式异常可以通过java.lang包中的Throwable类的子类Error处理。在Java程序中,异常一般由以下两种原因引起。 (2)程序员在程序中使用了throw语句引起的异常。这种异常是程序员出于某种考虑有意安排的,所以称为显式异常。在throw语句中,都会指出处理显式异常的对象,这些对象都是由java.lang包的类Throwable的子类Exception再派生的子类生成的,每个对象完成对某种异常的处理功能,这些对象综合起来实现各种异常处理。 (2)程序员在程序中使用了throw语句引起的异常。这种异比如Array-IndexOutOfBoundsException子类处理数组越界异常,IOException子类处理输入输出异常,而ArithmeticException子类处理除数为0导致的算术异常等。比如Array-IndexOutOfBoundsExcept4.1.2异常的层次结构4.1.3异常的处理4.1.4创建自己的异常4.1.2异常的层次结构4.2String类和StringBuffer类4.2.1String类1.String类的主要构造方法 String类有多个构造方法,主要的有下列5个:4.2String类和StringBuffer类4.2.String();String(charchars[]);String(charchars[],intstartIndex,intnumChars);String(byteascii[],inthiByte);String(byteascii[],inthiByte,intstartIndex,intnumChars);String();第1个构造方法生成一个空串。第2个构造方法生成一个字符数组。第3个构造方法生成一个字符串,这个字符串是从字符数组chars[]中提取的,具体讲,即从chars[]数组的startIndex位置开始提取字符,共提取numChars个字符组成一个字符串。第1个构造方法生成一个空串。第4个构造方法是以字节数组的形式生成一个字符串,数组中存放字符串各字符对应的ASCII码。第5个构造方法也是从字节数组生成一个字符串。具体讲,就是以字节数组ascii[]的startIndex处开始,共提取numChars个字符构成字符串,如为ASCII字符,则hiByte的值为0。第4个构造方法是以字节数组的形式生成一个字符串,数组中存放字例4-5:importjavax.swing.*;publicclassStringConstructors{publicstaticvoidmain(Stringargs[]){charcharArray[]={'b','i','r','t','h','','d','a','y'};例4-5:bytebyteArray[]={(byte)'n',(byte)'e',(byte)'w',(byte)'',(byte)'y',(byte)'e',(byte)'a',(byte)'r'};StringBufferbuffer;Strings,s1,s2,s3,s4,s5,s6,s7,output;s=newString("hello");bytebyteArray[]={(byte)'nbuffer=newStringBuffer("WelcometoJavaProgramming!");s1=newString();s2=newString(s);s3=newString(charArray);s4=newString(charArray,6,3);s5=newString(byteArray,4,4);s6=newString(byteArray);s7=newString(buffer);buffer=newStringBuffer("Weoutput="s1="+s1+"\ns2="+s2+"\ns3="+s3+"\ns4="+s4+"\ns5="+s5+"\ns6="+s6+"\ns7="+s7;JOptionPane.showMessageDialog(null,output,"DemonstratingStringClassConstructors",
output="s1="+s1+"\ns2JOptionPane.INFORMATION_MESSAGE);System.exit(0);}}运行结果见图4-5。JOptionPane.INFORMATION_MESSAG图4-5图4-5程序分析:String类提供了9个构造函数,以便使用各种方法初始化String对象。例题共演示了7种。程序“s1=newString()”实例化一个新的String对象,并使用String类的缺省构造函数将它赋给引用s1。新的String对象没有字符(即空串),长度为0。程序分析:String类提供了9个构造函数,以便使用各种方法“s2=newString(s);”例化一个新的String对象,并使用String类的拷贝构造函数,将它赋给引用s2。s被当作参数传送给构造函数,新的String对象包含了String对象s中的字符的拷贝。在大多数情况下,没有必要拷贝已有的String对象。String对象是不变的,一旦创建后就不能改变它们的内容(字符串)。“s2=newString(s);”例化一个新的Strin而且,如果有一个或多个引用指向某个String对象,垃圾收集器就不能回收该对象。也就是说,String引用既不能用于修改String对象,也不能删除String对象。这一点与C语言或C++语言是不同的。“s3=newString(charArray);”实例化一个新的String对象,并使用以字符数组为参数的String类构造函数,将它赋给引用s3。新的String对象包含了数组中字符的拷贝。而且,如果有一个或多个引用指向某个String对象,垃圾收集“s4=newString(charArray,6,3);”实例化一个String对象,使用以一个字符数组和两个整数为参数的String类构造函数,将它赋给引用s4。第2个参数指定了在数组中拷贝字符的起始位置(offset)。第3个参数指定了数组中拷贝字符的数目(count),新的String对象包含了数组中指定字符的拷贝。如果offset或count参数指定的所取元素超过了字符数组的界限,就会产生StringIndexOutOfBoundsException的例外处理。“s4=newString(charArray,6,3);“s5=newString(byteArray,4,4);”实例化一个新的String对象,使用以一个byte数组和两个整数为参数的String类构造函数,将它赋给引用s5。第2和第3个参数分别指定了offset和count。新的String对象包含了数组中指定byte的拷贝。如果offset或count参数指定的所取元素超过了byte数组的界限,就会产生一个StringIndexOutOfBoundsException的例外处理。“s5=newString(byteArray,4,4);“s6=newString(byteArray);”实例化一个新的String对象,使用以一个byte数组为参数的String类构造函数,将它赋给引用s6。新的String对象包含了数组中byte的拷贝。“s7=newString(buffer);”实例化一个新的String对象,使用以StringBuffer为参数的String类构造函数,将它赋给引用s7。StringBuffer是一个可动态改变大小和内容的字符串。新的String对象包含了StringBuffer中字符的拷贝。“s6=newString(byteArray);”实例化2.String类的length、charAt和getChars方法 下面的例子演示了String类的length、charAt和getChars方法,它们分别用于确定String类的长度、取String某一指定位置的字符以及取String某一子串。2.String类的length、charAt和getCha3.String类的字符串比较例4-7:importjavax.swing.JOptionPane;publicclassStringCompare{publicstaticvoidmain(Stringargs[]){3.String类的字符串比较 Strings1,s2,s3,s4,output;s1=newString("hello");s2=newString("goodbye");s3=newString("HappyBirthday");s4=newString("happybirthday");output="s1="+s1+"\ns2="+s2+"\ns3="+s3+"\ns4="+s4+"\n\n"; Strings1,s2,s3,s4,outpuif(s1.equals("hello"))output+="s1equals\"hello\"\n";elseoutput+="s1doesnotequal\"hello\"\n";if(s1=="hello")output+="s1equals\"hello\"\n";elseoutput+="s1doesnotequal\"hello\"\n";if(s1.equals("hello"))if(s3.equalsIgnoreCase(s4))output+="s3equalss4\n";elseoutput+="s3doesnotequals4\n";output+="\pareTo(s2)is"+pareTo(s2)+if(s3.equalsIgnoreCase(s4"\pareTo(s1)is"+pareTo(s1)+"\pareTo(s1)is"+pareTo(s1)+"\pareTo(s4)is"+pareTo(s4)+"\pareTo(s3)is"+pareTo(s3)+"\n\n";"\pareTo(s1)is"+if(s3.regionMatches(0,s4,0,5))output+="First5charactersofs3ands4match\n";elseoutput+="First5charactersofs3ands4donotmatch\n";if(s3.regionMatches(true,0,s4,0,5))output+="First5charactersofs3ands4match";if(s3.regionMatches(0,s4,elseoutput+="First5charactersofs3ands4donotmatch";JOptionPane.showMessageDialog(null,output,"DemonstratingStringClassConstructors",
elseJOptionPane.INFORMATION_MESSAGE);System.exit(0);}}4.在字符串中定位字符和子串5.从字符串中抽取子串JOptionPane.INFORMATION_MESSAG6.字符串连接publicStringconcat(Stringst)可返回一个字符串,它将把参数str添加在原字符串的后面形成一个新的字符串。但在Java中,更多的是使用“+”来连接字符串。这里读者可能会产生一个小小的迷惑,因为前面我们讲过String对象是不能改变的。实际上,字符串的连接是由编译器利用StringBuffer的方法append来实现的。这在下面的章节中讲解。6.字符串连接例4-10:importjavax.swing.*;publicclassStringConcat{publicstaticvoidmain(Stringargs[]){Strings1=newString("Happy"),s2=newString("Birthday"),例4-10:output;output="s1="+s1+"\ns2="+s2;output+="\n\nResultofs1.concat(s2)="+s1.concat(s2);output+="\ns1afterconcatenation="+s1;JOptionPane.showMessageDialog(null,output,output;"DemonstratingStringMethodconcat",JOptionPane.INFORMATION_MESSAGE);System.exit(0);}}运行结果见图4-10。7.转化为字符串"DemonstratingStringMethod图4-10图4-104.2.2StringBuffer类 String类提供了很多处理字符串的功能。但是,一旦创建了字符串对象,它的内容就永远不会变。下面将讨论StringBuffer类的特点。这个类可以创建和操纵动态字符串,即可修改的字符串。每个StringBuffer都能够存储由它的容量所指定的一些字符。如果超过了StringBuffer的容量,容量就会自动地扩大以容纳多出来的字符。我们将看到,StringBuffer类还可用来实现用于字符串连接的运算符"+"。4.2.2StringBuffer类 String对象是常量字符串,StringBuffer对象是可修改的字符串。Java区分字符串和可修改的字符串是为了优化的目的。特别地,Java可以实现有关String对象的某些优化,例如多个引用共享一个String对象,因为它知道这些对象不会改变。 String对象是常量字符串,StringBuffer 注意:在选择是用String对象还是用StringBuffer对象来表示一个字符串时,如果该对象确实不会改变,则总是使用String对象,这样做可以改善性能。对String对象调用非String类的StringBuffer方法是一种语法错误。StringBuffer提供的方法有一些与String相同,有一些不同。最主要的方法有两组,一组是append,另一组是insert。 注意:在选择是用String对象还是用StringBuff4.3AWT4.3.1AWT概述4.3.2AWT的特点4.3.3AWT应用4.3AWT4.3.1AWT概述4.4Javaapplet4.4.1Javaapplet的特点 Javaapplet与Java应用程序不同。它们的不同之处有以下几个方面。 (1)Java应用程序中,必须有一个main()方法。Main()方法是程序的入口,当程序开始运行时,解释器首先查找main()方法并执行。而Javaapplet中则不需要main()方法,它必须嵌入HTML文件中,由支持Javaapplet的浏览器运行。4.4Javaapplet4.4.1Javaap(2)Java应用程序可以独立运行。而Javaapplet不能独立运行,需要依赖于网络浏览器。(3)Java应用程序所实现的功能是完全的,不需依赖于其他程序。而Javaapplet实现的功能是不完全的,它必须借助于浏览器中预先设计好的功能和已有的图形界面。Javaapplet只需接收浏览器发送给它的消息,并及时做出响应。(2)Java应用程序可以独立运行。而Javaapplet (4)Java应用程序中的所有方法的使用是通过调用实现的。可以人为控制。而Javaapplet中有一部分方法是固定的,只能由浏览器在特定时刻和场合调用,不能人为控制,但可以重载。 (4)Java应用程序中的所有方法的使用是通过调用实现的。4.4.2Javaapplet的程序结构 Javaapplet的一般程序结构如下: importjava.applet.*; importjava.awt.*; publicclass子类名extendsApplet //定义Applet类的子类4.4.2Javaapplet的程序结构{publicvoidinit(){方法体}//初始化方法
publicvoidstart(){方法体}//开始执行方法
publicvoidstop(){方法体}//停止执行方法
publicvoiddestroy(){方法体}//退出方法
publicvoidpaint(Graphicsg){方法体}//绘画方法}……{publicvoidinit()从Javaapplet程序结构看出,Javaapplet由若干类组成,无需main()方法,但必须有且仅有一个主类,该类是Applet类的子类,且被声明为public。程序被保存时,程序名必须命名为主类名,即程序名与主类名完全相同,后缀为.java。主类中定义了init()、start()、stop()、destroy()和paint()方法,这些方法是从Applet中继承的,有固定的含义,由浏览器在时机成熟时自动执行。从Javaapplet程序结构看出,Javaapplet4.4.3Applet的主要方法 在浏览器中运行Applet程序,从运行开始到运行结束,Applet程序需经历4个状态,分别是初始状态、运行状态、停止态和消亡状态。这4种状态分别对应Applet的4个主要方法:init()、start()、stop()和destroy()。4.4.3Applet的主要方法 对于支持Java的浏览器,如果在运行一个HTML文件时发现该文件包含Applet程序,浏览器就会生成该Applet的一个实例,并调用init()方法,进入初始化状态,在该状态下完成Applet的一些初始化操作。初始化完成后,浏览器接着调用start()方法,进入运行状态,真正开始执行Applet,在该状态下Applet通常会启动一些线程执行各种任务。 对于支持Java的浏览器,如果在运行一个HTML文件时发现 当退出当前主页时,浏览器调用stop()方法终止在运行状态下启动的线程,进入停止状态。当用户退出浏览器时,浏览器首先调用Applet的stop()方法,停止Applet的执行,然后调用destroy()方法释放Applet占用的系统资源,进入消亡状态。 当退出当前主页时,浏览器调用stop()方法终止在运行状态下面具体介绍init()、start()、stop()和destroy()4种方法。1.Init()方法在Applet执行过程中,init()方法只执行一次。当浏览器第一次浏览含有Applet的Web页载入Applet时,就会执行init()方法。下面具体介绍init()、start()、stop()和de由于在Applet执行过程中,该方法只被执行一次,所以可以在init()方法中进行一些只需执行一次的初始化操作,如变量的初始化、设置Applet初始状态、载入图形或字体、获取HTML中Applet标记单元中<PARAM>设定的参数等。由于在Applet执行过程中,该方法只被执行一次,所以可以在2.start()方法调用完init()方法,浏览器将调用start()方法启动Applet。和init()方法不同
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖南永州市蓝山县城市建设投资开发有限责任公司专业技术岗位招聘12人笔试参考题库附带答案详解
- 2025海南省粮食和物资储备集团有限公司招聘下属企业财务经理1人笔试参考题库附带答案详解
- 2025浙江温州市瓯海区农合实业发展公司仙岩资金互助会招聘1人笔试参考题库附带答案详解
- 2025浙江宁波市基础设施运营管理有限公司招聘5人笔试参考题库附带答案详解
- 2025江苏盐城市东台市交通投资建设集团有限公司招录城乡公交班线驾驶员3人笔试参考题库附带答案详解
- 2026及未来5年中国4-二甲氨基吡啶市场数据分析及竞争策略研究报告
- 浙江国企招聘2025嘉兴桐乡市国有资本投资运营有限公司招聘笔试历年备考题库附带答案详解
- 马鞍山市2025安徽马鞍山市事业单位定向招聘驻马部队随军家属2人笔试历年参考题库典型考点附带答案详解
- 福州市2025福建福州市仓山区城市管理局编外人员招聘8人笔试历年参考题库典型考点附带答案详解
- 海南省2025海南红色娘子军纪念园管理中心招聘事业编制工作人员3人(第1号)笔试历年参考题库典型考点附带答案详解
- 基坑沟槽开挖安全培训课件
- 保安安全培训资料大全课件
- 2025湖北省高考生物试卷(含解析)
- 同居协议分手协议书模板
- 窗口人员礼仪培训课件
- 期中自主检测卷(1-4单元)(试题)(含答案)2024-2025学年一年级下册数学人教版
- 工业厂房施工环境保护体系与措施
- 小学生公安课件
- 辽宁劳务派遣管理办法
- 维修人员激励管理办法
- GB 37478-2025道路和隧道照明用LED灯具能效限定值及能效等级
评论
0/150
提交评论