Try中如果发现错误,即跳出try去匹配catch,那么try后面的语句就不会被执行

例:public void print() throws Exception.

 

对于方法a,如果它定义了throws Exception。那么当它调用的方法b返回异常对象时,方法a并不处理,而将这个异常对象向上一级返回,如果所有的方法均不进行处理,返回到主方法,程序中止。(要避免所有的方法都返回的使用方法,因为这样出现一个很小的异常就会令程序中止)。

 

如果在方法的程序中有一行throw new Exception(),返回错误,那么其后的程序不执行。因为错误返回后,后面的程序肯定没有机会执行,那么JAVA认为以后的程序没有存在的必要。

 

对于try……catch格式:

try  {可能出现错误的代码块}  catch(exception e){进行处理的代码} ;

                               对象变量的声明

 

用这种方法,如果代码正确,那么程序不经过catch语句直接向下运行;

如果代码不正确,则将返回的异常对象和e进行匹配,如果匹配成功,则处理其后面的异常处理代码。(如果用exception来声明e的话,因为exception为所有exception对象的父类,所有肯定匹配成功)。处理完代码后这个例外就完全处理完毕,程序会接着从出现异常的地方向下执行(是从出现异常的地方还是在catch后面呢?利用程序进行验证)。最后程序正常退出。

 

Try中如果发现错误,即跳出try去匹配catch,那么try后面的语句就不会被执行。

 

 1 package TomText;
 2 //定义一个求圆面积的类。
 3 public class TomText_48 {
 4     private double radius;
 5     final double pi=3.14;
 6     public  double setradius(double r){
 7         return radius=r;
 8     }
 9     
10     public void getRadius() {
11         this.setradius(radius);
12     }
13     public double calculateArea( ) {
14         return pi*radius*radius;
15     }
16     public void res(){
17         System.out.println(this.calculateArea());
18     }
19     public static void main(String[] args){
20         TomText_48 t=new TomText_48();
21         t.setradius(44);
22         double s=t.calculateArea();
23         t.res();
24         System.out.println(s);
25     }
26 
27 }

 

 

转载于:https://www.cnblogs.com/borter/p/9419397.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、异常捕获 我们在程序经常会出现各种各样的异常,你如果想要你的程序变得坚强一些。 在你的代码应该经常性的使用try-catch进行异常捕获。 哪行代码有可能出现异常,你就踹它一脚。 语法: try { 可能会出现异常的代码; .... ... ... } //trycatch之间不能有其他的代码 catch { 出现异常后要执行的代码; } 执行过程:如果try的代码没有出现异常,那么catch的代码不会执行。 如果try的代码出现了异常,那怕这行出现异常的代码后面还有一百行都不会执行了, 而是直接跳到catch执行代码 2、变量的作用域 变量的作用域就是你能够使用到这个变量的范围。 变量的作用域一般从声明它的那个括号开始到那个括号所对应的结束的括号结束。 在这个范围内,我们可以访问并使用变量。超出这个范围就访问不到了 3、switch-case 用来处理多条件的定值的判断。 语法: switch(变量或者表达式的值) { case 值1:要执行的代码; break; case 值2:要执行的代码; break; case 值3:要执行的代码; break; .......... default:要执行的代码; break; } 执行过程:程序执行到switch处,首先将括号变量或者表达式的值计算出来, 然后拿着这个值依次跟每个case后面所带的值进行匹配,一旦匹配成功,则执行 该case所带的代码,执行完成后,遇到break。跳出switch-case结构。 如果,跟每个case所带的值都不匹配。就看当前这个switch-case结构是否存在 default,如果有default,则执行default语句,如果没有default,则该switch-case结构 什么都不做。 4、循环结构 while循环: while(循环条件) { 循环体; } 执行过程:程序运行到while处,首先判断while所带的小括号内的循环条件是否成立, 如果成立的话,也就是返回一个true,则执行循环体,执行完一遍循环体后,再次回到 循环条件进行判断,如果依然成立,则继续执行循环体,如果不成立,则跳出while循环。 在while循环当,一般总会有那么一行代码,能够改变循环条件,使之终有一天不再成立, 如果没有那么一行代码能够改变循环条件,也就是循环条件永远都成立,我们称之这种循环 叫做死循环。 最简单的最常用的死循环: while(true) { } 特点:先判断,再执行,有可能一遍循环都不执行。 5、break 1)、可以跳出switch-case结构。 2)、可以跳出当前循环。 break一般不单独的使用,而是跟着if判断一起使用,表示,当满足某些条件的时候,就不再循环了。 6、do-while循环。 语法: do { 循环体; }while(循环条件); 执行过程:程序首先会执行do的循环体,执行完成后,去判断do-while循环的循环条件, 如果成立,则继续执行do的循环体,如果不成立,则跳出do-while循环。 特点:先循环,再判断,最少执行一遍循环体。
超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装:  封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性:  多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗?  基本数据类型包括byte、int、char、long、float、double、boolean和short。  java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别  Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double  引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 7、String 和StringBuffer的区别  JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers来动态构造字符数据。 8、运行时异常与一般异常有何异同?  异常表示程序运行过程可能出现的非正常状态,运行时异常表示虚拟机的通常操作可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 10、说出ArrayList,Vector, LinkedList的存储性能和特性  ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 11、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Ses
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE>关于java异常处理(讲义)--JSP文网</TITLE> <META content="text/html; charset=gb2312" http-equiv=Content-Type> <META name=Description content=关于java异常处理(讲义),JSP文网> <META name=keywords content=关于java异常处理(讲义)><LINK rel=stylesheet type=text/css href="http://www.jspcn.net/css/news.css"><LINK rel=stylesheet type=text/css href="http://www.jspcn.net/css/qq.css"> <META name=GENERATOR content="MSHTML 8.00.7600.16535"></HEAD> <BODY> <DIV id=area> <DIV id=title1> <UL> <LI><A href="http://www.jspcn.net/">JSPCN主页</A> </LI> <LI><A href="http://www.jspcn.net/index.html" target=_blank><B>JSP空间</B></A> </LI> <LI><A href="http://www.jspcn.net/moreNews.html" target=_blank>JSP技术</A> </LI> <LI><A href="http://www.jspcn.net/moreSofts.html" target=_blank>JSP下载</A> </LI> <LI><A href="http://www.jspcn.net/AboutUs.html" target=_blank>关于我们</A> </LI> <LI><A href="http://www.jspcn.net/ContactUs.html" target=_blank>联系我们</A> </LI></UL>  </DIV> <DIV id=title2><A href="http://www.jspcn.net/"><IMG border=0 alt=JSP虚拟主机,jsp空间,java空间,java虚拟空间 src="http://www.jspcn.net/images/logo.gif"></A><A href="http://www.jspcn.net/"><IMG border=0 alt=JSP虚拟主机,jsp空间,java空间,java虚拟空间 src="http://www.jspcn.net/images/head.gif"></A></DIV> <DIV id=ad><B>当前位置:</B> <A href="http://www.jspcn.net/">首页</A> --> <A href="http://www.jspcn.net/moreNews.html">JSP文章</A> -->  <A href="http://www.jspcn.net/htmlnews/B20070807101134.html">JAVA技术</A> --> <A href="http://www.jspcn.net/htmlnews/B20070807102438.html">异常处理</A> --> 关于java异常处理(讲义) </DIV> <DIV id=vcontent> <DIV id=left1> <UL> <LI><A title=exception 隐含对象 href="http://www.jspcn.net/htmlnews/11501025699371438.html" target=_blank>exception 隐含对象</A> <LI><A title=谈自定义Exception进行错误处理 href="http://www.jspcn.net/htmlnews/11500776135931403.html" target=_blank>谈自定义Exception进行错误处理</A> <LI><A title="When catching exceptions, don't cast your net too wide" href="http://www.jspcn.net/htmlnews/1150060605562142.html" target=_blank>When catching exceptions, don't cast your net too wide</A> <LI><A title=NoClassDefDoundErr与ClassNotFoundException区别 href="http://www.jspcn.net/htmlnews/11500204450151651.html" target=_blank>NoClassDefDoundErr与ClassNotFoundException区别</A> <LI><A title=深入MIDIetStateChangeException href="http://www.jspcn.net/htmlnews/11500199894531654.html" target=_blank>深入MIDIetStateChangeException</A> <LI><A title=关于java异常处理(讲义) href="http://www.jspcn.net/htmlnews/11454147095461992.html" target=_blank>关于java异常处理(讲义)</A> <LI><A title=[JAVA100例]009、异常的捕获和实现自己的异常类 href="http://www.jspcn.net/htmlnews/11454145234531123.html" target=_blank>[JAVA100例]009、异常的捕获和实现自己的异常类</A> <LI><A title=Java异常学习心得 href="http://www.jspcn.net/htmlnews/11454143769681120.html" target=_blank>Java异常学习心得</A> <LI><A title=Java常见的异常 href="http://www.jspcn.net/htmlnews/11454142633901307.html" target=_blank>Java常见的异常</A> <LI><A title=如何在程序异常或正常退出JVM时执行特定代码 href="http://www.jspcn.net/htmlnews/11453840165461348.html" target=_blank>如何在程序异常或正常退出JVM时执行特定代码</A> <LI><A title=构建更好的异常处理框架 href="http://www.jspcn.net/htmlnews/11453827062501758.html" target=_blank>构建更好的异常处理框架</A> <LI><A title="关于runtime exception和checked exception" href="http://www.jspcn.net/htmlnews/11453821828901962.html" target=_blank>关于runtime exception和checked exception</A> <LI><A title="Java 理论与实践: 关于异常的争论" href="http://www.jspcn.net/htmlnews/11453819700151449.html" target=_blank>Java 理论与实践: 关于异常的争论</A> <LI><A title=Java异常处理的陋习展播 href="http://www.jspcn.net/htmlnews/11453816265151984.html" target=_blank>Java异常处理的陋习展播</A> <LI><A title=java的异常处理机制 href="http://www.jspcn.net/htmlnews/11453815669531884.html" target=_blank>java的异常处理机制</A> <LI><A title=浅析Java语言两种异常的差别 href="http://www.jspcn.net/htmlnews/11453814749211672.html" target=_blank>浅析Java语言两种异常的差别</A> <LI><A title=浅析Java语言两种异常使用的差别 href="http://www.jspcn.net/htmlnews/11453813498901558.html" target=_blank>浅析Java语言两种异常使用的差别</A> <LI><A title=邂逅StringIndexOutOfBoundsException href="http://www.jspcn.net/htmlnews/11171163972961452.html" target=_blank>邂逅StringIndexOutOfBoundsException</A> <LI><A title="避免在Java使用Checked Exception" href="http://www.jspcn.net/htmlnews/11049415031711687.html" target=_blank>避免在Java使用Checked Exception</A> <LI><A title="开源 JVM 一览" href="http://www.jspcn.net/htmlnews/11049386275931969.html" target=_blank>开源 JVM 一览</A> <LI id=more1><A href="http://www.jspcn.net/htmlnews/B20070807102438.html" target=_blank>更多...</A> </LI></UL></DIV> <DIV id=right1><BR> <H2>关于java异常处理(讲义)</H2><BR><BR> <DIV align=right>作者:    文章来源:<BR>发布日期:2006年07月21日    浏览次数:791次</DIV> <DIV height="600">第16讲:异常处理<BR>16.1、简介:<BR>异常是程序执行时遇到的任何错误情况或意外行为。<BR>以下这些情况都可以引发异常:您的代码或调用的代码(如共享库)有错误,操作系统资源不可用,公共语言运行库遇到意外情况(如无法验证代码),等等<BR><BR>《Exception Handling for C++》关于异常处理论文,<BR>向对象每增加一个类,都可能包含一些错误。<BR>Java使用和C++类似的异常处理<BR>1、处理错误的方法有很多流行方法<BR>2、一般方法是把程序处理代码段分散到系统代码,在可能发生错误的地方处理错误<BR>优点:便于程序员能够条理的看到程序异常的处理<BR>缺点:异常处理程序“搅乱”代码,程序员很难关心程序本身能否正常完成功能,而只关心了性能。<BR>3、常见异常实例包括:数组下标越界,算法溢出(超出数值表达范围),除数为零,无效参数、内存溢出<BR>异常处理功能:主要处理一些同步异常(除数为0),不宜处理一些异步事件(Disk I/O End、网络信息到达、点击鼠标、敲击键盘)这些最好使用java事件监听。<BR>异常处理程序:能够让系统在出现异常的情况下恢复过来的程序<BR>使用异常处理情况:异常诊断与异常处理不在同一个位置下时使用异常处理程序(若用户一直通过键盘与程序通话,那么就不能使用处理键盘输入处理)<BR>使用异常的注意事项:<BR>1、 异常处理位置与异常发生位置必须不同(若一个程序能够处理自己的错误,那么就采用传统的错误处理方式进行局部处理)<BR>2、 要避免使用异常处理来代替错误处理,若这样就会降低程序的清晰性。<BR>3、 尽管可以使用异常处理来代替错误处理,但会降低性能<BR>4、 异常处理会占用程序的格外执行时间<BR>5、 异常处理能够提高程序的容错性<BR>6、 程序员使用JAVA标准的异常处理功能来代替他们的专用方法,可以在大型项目提高程序的清晰性<BR>7、 异常是超类Exception继承的子类,主要如何处理“未扑获的异常”,无法预料的异常。 <BR>8、 异常处理在java原理:<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>异常处理有Method调用者的调用者或者Method调用者来处理,<BR>9、 异常处理适用分别开发的组件系统<BR>10、 因为一些程序员使用不支持异常处理语言编程时,往往拖延或忘记错误处理程序的编写,故,Java强制程序员从项目一开始就着手进行异常处理,程序员必须投入很大精力把异常处理的策略融合到软件产品<BR>11、 最好在进行系统设计是就把异常处理融合在系统,若系统一实现,就很难添加异常处理功能<BR><BR><BR>16.2如何使用异常处理:<BR><BR>在以下情况下使用异常处理:<BR><BR>1、 当方法因无法控制的原因而不能实现其功能时;<BR>2、 处理来自程序组件整体异常,这些程序组件不适宜直接处理异常<BR>3、 在大型项目,对于每个项目都以一致的方式进行错误处理<BR>4、 在类库出现每一个异常,都需要一个惟一错误处理,在类库使用异常处理很合适<BR><BR><BR>16.3 其他的错误处理技术:<BR><BR>处理异常的方法:<BR>1、 在程序可以忽略异常(忽略异常在大型公用软件和关键处理软件可能会导致重大的软件破坏,而自己用的软件,通常可忽略一些错误)<BR>2、 遇到异常时,程序可以根据提示来终止运行(但是处理关键任务是绝对不可以采用,〈神5返回仓温控系统〉?863项目。)<BR><BR><BR>16.4 java异常处理的基础:<BR><BR>java的异常处理适用于在一个方法能够检测出错误单不能处理错误的情况,这样方法将抛出一个异常(JAVA无法保证“存在”的异常处理程序能够处理某种异常,若“存在”,就“捕获”异常,并处理“异常”,如找不到,那么:<BR><BR>命令行APP/控制台APP(不基于GUI),当异常不能被“捕获”,那么该程序会运行默认异常处理程序,退出JAVA,若Applet或基于GUI的APP,当一个异常未被“捕获”,GUI在运行默认异常处理程序依然会显示,而且用户使用的GUI处于一个不稳定的状态)<BR>)<BR>JAVA代码:1、可能出现异常的代码-----{ …… try{抛出一个异常}-----程序块 ……catch1{异常处理程序1};……catch100 {异常处理程序100}; finally{无类是否出现异常都执行的程序} <BR>1、 若try抛出Exception,App寻找在Catch1~100寻找合适异常处理程序,若找到,执行CATCH{}代码,没有,执行最后一个catch{}后代码<BR>2、 若try未抛出Exception,就执行执行最后一个catch{}后代码。<BR><BR>3、 throws子句来抛出指定的异常,异常抛出点(throws 语句位置、try{}程序块、try()程序块直接和间接调用的方法)<BR><BR>4、 java采用终止方式异常处理,不是恢复方式的异常处理<BR><BR>5、 发生异常时,异常周围信息(抛出对象本身类型)-------------异常处理程序<BR><BR>12.5一个异常处理的简单实例:除数为0<BR><BR>需求:使用一个小应用程序,完成两数相除的计算<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>分析:<BR>我们使用有顶向下,逐步求精的方法:<BR>1、 首步我们一般在程序先处理我们完成异常处理的类,完成异常处理的功能,因为可能除数为0是会出现异常,我们查找java.lang包各个Exception类,发现RuntimeException类集合的ArithmeticException可以处理运算异常,我们就让一个DivideByZeroException(继承于ArithmeticException) 更特殊类来专门处理除数为零的异常。在DivideByZeroException()调用super()(专门初始化传如参数的方法)来传如异常处理后对象描述(初始状态)<BR>2、 第一步,创建一个Applet类完成完成两数相除的计算<BR>3、 第二步:处理对象与方法:声明4个GUI组件对象和1个用于存储计算结果(double)的和2个被除数与除数基本类型(int)<BR><BR>A、 初始化对象方法init()<BR>B、 处理当除数键盘输入后,触发事件进行计算的方法(返回判断)action()<BR><BR>a、 因为在此方法,有可能出现除数为0的可能,而且在计算才回出现错误,错误出现后需要进行处理异常,那么我在其使用try{}程序块先调用方法quotient进行计算result=quotient(number1,number2),1、然后让quotient()方法(使用方法体的throws Ex{}抛出异常程序块---此为深层嵌套)抛出异常(因为此处理信息比较简单,但存在信息传递,我们让其拖后处理)我们没有显式在try()块抛出异常。有抛出异常就有获得异常,使用catch{}程序块完成,a)、在quotient()(实际深层嵌套throws Ex{}抛出异常程序块),当除数=0时,就调用throw子句创建并抛出一个new catch{}“捕获”(指定匹配类型DivideByZeroException) quotient()抛出异常信息(DivideByZeroException),而接受此信息是由exception接收,并调用toString()方法把exception转换成字符串,使用showStatus(exception.toString()); 显示出来 (因为需求要求显示异常)。b)、若当除数!=0时,那么就不抛出异常,然后将程序返回到try()程序块quotient()方法调用处,接着使用showStatus()方法显示算式和结果(number1+”/”+number2+”=”+Double.toString(result))程序将跳过catch{}程序块,action()方法将执行return true<BR><BR>注意:当quotient()抛出异常信息(DivideByZeroException)时,quotient()终止执行,这样会对所有对象(4+2+1)设置标记,用于无用单元回收处理;并在无用单元回收处理之前,还将运行这些对象的终止函数。如果抛出异常,那么try在程序块执行showStatus之前终止。若try抛出异常之前自动创建了对象,那么会对这些对象设置标记,用于无用单元回收,同时在回收之前,还将运行这些对象的终止函数。<BR>b、 在action()方法要注意处理:在TextField第2个输入结束并按下回车后,除数应该怎样获得输入的数字(number1=Integer.parseInt(input1.getText)),文本框如何获得合法的文本(setText()).也包括判断(if (event.target==input2))<BR><BR>C、 因为quotient()方法任务比较多,所以要将此方法单独与action来处理,而显示程序的清晰性和可读性,同时可以提高执行效率和稳定性能。<BR><BR>类图与流程图:<BR><BR>代码:<BR>//Fig 16.4: DivideByZeroException.java<BR>//W.Qiang<BR>//2005.J.6<BR>public class DivideByZeroException extends ArithmeticException{<BR>public DivideByZeroException()<BR>{<BR>super(“Attempted to divide by zero”);<BR>}<BR>}<BR>import java.awt.*;<BR>import java.awt.event.*<BR>import java.applet.Applet;<BR><BR>public class DivideByZeroTest extends Applet<BR>{<BR>Label prompt1,prompt2;<BR>TextField input1,input2;<BR>Int number1,number2;<BR>Double result;<BR><BR>public void init()<BR>{<BR>prompt1=new Label (“输入被除数”);<BR>input1=new TextField(10);<BR>prompt2=new Label (“输入除数并按下回车”);<BR>input2=new TextField(10); <BR>add (prompt1);<BR>add (input1);<BR>add (prompt2);<BR>add (input2);<BR>}<BR><BR>public boolean action (Event event,Object obeject )<BR>{<BR>if (event.target==input2)<BR>{<BR>number1=Integer.parseInt(input1.getText());<BR>input1.setText(“”);<BR>number2=Integer.parseInt(input2.getText());<BR>input2.setText(“”);<BR><BR>try {<BR>result=quotient(number1,number2);<BR>showStatus(number1+”/”+number2+”=”+Double.toString(result));<BR>} <BR><BR>catch(DivideByZeroException exception) {<BR>showStatus(exception.toString());<BR>}<BR>}<BR>return true;<BR>}<BR>public double quotient(int numerator,int denominator)throws DivideByZeroException<BR>{<BR>if (denominator==0) <BR>throw new DivideByZeroException ();<BR>else (denominator!=0)<BR>return(double) numerator / denominator ;<BR>}<BR>}<BR><BR>12.6 try程序块:<BR>try{ <BR>……}<BR>catch(){<BR>…….}<BR>finally{ ……}<BR>try后面跟0~多个catch程序块<BR>若try抛出Exception,App寻找在Catch1~100寻找合适异常处理程序,若找到,执行CATCH{}代码,没有,执行最后一个catch{}后代码<BR>若try未抛出Exception,就执行执行最后一个catch{}后代码。<BR>finally{无类是否出现异常都执行的程序,必须完成资源释放即终止函数调用,可避免资源泄露}<BR>16.7 抛出异常:<BR>throw 子句用来抛出异常,而throws子句用来指定异常 <BR>throw 的操作数是Throwable所有派生类,Throwable的直接子类是Exception(异常,由应捕获的问题引起,应进行处理)与Error(重大系统问题,一般不捕获)<BR>抛出异常抛出点有try{}块、, try{}块某个深层嵌套的作用域、try{}块某个深层嵌套的方法,throws指定异常,throw抛出的异常<BR>try{}不包括错误检测语句与throw子句,但它的程序块所引用的对象将会执行构造函数的错误检测代码,并抛出异常<BR>我们只要求异常终止产生异常的程序块执行,而不停止整个程序<BR>异常信息传递通过对象引用产生,然后让catch的参数名(对象名)引用<BR>16.8 捕获异常:<BR><BR>异常处理程序包含在catch程序块<BR>语法:<BR>catch (classNmae---指定要抛出的异常的类型,参数名-----用来引用处理程序捕获的对象){javaCode -----处理异常可执行代码}<BR><BR>catch使用注意事项:<BR>1、 若假设异常处理之后,程序控制将返回throw后的第一个语句,那么将导致逻辑错误<BR>2、 将catch程序块的参数不能设置成多个,一个catch只有一个参数<BR>3、 若两个catch程序块(均和某个try程序块有关)都用于捕获同一类型异常,那么将产生语法错误<BR>4、 捕获特殊异常可能找不到,需要在下一层try找,若找不到,那么命令行APP/控制台APP(不基于GUI)将退出程序,Applet或基于GUI的APP将继续执行处于一个不稳定的状态的APP<BR>5、 若某一类型异常,可能有几个异常处理程序与他相匹配,那么执行first相匹配的异常处理程序<BR>6、 一个程序可以同时处理许多关系密切的异常,我们可谓此ExceptionGroup提供1个异常类与catch处理程序,当某个异常发生时,可根据不同的实例数据创建异常对象,同时catch检查该数据,以判断异常的类型;我们一般不提倡此种编程风格,最好用继承的方法解决<BR>7、 在异常处理程序,不能访问try定义的对象,异常处理开始,try快结束<BR>8、 若执行某个异常处理程序时又抛出一个异常,原try块已经终止,那么就让原try外层try处理程序进行处理,同时外层try程序监视并处理原try块的catch处理程序产生的错误<BR>9、 异常处理程序的形式:A、重抛出异常;B、通过抛出另一种不同类型的异常来转换异常类型;C、通过执行完最后一个异常处理程序之后,完成任何必要的恢复工作并使程序继续执行;D、判断产生错误的原因,然后处理,并重新调用原来曾产生该异常的方法 E、简单向Runtime返回一个状态值 ……………等等<BR>10、 传统的控制流不使用异常,因“额外的”异常会“掩盖”那些真正的错误类型的异常,程序员很难跟踪那些大量的异常,而且这里的异常不是经常见到的<BR>11、 catch处理程序抛出一个异常,将由catch处理或与同1个try块相关的其他处理程序来处理,就会产生逻辑错误<BR><BR>16.9 重抛出异常:<BR>catch异常处理程序出现异常,需要其他catch处理程序处理该异常 <BR>可以用throw重抛出异常<BR><BR>16.10 throws 子句:<BR><BR>用途:在一个method,利用其列出该方法所能抛出的异常<BR>int g (float h) throws a,b,c<BR>{<BR>//method body<BR>}<BR>抛出的对象为:指定类对象或者子类对象<BR><BR>1、运行时异常:发生异常是某些可避免的事情出现错误<BR>此异常是RuntimeException类派生出来的<BR>包括:ArrayIndexOutOfBoundsException(访问一个越界数组下标),NullPointerException(Null引用操作抛出---声明而没有创建对象);<BR>ClassCastException (无效的类型转换引发)<BR>IOException ,InterruptedException<BR><BR>Throws不必要显式指出RuntimeException与Error,而要指出method或该method所调用的method显式抛出非RuntimeException异常<BR>3、 java异常区分:经检查的Exception(非RuntimeException);未经检查的Exception(RuntimeException);Error<BR><BR>注意事项:<BR>1、 method抛出一个经检查的Exception,若该Exception未列在throws子句,会产生语法错误<BR>2、 试图在一个没有throws子句method抛出异常,会产生语法错误<BR>3、 若method1调用method2(显示抛出经检查的Exception),必须在method1的子句列出此异常,除非method2已经捕获此异常<BR>4、 子类method的throws清单是父类method的throws清单的子集<BR>5、 捕获异常必须处理,才能满足“java捕获或声明”。<BR>6、 java编译器强制程序员处理异常,绝对不能忽略异常处理<BR>7、 java列出的Error见j2SDK 1.42 Documention 的java.lang package errors (AWTError)<BR>8、 java列出的Exception见j2SDK 1.42 Documention 的java.lang package Exception 、 java.util package Exception 、java.io package Exception、java.awt package Exception、java.net package Exception<BR><BR>16.11构造函数、终止函数和异常处理<BR><BR>当构造函数检测错误(不能返回值)解决方案(让程序知道无法正确构造该对象):<BR>1、直接返回该错误对象,当使用该对象进行判断,以确定此对象是否错误<BR>2、在该构造函数外设定一个全局变量,都不是好方法3、抛出异常,把次函数错误信息传递到外部,并处理该错误<BR>4、 当该函数抛出Exception ,那么该函数建立的对象将被设置标记,用与最终的无用单元回收处理,故需要调用终止函数。<BR><BR>16.12异常与继承:<BR><BR>因为继承关系,各种错误可以多态处理<BR>一般最好捕获并处理父类异常,(仅当所有子类对象的处理方法都一致才有意义),否则,捕获子类异常<BR><BR>16.13 finally程序块<BR><BR>若程序显示使用某些资源,那么必须在最后完成对资源的释放即无庸单元回收,在C与C++,常见是指针不能回收,函数不能终止,出现“内存泄露”<BR>java实现自动的无庸的单元回收功能,可避免“内存泄露”,但java同样存在别的“资源泄露”<BR>一般在finally程序块使用一些资源释放的代码<BR>1、 finally程序块将try程序块所有打开文件关闭<BR>2、 java并没有彻底消除资源泄露、当某个对象不存在是,java才对该对象进行无庸单元回收处理,当程序员错误的对某个对象保持引用时,就会出现内存泄露<BR>3、 exception ( String informationString):其informationString是对该类异常描述信息,而获得信息使用getMessage(用于返回保存在某个异常的描述字符串)。PrintStackTrace(用于把方法调用堆栈的内容打印出来,对测试程序特别有用)。<BR><BR><BR>  </DIV></DIV><!-- 相关DIV --> <DIV id=rel> <UL> <LI><A href="http://www.jspcn.net/">JSP虚拟主机,JSP空间</A> </LI></UL></DIV></DIV> <DIV id=bottom2 align=center><FONT face=Verdana>Copyright © 2002-2012 JSPCN.net. All rights reserved.</FONT><BR>JSP文网    备案号:粤ICP备09171188号<BR>成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号 </DIV></DIV></BODY></HTML>
1. Java基础部分 7 1、一个".java"源文件是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 9 7、char型变量能不能存贮一个文汉字?为什么? 9 8、用最有效率的方法算出2乘以8等於几? 10 9、请设计一个一百亿的计算器 10 10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11 11、"=="和equals方法究竟有什么区别? 12 12、静态变量和实例变量的区别? 13 13、是否可以从一个static方法内部发出对非static方法的调用? 13 14、Integer与int的区别 13 15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 14 16、下面的代码有什么不妥之处? 14 17、请说出作用域public,private,protected,以及不写时的区别 14 18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 15 19、构造器Constructor是否可被override? 16 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类是否可以有静态的main方法? 16 21、写clone()方法时,通常都有一行代码,是什么? 16 22、面向对象的特征有哪些方面 17 23、java实现多态的机制是什么? 18 24、abstract class和interface有什么区别? 18 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 20 26、什么是内部类?Static Nested Class 和 Inner Class的不同。 20 27、内部类可以引用它的包含类的成员吗?有没有什么限制? 22 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 23 29、super.getClass()方法调用 23 30、String是最基本的数据类型吗? 24 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象的内容到底变了没有? 24 32、是否可以继承String类? 25 33、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别? 25 34、String 和StringBuffer的区别 25 35、如何把一段逗号分割的字符串转换成一个数组? 26 36、数组有没有length()这个方法? String有没有length()这个方法? 26 37、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"; 26 38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会执行,什么时候被执行,在return前还是后? 27 39、下面的程序代码输出的结果是多少? 28 40、final, finally, finalize的区别。 30 41、运行时异常与一般异常有何异同? 30 42、error和exception有什么区别? 30 43、Java的异常处理机制的简单原理和应用。 30 44、请写出你最常见到的5个runtime exception。 31 45、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try可以抛出异常吗? 32 .... ....

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值