a嵌套img标签的问题

2019.08.16  周五:


html结构是这样的,未使用任何样式!

<body>
<div id="container">
	<a href="#"><img src="favicon.png" alt="logo"></a>
</div>
</body>

但在chrome的开发者工具中查看,a的高度并不是图像的高度,而是一个很奇怪的高度。

img_width.png

a_width.png

这是什么原因,如何让a标签的高度与img标签的高度一样

[<img>标签为什么会有底下的空白呢?这你要理解所谓的“基线(baseline)”。这是一个英文排版概念。我这里还是引用下知乎人的链接吧!http://www.zhihu.com/question/21558138 讲得很周到!]

总结这个问题的几种解法:
[a]处理基线

a{display:block;}
img{vertical-align: bottom;}

[b]强行去掉<a>标签的行高

a{display:block;line-height:0px;}

[c]没有设置行高的时候可以去掉字体大小;

a{display:block;font-size:0px;}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
day02 昨天内容回顾 1、html的操作思想 ** 使用标签把要操作的数据包起来,通过修改标签的属性值来实现标签内数据样式的变化 *** <font size="5"></font> 2、图像标签 <img src="图片的路径"/> ** 通过html访问本地图片,使用绝对路径,目前有问题 3、超链接标签 <a href="" target="_blank"></a> 4、表格标签 ** 技巧:数里面有多少行,每行里面有多少个单元格 ** <table></table> <tr> <td> <th> 5、表单标签 ** <form></form> - action method enctype - method: get post ** 输入项 *** 有name属性 * 普通输入项 type="text" * 密码: password * 单选:radio - name值相同 - value值 * 复选框:checkbox - name值相同 - value值 * 下拉框 select option * 文本域 textarea * 隐藏项:type="hidden" * 文件: type="file" * 提交按钮 type="submit" * 重置 : reset * 使用图片提交: <input type="image" src=""/> * 普通按钮 type="button" 6、div和span * div: 自动换行 * span:在一行显示 CSS 1、css的简介 * css: 层叠样式表 ** 层叠:一层一层的 ** 样式表: 很多的属性和属性值 * 是页面显示效果更加好 * CSS将网页内容和显示样式进行分离,提高了显示功能。 2、css和html的结合方式(四种结合方式) (1)在每个html标签上面都有一个属性 style,把css和html结合在一起 - <div (2)使用html的一个标签实现 <style>标签,写在head里面 * <style type="text/css"> css代码; </style> * <style type="text/css"> div { background-color:blue; color: red; } </style> (3)在style标签里面 使用语句(在某些浏览器下不起作用) @import url(css文件的路径); - 第一步,创建一个css文件 <style type="text/css"> @import url(div.css); </style> (4)使用标签 link,引入外部css文件 - 第一步 ,创建一个css文件 - <link rel="stylesheet" type="text/css" href="css文件的路径" /> *** 第三种结合方式,缺点:在某些浏览器下不起作用,一般使用第四种方式 *** 优先级(一般情况) 由上到下,由外到内。优先级由低到高。 *** 后加载的优先级高 *** 格式 选择器名称 { 属性名:属性值;属性名:属性值;…….} 3、css的基本选择器(三种) ** 要对哪个标签里面的数据进行操作 (1)标签选择器 * 使用标签名作为选择器的名称 div { background-color:gray; color:white; } (2)class选择器 * 每个html标签都有一个属性 class - <div class="haha">aaaaaaa</div> - .haha { background-color: orange; } (3)id选择器 * 每个html标签上面有一个属性 id - <div id="hehe">bbbbb</div> - #hehe { background-color: #333300; } *** 优先级 style > id选择器 > class选择器 > 标签选择器 4、css的扩展选择器 (1)关联选择器 * <div><p>wwwwwwww</p></div> * 设置div标签里面p标签的样式,嵌套标签里面的样式 * div p { background-color: green; } (2)组合选择器 * <div>1111</div> <p>22222</p> * 把div和p标签设置成相同的样式,把不同的标签设置成相同的样式 * div,p { background-color: orange; } (3)伪元素选择器(了解,浏览器的兼容性比较差) * css里面提供了一些定义好的样式,可以拿过来使用 * 比如超链接 ** 超链接的状态 原始状态 鼠标放上去状态 点击 点击之后 :link :hover :active :visited ** 记忆的方法 lv ha 5、css的盒子模型 ** 在进行布局前需要把数据封装到一块一块的区域内(div) (1)边框 border: 2px solid blue; border:统一设置 上 border-top 下 border-bottom 左 border-left 右 border-right (2)内边距 padding:20px; 使用padding统一设置 也可以分别设置 上下左右四个内边距 (3)外边距 margin: 20px; 可以使用margin统一设置 也可以分别设置 上下左右四个外边距 6、css的布局的漂浮(了解) float: ** 属性值 left :  文本流向对象的右边 right :  文本流向对象的左边 7、css的布局的定位(了解) position: ** 属性值 - absolute : *** 将对象从文档流中拖出 *** 可以是top、bottom等属性进行定位 - relative : *** 不会把对象从文档流中拖出 *** 可以使用top、bottom等属性进行定位 8、案例 图文混排案例 ** 图片和文字在一起显示 9、案例 图像签名 ** 在图片上面显示文字 10、上午内容总结 1、css和html的四种结合方式(****) 2、css的基本选择器(****) * 标签选择器 使用标签名 * class选择器 .名称 * id选择器 #名称 ** 优先级 style > id > class > 标签 3、css的扩展选择器(了解) * 关联选择器 - 设置嵌套标签的样式 div p {} * 组合选择器 - 不同的标签具有相同的样式 div,p{} * 伪元素选择器 * 超链接的状态 - 原始 :link - 悬停 :hover - 点击 :active - 点击之后 :visited 4、盒子模型(了解) * 边框 border:2px solid red; 上下左右 border-top border-bottom border-left border-right * 内边距 padding:20px 上下左右 * 外边距 margin:20px 上下左右 * 对数据进行操作,需要把数据放到一个区域里面(div) 5、布局的漂浮(了解) float - left: 后面的div到右边 - right:后面的div到左边 6、布局的定位(了解) position - absolute ** 从文档流中拖出 - relative ** 不会从文档流中拖出 一般在目录里面,标出符号 (********):重点,代码看懂,代码会写,代码理解 - (****重点中的重点***) (了解):代码看懂 (理解):能够把原理讲清楚
<!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>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值