java——异常类、异常捕获、finally、异常抛出、自定义异常
编译错误:由于编写程序不符合程序的语法规定而导致的语法问题。
运行错误:能够顺利的编译通过,但是在程序运行过程中产生的错误。
java异常类都是由Throwable类派生而来的,派生出来的两个分支分别为Error和Exception类。
Error类:java程序在运行过程中发生的系统内部错误和资源耗尽错误。由java虚拟机生成并抛出,java通常部队这类异常进行处理,而且这类错误很少出现。
RuntimeException类:程序错误导致的异常。
非RuntimeException类:(比如,IOException类:本来是可以正常运行的程序,由于某些情况发生异常导致程序不能正常运行。)
package follow_pacage;
public class exp {
public static void main(String[] args) {
tryCatch();
}
static void tryCatch() {
try {
try {
System.out.println("执行里层try块\n");
int b = Integer.parseInt("abc");
System.out.println(b);
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("执行里层catch\n");
}
}catch(NumberFormatException e) {
System.out.println("执行外层catch\n");
}
}
}
异常捕获:
try{
...
}catch(Exception e){
...
}
我试了一下,try后可以不跟catch,而直接跟fianlly。
finally:
如果将内存释放的工作放在finally块内,程序不会由于内存未释放资源而导致内存泄漏。
finally语句必须配合try使用。
通常情况下,finally语句块总会执行,那么什么时候finally语句块不会执行呢?
1.cpu关闭
2.finally之前的语句有Syste.exit(0)
3.finally过程中抛出异常,则异常之后的而其他程序不会继续执行
4.程序所属线程死亡。
如果try或者catch语句块中包含return语句,那么程序在执行return语句之前执行finally语句块。
不能在finally中执行return、continue语句(https://blog.csdn.net/abinge317/article/details/52253768)
异常抛出:
1)在方法的声明中使用throws语句指定它所抛出的异常
2)使用throw语句抛出异常
例子:
package follow_pacage;
public class exp {
public static void main(String[] args) {
try {
String s = null;
demo(s);
}catch(NullPointerException e) {
System.out.println("异常为:"+e);
}
}
static void demo(String s) {
try {
if(s == null) {
throw new NullPointerException("ThrowExample");
}
}catch(NullPointerException e){
System.out.println("参数s的值为空");
//这里抛出了异常
throw e;
}
}
}
try catch语句可以处理异常,如果一个方法可以导致一个异常,但并没有用try catch语句来处理异常,就要在方法名后面使用throws声明这个异常,异常将在外层被处理或者继续抛出。
package follow_pacage;
import java.io.IOException;
public class exp {
public static void main(String[] args) {
try {
System.out.println("请输入:");
String s = getInput();
System.out.println("输入为:");
System.out.println(s);
}catch(IOException e) {
System.out.println("产生异常:"+e.getMessage());
}
}
public static String getInput() throws IOException{
char[] buffer = new char[10];
boolean flag = true;
int count = 0;
while(flag) {
buffer[count] = (char)System.in.read();
if(buffer[count] != '\n') {
count++;
}else {
flag = false;
}
//这里在输入结尾有一个回车,所以实际只存放了9个字符
if(count >= 10) {
IOException aException = new IOException("buffer is full");
//抛出异常
throw aException;
}
}
//新建了一个String类型的字符串,将char[]类型的buffer字符传入
return new String(buffer);
}
}
自定义异常:
package follow_pacage;
public class MyException extends Exception{
public MyException() {
}
public MyException(String str) {
super(str);
}
}
java——异常类、异常捕获、finally、异常抛出、自定义异常的更多相关文章
- SQL Server 抛出自定义异常,由C#程序俘获之并进行相应的处理
最近一直在找可以自定义异常,并用C#程序捕获并进行相应的处理,试了很多方法都没有成功.今天终于找到了不错的方法.所以转载并分享给大家. 摘自:http://www.cnblogs.com/scottc ...
- 抛出自定义异常,spring AOP事务不回滚的解决方案
spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...
- Java中主线程如何捕获子线程抛出的异常
首先明确线程代码的边界.其实很简单,Runnable接口的run方法所界定的边界就可以看作是线程代码的边界.Runnable接口中run方法原型如下: public void run(); 而所有的具 ...
- Java处理Exception无法捕获的异常
场景: 使用try...catch(Exception e){}来捕获异常,执行过程中线程中断或阻塞了,但是catch块中却并没有捕获到异常信息. try{ // 此处可能是调用一个远程的接口,或是调 ...
- Java Thread 如何处理未捕获的异常?
Java Thread是不允许异常抛出到本线程之外的,Runnable接口的public abstract void run()是不允许throws Exception的,这在编译时就通不过. 线程异 ...
- Spring事务异常回滚,捕获异常不抛出就不会回滚(转载) 解决了我一年前的问题
最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了....... 为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常 ...
- PHP 高级编程(4/5) - SPL异常类之 LogicException 逻辑异常
SPL 提供了一系列标准异常.日常的使用中我们应该根据需求科学的使用它们,来使我们的程序更加健壮.LogicException 是从 Exception 基类派生的,没有添加任何附加方法.抛出逻辑异常 ...
- Spring事务异常回滚,捕获异常不抛出就不会回滚
最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了....... 为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异常 ...
- 【转】Spring事务异常回滚,捕获异常不抛出就不会回滚
最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了....... 为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志.但是这边情况来了,当这个方法异 ...
- spring事物回滚机制 (事务异常回滚,捕获异常不抛出就不会回滚)
当异常被捕获catch的时候,spring的事物则不会回滚 为什么不会滚呢?? spring aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常 ...
随机推荐
- VMware Workstation 软件 创建 Ubuntu 14.04虚拟机
VMware Workstation 软件 创建 Ubuntu 14.04虚拟机 1. 安装VMare Workstation 软件 下载VMware 11 软件 http://www.dntk.or ...
- vimrc 我的专属vim配置
set nu set wrap syntax on filetype on "打开vim文件类型自动检测功能 set autoindent set smartindent set ruler ...
- 美团热更新Robust Demo演示
1.Android Studio clone 远程Robust项目源码 gradle 同步依赖资源,可能需要半个小时左右. 2.生成样例apk包 配置app module下build.gradle 插 ...
- 批量更改某一目录之下所有文件名 Ver2
前一篇<批量更改某一目录之下所有文件名>只是批量修改所有子目录下的文件名.Insus.NET重构了它.能让它修改所有子目录名和子目录下的文件名.就是分别迭代,目录迭代目录,文件迭代文件. ...
- onmouseover和onmouseout在GridView中应用 Ver2
第一个版本,可以参考:http://www.cnblogs.com/insus/archive/2009/03/13/1411057.html 以前的版本,是在Gridview的OnRowCreate ...
- 转载-ActiveMQ通过JAAS实现的安全机制
JAAS(Java Authentication and Authorization Service)也就是java认证/授权服务.这是两种不同的服务,下面对其做一些区别:验证(Authenticat ...
- Binder学习笔记(五)—— Parcel是怎么打包数据的?
前文中曾经遇到过Parcel,从命名上知道他负责数据打包.在checkService的请求/响应体系中,Parcel只打包了基本数据类型,如Int32.String16……后面还要用于打包抽象数据类型 ...
- Mybatis基于代理Dao实现CRUD操作 及 Mybatis的参数深入
Mybatis基于代理Dao实现CRUD操作 使用要求: 1.持久层接口和持久层接口的映射配置必须在相同的包下 2.持久层映射配置中mapper标签的namespace属性取值必须是持久层接口的全限定 ...
- 【bzoj2434】: [Noi2011]阿狸的打字机 字符串-AC自动机-BIT
[bzoj2434]: [Noi2011]阿狸的打字机 x串在y串上的匹配次数就是y在自动机所有节点上能够通过fail走到x最后一个节点的个数 (就是y串任意一个前缀的后缀能匹配到x的个数)和[bzo ...
- 亿级PV请求的三种负载均衡技术(转)
http://www.360doc.com/content/17/1126/23/50145453_707419125.shtml 目录 DNS轮询 LVS负载均衡 DR模式 NAT模式 ...