一直对java中的throws和throw不太理解。最近一直在查这两个方面的资料,算是能明白一点吧。如果我下面的观点哪有不对,希望指出来,我加以改进。

    
   throw:(针对对象的做法)
   抛出一个异常,可以是系统定义的,也可以是自己定义的。下面举两个例子:
   
抛出Java中的一个系统异常:
public class One {
public void yichang(){
NumberFormatException e = new NumberFormatException();
throw e;
}
public static void main(String[] args){
One test = new One();
try{
test.yichang();
}catch(NumberFormatException e){
System.out.println(e.getMessage());
}
}
}

抛出一个自定义的异常:
public class People {public static int check(String strage) throws MyException{int age = Integer.parseInt(strage);if(age < 0){throw new MyException("年龄不能为负数!");}return age;}public static void main(String[] args){try{int myage = check("-101");System.out.println(myage);}catch(NumberFormatException e){System.out.println("数据格式错误");System.out.println("原因:" + e.getMessage());}catch(MyException e){System.out.println("数据逻辑错误");System.out.println("原因:" + e.getMessage());}}
}
public class MyException extends Exception{private static final long serialVersionUID = 1L;private String name;public MyException(String name){this.name = name;}public String getMessage(){return this.name;}
}

   throws:(针对一个方法抛出的异常)
抛出一个异常,可以是系统定义的,也可以是自己定义的。
抛出java中的一个系统异常:
public class One {
public void yichang() throws NumberFormatException{
int a = Integer.parseInt("10L");
}
public static void main(String[] args){
One test = new One();
try{
test.yichang();
}catch(NumberFormatException e){
System.out.println(e.getMessage());
}
}
}

抛出一个自定义异常:
public class People {
public static int check(String strage) throws MyException{
int age = Integer.parseInt(strage);
if(age < 0){
throw new MyException("年龄不能为负数!");
}
return age;
}
public static void main(String[] args){
try{
int myage = check("-101");
System.out.println(myage);
}catch(NumberFormatException e){
System.out.println("数据格式错误");
System.out.println("原因:" + e.getMessage());
}catch(MyException e){
System.out.println("数据逻辑错误");
System.out.println("原因:" + e.getMessage());
}
}
}public class MyException extends Exception{
private static final long serialVersionUID = 1L;
private String name;
public MyException(String name){
this.name = name;
}
public String getMessage(){
return this.name;
}
}

那么下面我要说究竟什么时候用哪种:
 
 如果是系统异常的话可以什么都不用做,也可以针对方法抛出一个异常,因为系统异常是可以被系统自动捕获的,所以这个异常究竟是要在方法内部解决还是交给上层函数去解决其实效果是一样的。但是我查了很多资料,即使会抛出异常能被系统所捕获的话还是建议针对方法写一个throws,因为这样在完成一个大型任务的时候可以让别的程序员知道这里会出现什么异常。
 
如果是自己定义的异常,则必须要用throws抛出该方法可能抛出的异常,否则编译会报错。

转载于:https://www.cnblogs.com/13224ACMer/p/4926106.html

throws和throw抛出异常的使用规则相关推荐

  1. 1.10 throws和throw:声明和抛出异常

    Java 中的异常处理除了捕获异常和处理异常之外,还包括声明异常和拋出异常. 实现声明和抛出异常的关键字非常相似,它们是 throws 和 throw. 可以通过 throws 关键字在方法上声明该方 ...

  2. java中的抛出异常throws与throw

    throws与throw throws是方法可能抛出异常的声明.(用在声明方法时,表示该方法可能要抛出异常) 语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{. ...

  3. 什么是异常?为什么要抛出异常?throws和throw的区别

    文章目录 前言 1. 异常是什么? 1.1 概述:异常就是程序出现了不正常的情况 1.2 体系结构 1.3 编译时异常和运行时异常的区别 1.4 Throwable成员方法:返回异常信息方法 2. 怎 ...

  4. C#中throw抛出异常后,后续代码执行情况

    1.问题来源参见以下代码: public void add(int index, E element) {if(size >= elements.length) {throw new Runti ...

  5. 异常(try...catch...finally、throws、throw)

    当出现程序无法控制的外部环境(文件不存在,文件内容损坏,网络不可用等)问题时,java就会用异常对象来描述. Java中用2种方法处理异常: 1. 在发生异常的地方直接处理. 2. 将异常抛给调用者, ...

  6. java throw抛出异常

    1.throws关键字通常被应用在声明方法时,用来指定可能抛出的异常.多个异常可以使用逗号隔开.当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象.如下面例子所示: public cl ...

  7. JavaSE——异常处理(异常简介、try-catch-finally、throws、throw)

    第4节 异常处理 异常处理学习的目标: 明确说明是异常(重点) 能辨识出常见的异常及其含义(熟悉) 理解异常产生的原理(了解) 能处理异常(重点) 能够自定义异常(熟悉) 一.什么是异常? 异常是在程 ...

  8. Java中throws和throw的区别讲解

    当然,你需要明白异常在Java中式以一个对象来看待. 并且所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,但是一般情况下Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示 ...

  9. java中throws和throw的区别和用法

    1.throws关键字通常被应用在声明方法时,用来指定可能抛出的异常.多个异常可以使用逗号隔开.当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象.如下面例子所示: public cl ...

最新文章

  1. hdu 4417(线段树OR树状数组)
  2. boost::hana::scan_right用法的测试程序
  3. 【嵌入式】ARM技术博客汇总
  4. 【Linux】一步一步学Linux——adduser命令(83)
  5. poj 3090 amp;amp; poj 2478(法雷级数,欧拉函数)
  6. IOS之Label画一条删除线
  7. GCD简介三:Dispatch Sources
  8. 程序员面试金典——1.1确定字符互异
  9. mysql 存储过程写入文件
  10. Minimum Size Subarray Sum (二分)
  11. php 正则表达式 匹配 字符串,PHP 字符串与正则表达式匹配
  12. Chapter 1 : MySQL体系结构和搜索引擎
  13. 微信公众号实现人脸识别功能
  14. 毕业论文给图、表格、公式编号(不设置多级列表)
  15. 腾讯云mysql如何设置远程访问_腾讯云主机 MySQL 远程访问配置方法
  16. 解决windows防火墙拦截FTP连接
  17. python-matplotlib-数据可视化-导入shp矢量数据并显示成图
  18. Nginx的介绍与使用
  19. 朋友们都在用jpg转PDF免费软件有哪些?常用3款软件来分享
  20. Linux 压缩、解压工具

热门文章

  1. 9-分析事物问题并编写 Utils 文件
  2. 从尾到头打印单向链表
  3. Codeforces Round #504 E - Down or Right 交互题
  4. python工具之myql数据库操作
  5. const与#define的异同
  6. 软件开发人员真的了解SQL索引吗(索引使用原则)
  7. protobuf生成
  8. (转)Paper list of Meta Learning/ Learning to Learn/ One Shot Learning/ Lifelong Learning
  9. 个人信息泄露,背后竟有“内鬼”作祟,堵上网络安全漏洞
  10. c# for提升效率的写法