版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《Java语言程序设计基础教程》练习思考题参考答案第7章多线程7.1单项选择题1、Java语言具有许多优点和特点,下列选项中,哪个反映了Java程序并行机制的特点?()A、安全性B、多线程C、跨平台D、可移植解答:B2、Runnable接中的抽象方法是()。A、startB、stopC、yieldD、run解答:D3、有以下程序段(很难)classMyThreadextendsThread{publicstaticvoidmain(Stringargs[]){MyThreadt=newMyThread();MyThreads=newMyThread();t.start();System.out.print("one.");s.start();System.out.print("two.");}publicvoidrun(){System.out.print("Thread");}}则下面正确的选项是()A、编译失败B、程序运行结果为:one.Threadtwo.ThreadC、程序运行结果是:one.two.ThreaThreadD、程序运行结果不确定解答:D5、作为类中新线程的开始点,线程的执行是从下面哪个方法开始的。()A、publicvoidstart()B、publicvoidrun()C、publicvoidint()D、publicstaticvoidmain(Stringargs[])解答:A6、Java中用于给对象加“互斥锁”标记的关键字是。()A、synchronizedB、serializeC、transientD、static解答:A以下哪个方法用于定义线程的执行体?(C)A、start()B、init()C、run()D、synchronized。以下哪个关键字可以用来为对象加互斥锁?(D)A、transientB、staticC、serializeD、synchronized7.2填空题7.3简答题1、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?多线程有两种实现方法,分别是继承Thread类与实现Runnable接。用Thread类的子类创建线程对象,也就是从Thread类继承。实现Runnable接,用Thread类直接创建线程对象。同步的实现方面有两种,分别是synchronizedwait与notify2、创建一个新线程的方法,可以使用下面哪2种(A、继承java.lang.ThreO!,并且重载run方法。B、继承java.lang.Runnab粪,并且重载star方法。C、实现java.lang.thre类d实现run方法。D、实现java.lang.Runnab接,实现run方法。E、实现java.lang.ThreOd,实现star方法。解答:A,D3、线程在它的一个完整的生命周期中有哪4种状态?解答1:线程在它的一个完整的生命周期中通常要经历如下的4种状态:1.创建状态(newThread)2.可运行状态(Runnable)不可运行状态(NotRunnabl)4.死亡状态(Dead)解答2:第一是创建状态。在生成线程对象,并没有调用该对象的star方法,这是线程处于创建状态。第二是就绪状态。当调用了线程对象的star方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。第四是阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspendwait等方法都可以导致线程阻塞。第五是死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用star方法令其进入就绪。4、线程在什么状态时,调用isAlive方法返回的值是false5、建立线程有哪两种方法?解答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接。6、怎样设置线程的优先级?7、调用Thread类的什么方法可以启动一个线程?直接调用Thread类的run(方法可以启动一个线程吗?解答:线程调用start方法将启动线程,从新建状态进入就绪队列排队。不能直接调用Thread类的run(方法可以启动一个线程,我们调用了Thread的run(方法,它的行为就会和普通的方法调用一样。8、Thread类中的start(和run()方法有什么区别?解答:这个问题经常被问到,但还是能从此区分出面试者对Java线程模型的理解程度。start方法被用来启动新创建的线程,而且start内部调用了run(方法,这和直接调用run()方法的效果不一样。当你调用run(方法的时候,只会是在原来的线程中调用,没有新的线程启动,start方法才会启动新线程。9、进程和线程的区别?解答:进程=执行中的程序,每个进程都有自己独立的一块内存、一组系统资源。每一个进程的内部数据和状态都是完全独立的。线程=进程中单个顺序的流控制,同类的多个线程共享一块内存、一组系统资源。线程的运行开销很小。一个线程是进程的一个执行流程,一个进程可以同时包含多个线程。10、现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?解答:在T2线程的run(方法中加入代码T1.join在T3线程的run(方法中加入代码T2.join或者在主线程main(方法中,t1.start();try{t1.join();}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}t2.start();try{t2.join();}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}t3.start();11、Thread.start()Thread.run有什么区别?解答:通过调用Thead类的start方法来启动一个线程,使之进入就绪状态,当cpu分配时间该线程时,由JVM调度执行run(方法。直接使用run(方法叫做方法调用,不能启动线程。12、在一个对象上两个线程可以调用两个不同的同步实例方法吗?解答:不能,因为一个对象已经同步了实例方法,线程获取了对象的对象锁。所以只有执行完该方法释放对象锁后才能执行其它同步方法。13、当一个同步方法已经执行,线程能够调用对象上的非同步实例方法吗?解答:可以,一个非同步方法总是可以被调用而不会有任何问题。实际上,Java没有为非同步方法做任何检查,锁对象仅仅在同步方法或者同步代码块中检查。如果一个方法没有声明为同步,即使你在使用共享数据Java照样会调用,而不会做检查是否安全,所以在这种情况下要特别小心。一个方法是否声明为同步取决于临界区访问(critia^ctionaccess如果方法不访问临界区共享资源或者数据结构)就没必要声明为同步的。14、wait方法的作用?解答:wait方法用在synchronized方法或者synchronize块中。一般在判断语句中,如果某条件被触发,让当前线程wait并释放对象的锁。此时可以让其他线程可以对用以对象调用synchronize方法。直到调用notif或者notifyAl后wait的线程才有可能执行。所以一般wait和notify是成对出现的。15、启动一个线程是用run(还是start,()调用的时候有什么区别?(同第8题)解答:当然是start了),当调用线程的start方法的时候,线程就会进入到就绪状态。run(方法是线程的执行入,当线程从就绪状态进入到执行状态时首先要从run(方法开始执行。当然,我们也是可以直接通过线程对象调用该对象的run(方法的,只是这只是一次普通的调用,并没有启动任何一个线程。当我们调用start方法时,是另外启动了一个线程去执行线程类的代码,并不影响主程序的执行,但是调用run(方法的时候要等待run(方法内的代码执行完主程序才可以向下执行16、sleep(和wait()有什么区别?解答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAl)l后本线程才进入对象锁定池准备获得对象锁进入运行状态。7.4综合题14、编写一个死锁程序?15、在下面的代码区填入相应的代码,实现以下功能:通过继承Thread类的子类Threadl,来创建和启动一个线程tl;通过实现Runnable接的具体类Runner1,来创建和启动一个线程t2;publicclassTestThread1{publicstaticvoidmain(String[]args){/创建和启动一个线程t1,在下面写出相应代码Thread1t1=newThread1();t1.start();/创建和启动一个线程t2在下面写出相应代码Runner1r1=newRunner1();Threadt2=newThread(r1);t2.start();for(inti=0;i<1;i++){System.out.println("MainThread:"+i);}}}classRunner1implementsRunnable{publicvoidrun(){for(inti=0;i<1;i++){System.out.println("Runner1:"+i);}}}classThread1extendsThread{publicvoidrun(){for(inti=0;i<1;i++){System.out.println("Thread1:"+i);}}}16、现在有T1T2T3三个线程,怎样保证T2在T1执行完之后执行T3在T2执行完之后执行。请在相应区域写出实现该功能的代码。publicclassJoinDemo{publicstaticvoidmain(String[]args){T1t1=newT1("T1");T2t2=newT2("T2");T3t3=newT3("T3");t1.start();try{t1.join();}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}t2.start();try{t2.join();}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}t3.start();}}classT1extendThread{privateStringname;publicT1(Stringname){=name;}publicvoidrun()(for(inti=0;i<5;i++){try{sleep(5);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}System.out.println(this.n循环"+i);}classT2extendThread{privateStringname;publicT2(Stringname){=name;}publicvoidrun()(for(inti=0;i<5;i++){try{sleep(5);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}System.out.println(this.n循环"+i);}}}classT3extendThread(privateStringname;publicT3(Stringname){=name;}publicvoidrun()(for(inti=0;i<5;i++){System.out.println(this.n循环"+i);}}}第8章文件和流8.1单项选择题1、创建一个向文件“file.”x追加内容的输出流对象的语句是()。OutputStreamout=newFileOutputStream("file.txt”);OutputStreamout=newFileOutputStream("file.txt”,“append”);FileOutputStreamout=newFileOutputStream("fiUe)txt”,trFileOutputStreamout=newFileOutputStream(newfile("file.txt”));解答:C2、下面哪个流类属于面向字符的输入流()ABufferedWriterBFileInputStreamCObjectInputStreamDInputStreamReader答案:D3、以下关于File类说法错误的是(D)一个File对象代表了操作系统中的一个文件或者文件夹可以使用File对象创建和删除一个文件可以使用File对象创建和删除一个文件夹当一个File对象被垃圾回收时,系统上对应的文件或文件夹也被删除4、为了提高读写性能,可以采用什么流?(D)AInputStreamBDataInputStreamCOutputStreamDBufferedInputStream5、File类型中定义了什么方法来判断一个文件是否存在?(D)AcreateNewFileBrenameToCdeleteDexists6、File类型中定义了什么方法来创建多级目录?(C)AcreateNewFileBexistsCmkdirsDmkdir7、(Buffered流,缓冲区)有下面代码importjava.io.*;publicclassTestBufferedWriter{publicstaticvoidmain(Stringargs[])throwsException(FileWriterfw=newFileWriter("test.txt”);BufferedWriterbw=newBufferedWriter(fw);Stringstr=“HelloWorld”;bw.write(str))}在处放入什么代码,能够使得test.tx文件被正确写入?A.bw.close()B.bw.flush();C.fw.close();8.2填空题1、对于FileInputStrea来说,从方向上来分,它是输入流,从数据单位上分,它是―一字节___流。2、创建FileOutputStreai对象时,如果对应的文件在硬盘上不存在,则会_自动创建___;如果对应的文件在硬盘上已经存在,则―覆盖8.3简答题1、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?解答:字节输入流:InputStrean字节输出流:OutputStream字符输入流:Reader,字符输出流:Writer2、什么是java序列化,如何实现java序列化?解答:Java对象的序列化指将一个java对象写入OI流中,与此对应的是,对象的反序列化则从IO流中恢复该java对象。如果要让某个对象支持序列化机制,则必须让它的类是可序列化的,为了让某个类是可序列化的,该类必须实现Serializable或Externalizab接。8.4综合题3、FileInputStrea流的read方法和FileRead流的read方法有何不同?4、BufferedReade疏能直接指向一个文件对象吗?1、(FileInputStrea和FileOutputStrea)n利用FileInputStrea和FileOutputStream完成下面的要求:)用FileOutputStrean在当前目录下创建一个文件“test.txt并向文件输出“HelloWorld”,如果文件已存在,则在原有文件内容后面追加。)用FileInputStrea读入test.txt件,并在控制台上打印出test.tx中的内容。)要求用try-catch-fina处理异常,并且关闭流应放在finally中。FileInputStreamfin;FileOutputStreamfon;try(fin=newFileInputStream("hello.txt");on=newFileOutputStream("test.txt",true);fon.write("HelloWorld”);System.out.println(fin.read());fin.close();}catch(Exceptione){}finally{fin.close();}1、使用FileInputStrea类,编写一个程序,顺序读取d:/text.的文件里的内容,并显示在控制台上面,直到文件结束为止。?importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;publicclassep8_2{publicstaticvoidmain(String[]args){FileInputStreamfis;try{fis=newFileInputStream("text.txt");System.out.print("contentoftextis:");intb;while((b=fis.read())3/顺)序读取文件textM的内容{System.out.print((char)b);}fis.close();}catch(FileNotFoundExceptione){System.out.println(e);}catch(IOExceptione){System.out.println(e);}2、使用FileInputStre磷和FileOutputStrea类,编写一个程序,顺序读取d:/text.txt的文件里的内容,并将内容拷贝到d:/text.bak件?importjava.io.*;publicclassTestFileOutputStream{publicstaticvoidmain(String[]args){intb=0;FileInputStreamin=null;FileOutputStreamout=null;try{in=newFileInputStream("d:/text.txt");out=newFileOutputStream("d:/text.bak");while((b=in.read())!=-1){out.write(b);}in.close();out.close();}catch(FileNotFoundExceptione2){System.out.print找不到文件");System.exit(T);}catch(IOExceptione1){System.out.printtil件复制错误");System.exit(T);}System.out.print^文件已经复制");}}3、递归列出d:/jav目录下的所有子目录和文件,再显示到控制台importjava.io.*;publicclassFileList{publicstaticvoidmain(String[]args){Filef=newFile("d:/java");System.out.println(f.getName());tree(f,1);}privatestaticvoidtree(Filef,intlevel){for(inti=0;i<level;i++){preStr+="";}File[]childs=f.listFiles();for(inti=0;i<childs.length;i++){System.out.println(preStr+childs[i].getName());if(childs[i].isDirectory()){tree(childs[i],level+1);}}}}4、首先列出当前工作目录,然后将当前目录下面的所有文件取出,根据过滤器设置,显示后缀为java的所有文件。importjava.io.*;入//java.i包中所有的类publicclassep8_1{publicstaticvoidmain(Stringargs[]){Filedir=newFile("c://java_work用8F)le对象表示一个目录Filterfilter=newFilter("j生喊一;个名为java的过滤器System.out.println("listjavafilesindirectory"+dir);Stringfiles[]=dir.list(歹小毗融录dM下,文件后缀名为java的所有文件for(inti=0;i<files.length;i++){Filef=newFile(dir,file为[剧录d//下的文件或目录创建一个File对象if(f.isFile伽果该对象为后缀为java的文件,则打印文件名System.out.println("file"+f);elseSystem.out.println("subdirectory"如如果是目/录则打印目录名}}}classFilterimplementsFilenameFilter{Stringextent;this.extent=extent;publicbooleanaccept(Filedir,Stringname){returnname.endsWith("."+extent)回文件的后缀名}}5、请编写一个程序,开启一个文本文件,一次读取其内的一行文本,令每行形成一个String并将读出的Strin对象置于LinkedLis中,以反相次序显示出LinkedList内的所有内容。importjava.io.*;importjava.util.*;classexA4_2(publicstaticvoidmain(Stringargs[])throwsException(LinkedListlines=newLinkedList();BufferedReaderin=newBufferedReader(newFileReader("exA4_2.java"));Strings;while((s=in.readLine())!=null)lines.add(s);in.close();Listiteratorit=lines.listIterator(lines.size());while(it.hasPrevious())System.out.println(it.previous());}}6、在程序中写一个"HelloJavaWorlc#好世界"输出到操作系统文件Hello.tx文件中importjava.io.File;importjava.io.FileOutputStream;publicclassTest5{/***在程序中写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.tx文件中**程序分析:文件写入,要用到输出流FileOutputStream**/publicstaticvoidmain(String[]args){//向文件D:/Hello.txt写入内容Filefile=newFile("D:/Hello.txt");try{//创建输出流FileOutputStreamfos=newFileOutputStream(file);/把String类型的字符串转化为byte数组的数据保存在输出流中fos.write("HelloJavaWo你好世界".getBytes());fos.flush(刷//输出流fos.closeQ关闭输出流}catch(Exceptione){e.printStackTrace();}}}7、统计一个文件calcCharNum.txt(见附件)中字母'A'和'a出现的总次数importjava.io.File;importjava.io.FileInputStream;publicclassTest7{/***统计一个文件calcCharNum.txtt见附件)中字母'A和与出现的总次数**程序分析:读取文件用FileInputStream一次只读一个字节(一个字母就是一个字节),当字节内容和A或a相等时,相应的数量加1*/publicstaticvoidmain(String[]args){try{/添加文件路径Filefile=newFile("D:/java/calcCharNum.txt");//创建文件读取流FileInputStreamfis=newFileInputStream(file);intnumA=0;字母A的数量intnuma=0制母a的数量intlen=每次读取的字节数量while((len=fis.read())!=-1){/统计字母a的数量if(newString((char)len+"").equals("a")){numa++;}/统计字母A的数量if(newString((char)len+"").equals("A")){numA++;}}/打印出文件内字母的数量System.out.println的'数量是:"+numa);System.out.println的数量是:"+numA);System.out.println和"A出现的总次数:"+(numA+numa));fis.close关闭输入流}catch(Exceptione){e.printStackTrace();}}}8、输入两个文件夹名称,将A文件夹内容全部拷贝到B文件夹,要求使用多线程来操作。importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.List;importjava.util.Scanner;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importcom.xykj.lesson2.FileUtils;publicclassTest12{/**输入两个文件夹名称,将A文件夹内容全部拷贝到B文件夹,要求使用多线程来操作。**程序分析:1.拷贝文件里面的东西,要分析的东西还是蛮多的,要先建文件夹再拷贝里面的东西,而且要一层层的来搞2这里也需要文件遍历工具,直接调用第二题的工具类,不再重写3多线程的使用,可以直接在方法里面直接新建线程4对整个文件夹进行复制文件夹分隔符可以用\或/,其他的都是不对的*所有其中还对输入的分割符进行了替换*这题看起来比较长,分开看其实也不长*/publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.printinj"制的文件夹:");StringfromDir=scanner.nex接收输入System.out.printinj"制到哪里去:");StringtoDir=scanner.nex接;收输入〃把输入的地址转化为File类型FilefromFile=newFile(fromDir);FiletoFile=newFile(toDir);//新建线程newThread(){/里面做实际操作publicvoidrun(){//判断如果要复制的是文件,直接复制就可以了if(fromFile.isFile()){System.out.printlJ复制单个文件");copy(fromFile,toFile);}else{//要复制文件夹〃要防止一种无法进行的复制:比如说,要把复制的文件复制到自己的子文件夹里面〃举个例子:把D:/java/j文件夹复制到D:/java/jsp文件夹里面,//这会导致子文件不断增加的同时,而父文件也要不断增加,的一个死循环〃如果反过来,就没事,相当于只是简单的覆盖而已〃具体实现就是看:目的地地址包含复制的文件夹地址,就不允许操作if(toDir.replace("/","\\").toLowerCase().startsWith(fromDir.replace("/","\\").toLowerCase())){return;}〃复制文件(包括文件和文件夹)操作〃先获取所有的文件(包括文件和文件夹)List<File>list=FileUtils.getAllFiles(fromDir);〃创建一个线程池,加快复制的速度ExecutorServicethreadPool=Executors.newFixedThreadPool(20);//需要对每一个文件的路径进行处理for(Filefile:list){〃复制文件名Stringname=file.getAbsolutePath();〃把原来的文件路径换成新的文件路径StringtoName=name.replace(fromFile.getParenoDir+"/");System.out.println(name变+成"了"+toName);//如果是文件夹,直接创建if(file.isDirectory()){newFile(toName).mkdirs();}else{〃如果是文件,在线程里面复制threadPool.execute(newRunnable(){^Overridepublicvoidrun(){FilecopyFile=newFile(toName);〃先要有父文件夹copyFile.getParentFile().mkdirs();//开始复制文件copy(file,copyFile);}});}scanner.close(););}.start(开始线程}/复制文件的操作publicstaticvoidcopy(FilefromFile,FiletoFile){〃定义一个输入流FileInputStreamfis=null;〃定义一个输出流FileOutputStreamfos=null;try{//把复制地址的File封装后赋值给输入流对象fis=newFileInputStream(fromFile);//把目的地的File封装后复制给输出流的对象fos=newFileOutputStream(toFile);//创建一个容量,byte[]buf=newbyte[1024];//每次读取/写入的字节长度intlen=0;//边读边写while((len=fis.read(buf))!判断是否还能读到数据//把输入放到输出流里面fos.write(buf,0,len);}}catch(Exceptione){e.printStackTrace();}finally{try{//关闭输入流和输出流fis.close();fos.close();}catch(IOExceptione){e.printStackTrace();第9章异常处理9.1单项选择题1、为了捕获一个异常,代码必须放在下面()语句块中。A、try块B、catch块C、throws块D、finall块解答:A3、下列常见的系统定义的异常中,哪个是输入、输出异常?()A、ClassNotFoundExceptionB、IOExceptionC、FileNotFoundExceptionD、UnknownHostException解答:B4、在代码中,使用catch(Exception的好处是()A、只会捕获个别类型的异常B、捕获try块中产生的所有类型的异常C、忽略一些异常D、执行一些程序解答:B(太难)6、异常包含下列那一个内容?()A、程序中的语法错误B、程序的编译错误C、程序执行过程中遇到的事先没有预料到的情况D、程序事先定义好的可能出现的意外情况解答:C(太难)7、getCustomerInfo方法如下,try中可以捕获三种类型的异常,如果在该方法运行中产生了一个lOException将会输出什么结果(A)publicvoidgetCustomerInfo(){try{//dosomethingthatmaycauseanException}catch(java.io.FileNotFoundExceptionex){System.out.print("FileNotFoundException!");}catch(java.io.IOExceptionex){System.out.print("IOException!");}catch(java.lang.Exceptionex){System.out.print("Exception!");}}AIOException!BIOException!Exception!CFileNotFoundException!IOException!DFileNotFoundException!IOException!Exception!8、有如下代码段:1){if(unsafe()){//dosomething...}elseif(safe()){//dotheother...}}其中,方法unsafe()将抛出lOException,请问可将以下哪项填入第1行?(D)A、publiclOExceptionmethodName()B、publicvoidmethodName()C、publicvoidmethodName()throwlOExceptiDbnpublicvoidmethodName()throwsIOException9、java中用来抛出异常的关键字是(C)A、tryB、catchC、throwD、finally10、java中关于异常,下列说法正确的是(A)A、异常是一种对象B、一旦程序运行,异常将被创建。、为了保证程序运行速度,要尽量避免异常控制。、以上说法都不对11、(A)类是所有异常类的父类。A、ThrowableB、ErrorC、ExceptionD、AWTError12、对于。3七川子句的排列,下列哪种是正确的(B)A、父类在先,子类在后B、子类在先,父类在后C、有继承关系的异常不能在同一个try程序段内D、先有子类,其他如何排列都无关13、在异常处理中,如释放资源、关闭文件、关闭数据库等由(C来完成。A、try子句B、catch子句C、finall-子句D、throw子句14、当方法遇到异常又不知如何处理时,下列哪种说法是正确的(C)A、捕获异常B、抛出异常C、声明抛出异常D、嵌套异常15、一个异常将终止(A)A、整个程序B、只终止抛出异常的方法C、产生异常的try:块D、上面的说法都不对9.2填空题1、系统定义的运行异常都可以由系统自动抛出,而用户定义的异常应使用throw语句抛出。2、Throwable类是Java异常类的根类。3、抛出自定义异常用throws___j^句,在方法中抛出异常采用__throw__语句。4、异常――就是在程序的运行过程中所发生的错误5、捕获异常的统一出通过___finally____语句实现6、java语言的类库中提供了一个___Throwable类,所有的异常都必须是它的实例或它子类的实例7、Exception包括运行时异常和非运行时异常。8、catch子句都带一个参数,该参数是某个异常的类及其变量名,指明它所能够捕获的异常类型。。3七川用该参数去与―异常对象的类进行匹配。9、Java语言中有两种异常处理机制:捕获异常和声明抛弃异常。9.3简答题9、什么是Error异常类,什么是Exception异常类,两者在处理上有什么区别?解答:Java中的异常类可分为两大类:Error和ExceptionError包括动态链接失败,虚拟机错误等,通常Java程序不应该捕获这类异常,也不会抛弃这种异常。Exception包括运行时异常和非运行时异常。Error错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,比如,内存资源不足等,对于这种错误,程序基本无能为力,除了退出运行外别无选择。Exception违例)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者外部环境造成的异常,是程序必须处理的。2、Exception异常类包括运行时异常和非运行时异常,简单介绍两者内容。解答:继承于RuntimeException的类都属于运行时异常,例如算术异常(除零错)、数组下标越界异常等等。由于这些异常产生的位置是未知的,Java编译器允许程序员在程序中不对它们做出处理。除了运行时异常之外的其他由Exception继承来的异常类都是非运行时的异常,例如FileNotFoundException文件未找到异常)。Java编译器要求在程序中必须处理这种异常,捕获异常或者声明抛弃异常。3、Java语言中有哪两种异常处理机制,简单进行介绍。解答:捕获异常和声明抛弃异常。(1)捕获异常:当Java运行环境得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型的异常的方法后,运行环境把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。这是积极的异常处理机制。如果Java运行环境找不到可以捕获异常的方法,则运行环境将终止,相应的Java程序也将退出。(2)声明抛弃异常:如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃(throws)异常。这是一种消极的异常处理机制。9.4综合题7、编写一个异常类MyException,再编写一个类Student该类有一个产生异常的方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 技术评审合同模板2
- 甘肃省2024年度离岗创业项目市场营销合同2篇
- 货车运输合同范本范本
- 如何制作教学课件
- 设计合作协议书
- 石油化学:第3章石油及油品的物理性质
- 2024版技术咨询合同:新能源技术咨询服务2篇
- 人教版九年级化学第十一单元酸、碱、盐专题复习(四)酸、碱、盐化学性质的应用图像分析分层作业课件
- 活动合作协议合同范本完整版
- 人教版九年级化学第十一单元2化学肥料实验活动8粗盐中难溶性杂质的去除分层作业课件
- 机电一体化大专毕业论文完整版
- 猪场生产管理十二张表格0716
- 孙过庭书谱集字古诗word版
- 《让学生看见你的爱》心得体会
- 小型医疗机构量化分级评分表
- 220kV输变电工程电能损耗计算方法分析
- 中医冬季养生ppt课件
- 第二节菠菜PPT课件
- 艺人授权书范本
- 医学英语常用前后缀
- 分子生物学实验指导
评论
0/150
提交评论