- 浏览: 1590977 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
异常处理
throws 多异常处理
throws 和throw 的区别
自定义 异常类
RuntimeException
finally
/** *异常: 就是程序在运行时出现不正常情况 *异常由来: 问题也是现实生活中的事物,也可以通过java类的形式进行描述,并进行封装. * *对于问题的划分: * 1: 严重的问题 (Error) : java通过Error类进行描述,一般不编写针对性的代码进行处理 * 2: 非严重的问题 (Exception): java通过Exception类进行描述,一般使用针对性的处理方式进行处理 * *无论 Error 或者 Exception 都具有一些共性的内容 *比如: 不正常的情况信息,引发原因等 * 所以就出现了 "Throwable" 这个父类 * * Throwable * |--Error * |--Exception * * *2.异常的处理 * java 提供了特有的语句进行处理 * * try{ * 需要被检测 * }catch(异常类 变量){ * 出来异常的代码:(处理方式) * }finally{ * 一定会执行的语句 * } * * 3.对捕获到的异常信息进行处理 * 1. String getMessage(); //打印 异常信息 * 2. String toString(); //打印 异常名称 : 异常信息 * 3. void printStackTrace(); //打印最全名: 异常 名称 : 异常信息 : 异常位置 ; 是 JVM 默认异常处理机制,就是调用这个方法 * * 4.问题: 发现下面的程序有时候能正常运行,有时候不能, 因为不是所以认得知道这个方法会抛出异常 ,也不是所有人都会处理 这个异常. 怎么办 ? * 所以就出现 throws 抛出异常 */ class Demo{ static int div(int a,int b){ return a/b; } } public class ExceptionDemo { public static void main(String[] args) { //exception try{ int x=Demo.div(4, 0); //除数不能为0 ,抛出 new ArithmeticException(); 程序会终止 System.out.println("x="+x); //出现异常后 这句话就不会被执行 直接进入 catch 语句块中去了 }catch(Exception e){ // Exceptioin e= new ArithmeticException(); System.out.println("除数为0啦!"); System.out.println(e.getMessage()); // "/ by zero" System.out.println(e.toString());//toString() 可以省略 打印 异常名称 : 异常信息 e.printStackTrace(); //打印最全名: 异常 名称 : 异常信息 : 异常位置. } System.out.println("run over"); //运行 完 catch语句块后 , 接着运行 这句 //error byte[] arr=new byte[1024*1024*6000]; //超出虚拟据总内存大小 不管在怎么样 也不能超过物理内存大小 ,这程序也没戏了. } }
throws 多异常处理
/** * throws * 1. throws: 在功能上通过throws的关键字声明该功能有可能出现问题. * * 2.被声明后 我们必须告诉程序的处理方式 * 1.采用 try catch 进行处理 * 2.继续抛出 异常 ,由jVM 虚拟机 进行异常处理 不过这样 程序 就会终止. * * * 多异常的处理 * 1.声明异常时,建议声明更为具体的异常,这样 处理的可以更具体 * 比如: 下面 throws ArithmeticException 而不写成 throws Exception * * 2.对于声明多个异常,在调用的时候就应该有几个 catch块.不要定义多余的catch块 ,比如下面注释的 catch块 * 如果多个catch中的异常出现了继承关系,父类异常catch块 放在最下面 . * * 建议:在进行catch处理时,catch一定要定义具体的处理方式 * 不要简单的一句. e.printStackTrace(); * 也不要简单的就书写一条输出语句 ,一般采用log日志文件 进行 异常信息记录 * */ class Demo{ static int div(int a,int b) throws ArithmeticException{ return a/b; } } class Demo1{ static int div(int a,int b) throws ArithmeticException,ArrayIndexOutOfBoundsException{ int [] arr=new int[a]; System.out.println(arr[a+1]); //出现越界 return a/b; } } public class ExceptionDemo1 { /** * thrwos */ public static void main(String[] args) { // 使用第一种方法处理 try { Demo.div(4, 0); } catch (Exception e) { System.out.println(e.toString()); } } // 使用第二种方法处理 继续往上抛出异常 让 JVM 帮我处理 public static void otherMethod() throws ArithmeticException{ Demo.div(4, 0); } /** * 多异常处理 */ public static void otherMethod1() throws ArithmeticException,ArrayIndexOutOfBoundsException{ Demo1.div(4, 0); } public static void otherMethod2() { try { Demo1.div(4, 0); } catch (ArithmeticException e) { System.out.println(e.toString()); System.out.println("被0除了"); }catch(ArrayIndexOutOfBoundsException e){ System.out.println(e.toString()); System.out.println("角标越界"); }/*catch(Exception e){ //这样做只会隐藏 异常 ,这样做是不对的 System.out.println(e.toString()); }*/ } }
throws 和throw 的区别
自定义 异常类
/** * 因为项目中会出现特有的问他你. * 而这些问题并未被java所描述和封装成对象 * 所以对于一些特有的问题可以安装java的对问题封装的思想. * 将特有的问题,进行自定义的异常封装 * * * 自定义异常 * * 需求: 在本程序中,对于除数 是-1 也视为错误的,是无法进行运算. * 那么就需要对这个问题进行自定义的描述. * *当函数内部初相了throw抛出异常对象,那么就必须要给对应的处理动作. *要么在内部 try catch 处理 *要么子啊函数上声明让调用者处理. * *一般情况下, 函数内部出现异常,函数上需要声明. * *发现 打印的结果中只有异常的名称,却没有异常的信息 *因为自定义的异常并未定义信息 * *如何定义异常信息呢? * 因为父类中已经把异常信息的操作都做完了 * 所以子类只要在构造时,将异常信息传递给父类通过super语句 * 就可以直接通过getMessage获取自定义的异常信息 * *自定义异常:必须是自定义类继承 Exception * *继承Exception原因: * 异常体系有一个特点,因为异常类和异常对象都被抛出 * 因为他们都具备可抛性,这个可抛性是Trowable这个体系中独有的特点. * * 只有这个体系中的类和对象才可以被throw 和 throw 操作 * *throws 和throw 的区别 *throws:使用在函数上 *throw:使用在函数内 * *throws:后面跟的异常类,可以跟多个,用逗号分开 *throw:后跟的是异常对象. */ class FuShuException extends Exception{ /* private String msg; FuShuException(String msg){ this.msg=msg; } public String getMessage(){ return this.msg; } */ FuShuException(String msg,int num){ super(msg); this.value=num; } private int value; public int getValue(){ return value; } } //自定义 异常类 class Demo{ static int div(int a,int b) throws FuShuException{ if(b<0) throw new FuShuException("出现了除数为零的情况 / by fushu",b); //手动通过throw 关键字抛出一个自定义异常对象. return a/b; } } public class ExceptionDemo2 { public static void main(String[] args) { // TODO Auto-generated method stub try { Demo.div(4, -1); } catch (FuShuException e) { System.out.println(e.toString()); System.out.println("除数出现负数了!"); System.out.println("负数是:"+e.getValue()); } System.out.println("over"); } }
RuntimeException
/** *RuntimeException: * Exception中有一个非常特殊子类异常,RuntimeException 运行时异常 * 如果在函数内部使用throw抛出异常,函数上可以不用throws声明,编译一样通过. * 如果在函数上使用throws声明了该异常,调用者可以不用进行处理,编译一样通过; *之所以不用在函数上使用throws声明,是因为不需要让调用者处理 *当异常发送,JVM希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,然程序员对代码进行修正 * *自定义异常时,如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException. * *对于异常的分类 *1.编译时被检测的异常 (必须使用 throws 或者 try catch进行处理) * *2.编译时不被检测的异常(运行时异常,RuntimeException以及其子类) 程序会停止掉,然后要改进代码 * */ class Demo{ static int div(int a,int b){ //发现 这里不需要 throws 怎么回事? if(b==0) throw new ArithmeticException("被零除了!"); //需改 java自定义异常中的提示,改成我们熟悉的 return a/b; } static int div1(int a,int b)throws ArithmeticException{ //if(b==0) //throw new Exception("被零除了!"); //需改 java自定义异常中的提示 return a/b; } static int div2(int a,int b){ //发现 这里不需要 throws 怎么回事? if(b<0) throw new FuShuException("出现除数为负数了"); //需改 java自定义异常中的提示 if(b==0) throw new ArithmeticException("被零除了!"); return a/b; } } //自定义 运行时异常类 class FuShuException extends RuntimeException{ public FuShuException(String msg) { super(msg); } } public class ExceptionDemo3 { public static void main(String[] args) { // TODO Auto-generated method stub /*Demo.div(4, 0); // Demo.div1(4, 0); //发现没有 try catch 编译也通过 Demo.div2(4, -9);*/ //讲课 Teacher t=new Teacher("张老师"); try { t.prelect(); } catch (NoPlanException e) { System.out.println(e.toString()); System.out.println("换老师 或者 放假!"); } } } /* * 老师上课 * * 思考上课中出现的问题 * 比如问题: 电脑蓝屏 * 电脑冒烟 * * 要对问题进行封装成对象. * 冒烟后,出现讲课进度无法继续 * 出现了讲师的问题,课时计划无法完成. * * throw 和 return 单独存在的时候,后面不能出现 其他语句 */ class Teacher{ private String name; private Computer cmpt; Teacher(String name){ this.name=name; this.cmpt=new Computer(); } public void prelect()throws NoPlanException{ try { cmpt.run(); } catch (LanPingException e) { cmpt.reset(); } catch (MaoYanException e) { test(); throw new NoPlanException("课时无法继续"+e.getMessage()); //test(); //不能放在这里 ,throw 和 return 单独存在的时候,后面不能出现 其他语句 } System.out.println("讲课"); } public void test(){ System.out.println("练习!"); } } class Computer{ private int status=3; public void run()throws LanPingException,MaoYanException { if(status==2) throw new LanPingException("蓝屏了"); if(status==3) throw new MaoYanException("冒烟了"); System.out.println("电脑运行"); } public void reset(){ this.status=1; System.out.println("电脑重启"); } } //封装问题 class LanPingException extends Exception{ LanPingException(String message){ super(message); } } class MaoYanException extends Exception{ MaoYanException(String message){ super(message); } } //冒烟后的异常 class NoPlanException extends Exception{ NoPlanException(String message){ super(message); } }
finally
/** * finally代码快:定义一定要执行的代码 * 通常用于关闭资源 * 如果 catch中 有return 的时候 finally 代码会被执行 而其他的代码不会被执行. */ class FuShuException extends Exception{ FuShuException(String msg){ super(msg); } } class Demo{ static int div(int a,int b)throws FuShuException{ if(b<0) throw new FuShuException("除数为负数!"); return a/b; } } class NoException extends Exception{ } public class FinallyDemo1 { public static void main(String[] args) { test1(); // 除数为负数! finally over test2(); // 除数为负数! finally } public static void test1(){ try { int x=Demo.div(4, -1); //1 System.out.println("x="+x); } catch (FuShuException e) { System.out.println(e.toString()); //2 }finally{ System.out.println("finally"); //3 } System.out.println("over"); //4 } public static void test2(){ try { int x=Demo.div(4, -1); //1 System.out.println("x="+x); } catch (FuShuException e) { System.out.println(e.toString()); //2 return; // 使用return后 //4 }finally{ System.out.println("finally"); //3 } System.out.println("over"); } /** * 采用分层的思想来设计 一般不会抛出 SQLException 给调用者 而是给一个 调用者能看的懂的异常 */ public void method()throws /*SQLException*/NoException { //连接数据库 //数据操作: //throw new SQLException(); //关闭数据库 try { //连接数据库 //数据操作: }catch (SQLException e) { //会对数据库进行异常操作 //throw new SQLException(); throw new NoException(); }finally{ //关闭数据库 } } }
/** * *异常的几种格式 * *记住一点:catch是用户处理异常,如果没有catch就代表异常没有被处理过,如果该异常是检测时异常,那么使用 throws必须声明. */ class ExceptionStyle{ //异常的几种格式 public void method(){ //第一种格式 try { } catch (Exception e) { // TODO: handle exception } //第二种格式 try { } catch (Exception e) { // TODO: handle exception }finally{ } //第三格式 try{ }finally{ } //第四种 格式 try { }catch (ArithmeticException e) { // TODO: handle exception }catch (Exception e) { // TODO: handle exception } } //看看下面几种情况 //错误 没有throws Exception 编译不通过 public void method1() /*throws Exception*/{ throw new Exception(); } //正确 public void method2(){ try { throw new Exception(); } catch (Exception e) { // TODO: handle exception } } //错误 处理一个异常后 又抛出了异常 编译不通过 public void method3(){ try { throw new Exception(); } catch (Exception e) { throw e; } } //正确 只要 e 被处理就可以了 public void method4(){ try { throw new Exception(); } catch (Exception e) { try { throw e; } catch (Exception e2) { // TODO: handle exception } } } //错误 没有catch 或则 throws 就是没有处理 编译 不通过 , public void method5(){ try { throw new Exception(); }finally{ //关闭资源 产生的异常 有调用者处理 } } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 999public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2284经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5659package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 995import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1057/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1010//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1826更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1418import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 816import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2398import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 926// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1174import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 802import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1145import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3893import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 965/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1023import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1842Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1007/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2232package out; import ja ...
相关推荐
3. **异常处理**:Java中的异常处理机制是程序健壮性的重要组成部分,学习如何使用try-catch-finally语句块和throw、throws关键字来捕获和处理异常。 4. **集合框架**:Java集合框架包括List、Set、Map等接口和...
`try-catch-finally`用于捕获和处理异常,`try`块包含可能抛出异常的代码,`catch`块处理异常,`finally`块确保无论是否发生异常,都会执行的代码,通常用于资源清理。 这些知识点是Java基础的重要组成部分,理解和...
4. **异常处理**:学习如何处理运行时错误,理解try-catch-finally结构,以及throw和throws关键字的用法。 5. **IO流**:理解输入输出流的概念,学习File、BufferedReader、PrintWriter等类,进行文件读写操作。 6...
学习try-catch-finally语句块和throw、throws关键字。 9. **输入/输出流**:Java的I/O流库提供了读写文件、网络通信的能力。学习FileInputStream、FileOutputStream、BufferedReader、PrintWriter等类的使用。 10....
9. **异常处理**:学习Java的异常处理机制,包括`try-catch-finally`块,以及`throw`和`throws`关键字的使用。 10. **集合框架**:了解ArrayList、LinkedList、HashSet、HashMap等集合类,以及它们的特点和应用场景...
- **try-catch-finally**:理解如何捕获和处理异常,确保程序的健壮性。 - **throw和throws**:掌握何时使用throw声明和抛出异常,以及在方法签名中使用throws声明可能抛出的异常。 4. **集合框架** - **List、...
2. 控制流关键字:`if`, `else`, `switch`, `case`, `break`, `continue`, `do`, `while`, `for`, `try`, `catch`, `finally`, `throw`, `throws`。这些关键字用于控制程序的流程,如条件判断、循环、异常处理等。 ...
8. **异常处理**:学习Java的异常处理机制,包括try-catch-finally语句块和throw、throws关键字的使用。 9. **输入输出流**:熟悉I/O流的概念,学习如何进行文件的读写操作,包括字节流和字符流。 10. **集合框架*...
Java通过异常处理关键字进行错误和异常的捕获和处理。throws用在方法声明中表示方法可能会抛出的异常类型;throw用于抛出一个异常实例;try代码块包含可能抛出异常的代码;catch用于捕获并处理异常;finally块无论...
try-catch-finally块和throw、throws关键字是其中的关键概念。 4. **输入/输出流**:Java的I/O流用于读写文件、网络通信等,包括字节流和字符流,以及各种流的组合类如BufferedReader和FileWriter。 5. **网络编程...
此外,还将介绍Java的异常处理机制,包括try-catch-finally块和throw、throws关键字。 第6天:数组与集合 数组是存储固定数量相同类型数据的容器,而集合框架则提供了更灵活的数据存储方式。笔记将对比两者,介绍...
4.5 异常的捕获和处理 4.6 异常抛出 4.6.1 throw语句 4.6.2 throws语句 4.6.3 finally语句 4.7 自定义异常类 4.8 异常应用的其他问题 4.9 异常应用举例 五、线程 1、线程的概念 1.1 程序、进程与线程 1.2 线程调度...
7. **异常处理**:了解Java的异常处理机制,包括try-catch-finally语句块、throw和throws关键字,以及自定义异常。 8. **集合框架**:Java集合框架是处理对象集合的工具,包括List(ArrayList、LinkedList)、Set...
JavaSE的第五天作业主要涵盖了Java基础中的几个关键知识点,包括`Object`类、`equals()`...以上内容详细解释了JavaSE第五天作业涉及的主要概念和操作步骤,这些基础知识对于理解和处理Java程序中的常见问题至关重要。
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...
使用try-catch-finally结构处理异常。throws声明抛出异常,throw手动抛出异常。 23. String和StringBuffer的区别? String是不可变的,每次操作都会生成新的字符串对象。而StringBuffer是可变的,可以进行高效的...
实例70 求方阵对角线之和 96 实例71 矩阵的加法 97 实例72 矩阵的减法 98 实例73 快递报价单 99 5.3 数组的排序 101 实例74 冒泡排序法 102 实例75 数组递增排序 103 实例76 部分数组...
实例70 求方阵对角线之和 96 实例71 矩阵的加法 97 实例72 矩阵的减法 98 实例73 快递报价单 99 5.3 数组的排序 101 实例74 冒泡排序法 102 实例75 数组递增排序 103 实例76 部分数组递增排序 103 实例77 选择排序法...
实例70 求方阵对角线之和 96 实例71 矩阵的加法 97 实例72 矩阵的减法 98 实例73 快递报价单 99 5.3 数组的排序 101 实例74 冒泡排序法 102 实例75 数组递增排序 103 实例76 部分数组递增...
225 11.3 抛出异常 225 11.3.1 抛出异常的简单介绍 225 11.3.2 使用throws和throw语句抛出异常 227 11.4 自定义异常 227 11.4.1 创建和使用自定义异常类 227 11.4.2 自定义异常的实际应用 228 11.5 综合练习 231 ...