一、异常的产生
1. 在java代码中,如果发生异常,JVM就会中断程序代码的运行,然后创建异常对象并抛出。例如:
int a=2, b=0;
int i=a/b;  //除数不能为0,发生异常
System.out.println(i);
程序会在执行第2行代码时中断,并抛出异常,导致后面的代码无法执行。
2. 但是,有些情况程序员认为是异常的,而在JVM看来却是正常的,比如说:
int age;
age = -100;
System.out.println(age);
对于JVM来说,这只是正常的赋值语句,但在我们眼中这就不正常了,谁的年龄会是负的呢。
所以,在这种情况下我们就需要自己手动创建并抛出异常,这就需要用到throw了:
int age;
age = -100;
if (age<0)
{
Exception e = new Exception("Age Exception");  //创建异常对象
  throw e;  //抛出异常
}
System.out.println(age);
注:JVM创建的异常对象会由JVM自动抛出,而程序员创建并抛出的对象必须通过throws或try{}catch(){}进行相应处理。
二、异常的处理
当异常发生后就要作相应处理,常用的处理手法有throws和try{}catch(){}:
1. 定义一个方法时如果使用throws,如:
public void someMethod() throws Exception
{
//do something
}
就表示该方法可能抛出某种异常,那么该方法的调用者就必须处理该方法抛出的异常,可以继续使用throws抛出或者使用try{}catch(){}捕捉,如果异常被抛到顶层都没有捕捉就会将异常信息显示于顶层(控制台或页面);
2. 如果在一段代码中使用try{}catch(){},如:
public void someMethod()
{
try
{
int a=2, b=0;
int i=a/b;  //除数不能为0,发生异常,try{}块中止运行

System.out.println(i); //无法执行

}
catch(Exception e)
{
System.out.println("发生异常!");  //捕捉到异常并处理
}
System.out.println("我仍然继续!");  //正常执行 
}

当try{}块中的代码产生异常时,try{}块中的代码就会中断运行,并由catch(){}块捕捉到产生的异常并作相应处理,而 try{}catch(){}后面的代码仍可正常执行。但是,一般不要简单地捕捉顶层的Exception,因为Exception是所有异常的父类,包 括RuntimeException,简单捕捉Exception会将所有类型的Exception全部捕捉,这样不利于异常处理。
当可能发生的异常不止一种时,如:SQLException, IOException,有两种catch方式:
(1)SQLException, IOException无论catch哪种都进行统一处理,如:
try{}
catch(SQLException se, IOException ie)  //不推荐
{
//do something
}
(2)分开处理,如:
try{}
catch( IOException ie)
{
//do something
}
catch(SQLException se)
{
//do something
}
在(2)中,如果两种异常属于继承关系,则应按继承关系中从子到父的顺序进行处理,如:
try{}
catch( IOException ie)
{
//do something
}
catch(Exception e)
{
//do something
}

因为IOException继承自Exception,Exception包含IOException,所以,如果将 catch(Exception e){}放到前面就会连IOException一起catch,这样后面的catch(IOException ioe){}就变得毫无意义。
另外,由于Java有垃圾回收器,所以异常处理并不需要处理内存的回收问题,但是依然有一些资源需要程序员来处理,比如文件、网络连接和图片等 资源,这种情况可以在try{}catch(){}后加上finally{}块进行程序的清理工作,无论try{}块中有没有发生异 常,finally{}块中的代码都一定会被执行。

[Java]关于throw,throws,try{}catch(){}相关推荐

  1. 浅谈Java throw, throws, try catch异常处理

    2019独角兽企业重金招聘Python工程师标准>>> 1.throws关键字通常被应用在声明方法时,用来指定可能抛出的异常.多个异常可以使用逗号隔开.当在主函数中调用该方法时,如果 ...

  2. java异常处理,throw和throws的区别

    java的异常处理分为: try catch, throw, throws try catch很简单 /** 也就是发现异常,对异常的处理*/ public class TryCatch {publi ...

  3. java异常处理之throw, throws,try和catch

    转自 http://blog.csdn.net/zhouyong80/article/details/1907799  程序运行过程中可能会出现异常情况,比如被0除.对负数计算平方根等,还有可能会出现 ...

  4. Java异常之try,catch,finally,throw,throws

    Java异常之try,catch,finally,throw,throws 你能区分异常和错误吗? 我们每天上班,正常情况下可能30分钟就能到达.但是由于车多,人多,道路拥挤,致使我们要花费更多地时间 ...

  5. 多态的概念、对象上下转型、多态的应用、异常(异常概念、异常分类、java异常处理机制、try...catch...finally、throw和throws、自定义异常)

    多态的概念: 多态性是指同一个操作作用于某一类对象,可以有不同的解释,产生不同的执行结果. 多态存在的三个必要条件: ① 需要存在继承或实现关系 ② 同样的方法调用而执行不同的操作.运行不同代码(重写 ...

  6. java throw 和catch_java异常处理之throw, throws,try和catch

    转自 http://blog.csdn.net/zhouyong80/article/details/1907799 程序运行过程中可能会出现异常情况,比如被0除.对负数计算平方根等,还有可能会出现致 ...

  7. java的throw_浅谈Java的throw与throws

    浅谈Java异常 以前虽然知道一些异常的处理,也用过一些,但是对throw和throws区别还是有不太清楚.今天用实例测试一下 异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被 ...

  8. java throw与throws_基于Java中throw和throws的区别(详解)

    系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...

  9. JAVA 异常 throw 与 throws

    最近一直throw和throw new -- 获取头部罢工,要彻底生气清楚这件事,他对这个思想精华收集了很多网友.这里摘录. throws全部异常信息 throw则是指抛出的一个详细的异常类型. 通常 ...

最新文章

  1. 3.网络通信协议分类
  2. 【MM模块】Stock transfersTransfer posting 转储和调拨
  3. 如何创建最简单的 SAP Kyma Function
  4. 你看不懂的spring原理是因为不知道这几个概念
  5. 电脑技巧:Win10无线投屏功能介绍
  6. html li 做瀑布流,js实现瀑布流效果(自动生成新的内容)
  7. Memcached主主复制+Keepalived高可用架构
  8. asp毕业设计——基于asp+access的公司门户网站设计与实现(毕业论文+程序源码)——公司门户网站
  9. SpringOne 2017重要公告
  10. 打印机后台服务器修复,修复win10出现“本地打印后台处理程序服务没有运行”的方法...
  11. 智能自动感应手消毒器方案开发
  12. HIT 软件构造 lab3实验报告
  13. 价格屠夫乐视杀入4K电视市场
  14. Windows11 微软拼音注册表方式添加小鹤双拼
  15. 微信小程序模板-分页滑动栏
  16. 知识点索引:幂函数性质
  17. 无线WIFI系统如何解决短信认证功能?
  18. 深夜来一发,拿走不谢
  19. 在IDEA中使用MCR调用运行matlab代码
  20. 能源结构优化与低碳化发展:低碳化指数-全国分地区能源消费结构

热门文章

  1. Redis:07---Redis数据结构
  2. lua的一些api文档总结吧
  3. C++(0)--mac 使用VScode 进行C++编译、运行、调试
  4. 《C++ Primer 5th》笔记(3 / 19):字符串、向量、迭代器和数组
  5. 51单片机下载完程序后不亮_程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍...
  6. memory_buffer详解
  7. 进程之间通信 共享内存
  8. 密码学在区块链隐私保护中的应用学习
  9. 程序员生存定律--使人生永动的势能
  10. 基于OpenCL的mean filter性能