java throw:异常的抛出程序可以用throw语句抛出明确的异常。throw语句的通常形式如下:

throw throwableinstance;

这里,throwableinstance一定是throwable类类型或throwable子类类型的一个对象。简单类型,例如int或char,以及非throwable类,例如string或object,不能用作异常。有两种可以获得throwable对象的方法:在catch子句中使用参数或者用new操作符创建。

程序执行在throw语句之后立即停止;后面的任何语句不被执行。最紧紧包围的try块用来检查它是否含有一个与异常类型匹配的catch语句。如果发现了匹配的块,控制转向该语句;如果没有发现,次包围的try块来检查,以此类推。如果没有发现匹配的catch块,默认异常处理程序中断程序的执行并且打印堆栈轨迹。

下面是一个创建并抛出异常的例子程序,与异常匹配的处理程序再把它抛出给外层的处理程序。

// demonstrate throw.

class throwdemo {

static void demoproc() {

try {

throw new nullpointerexception("demo");

} catch(nullpointerexception e) {

system.out.println("caught inside demoproc.");

throw e; // rethrow the exception

}

}

public static void main(string args[]) {

try {

demoproc();

} catch(nullpointerexception e) {

system.out.println("recaught: " + e);

}

}

}

该程序有两个机会处理相同的错误。首先,main()设立了一个异常关系然后调用demoproc( )。 demoproc( )方法然后设立了另一个异常处理关系并且立即抛出一个新的nullpointerexception实例,nullpointerexception在下一行被捕获。异常于是被再次抛出。下面是输出结果:

caught inside demoproc.

recaught: java.lang.nullpointerexception: demo

该程序还阐述了怎样创建java的标准异常对象,特别注意下面这一行:

throw new nullpointerexception("demo");

这里,new用来构造一个nullpointerexception实例。所有的java内置的运行时异常有两个构造函数:一个没有参数,一个带有一个字符串参数。当用到第二种形式时,参数指定描述异常的字符串。如果对象用作 print( )或println( )的参数时,该字符串被显示。这同样可以通过调用getmessage( )来实现,getmessage( )是由throwable定义的。

java throws子句

如果一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己而不发生异常。做到这点你可以在方法声明中包含一个throws子句。一个 throws 子句列举了一个方法可能抛出的所有异常类型。这对于除error或runtimeexception及它们子类以外类型的所有异常是必要的。一个方法可以抛出的所有其他类型的异常必须在throws子句中声明。如果不这样做,将会导致编译错误。

下面是包含一个throws子句的方法声明的通用形式:

type method-name(parameter-list) throws exception-list{

// body of method

}

这里,exception-list是该方法可以抛出的以有逗号分割的异常列表。

下面是一个不正确的例子。该例试图抛出一个它不能捕获的异常。因为程序没有指定一个throws子句来声明这一事实,程序将不会编译。

// this program contains an error and will not compile.

class throwsdemo {

static void throwone() {

system.out.println("inside throwone.");

throw new illegalaccessexception("demo");

}

public static void main(string args[]) {

throwone();

}

}

为编译该程序,需要改变两个地方。第一,需要声明throwone( )引发illegalaccess exception异常。第二,main( )必须定义一个try/catch 语句来捕获该异常。正确的例子如下:

// this is now correct.

class throwsdemo {

static void throwone() throws illegalaccessexception {

system.out.println("inside throwone.");

throw new illegalaccessexception("demo");

}

public static void main(string args[]) {

try {

throwone();

} catch (illegalaccessexception e) {

system.out.println("caught " + e);

}

}

}

下面是例题的输出结果:

inside throwone

caught java.lang.illegalaccessexception: demo

希望与广大网友互动??

点此进行留言吧!

Java中throw re_详解Java编程中throw和throws子句的使用方法相关推荐

  1. java runnable 异常_详解Java中多线程异常捕获Runnable的实现

    详解Java中多线程异常捕获Runnable的实现 1.背景: Java 多线程异常不向主线程抛,自己处理,外部捕获不了异常.所以要实现主线程对子线程异常的捕获. 2.工具: 实现Runnable接口 ...

  2. java comparator相等_详解Java中Comparable和Comparator接口的区别

    详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...

  3. Java implement意思_详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 发布于 2020-4-14| 复制链接 摘记: 详解JAVA中implement和extends的区别extends是继承父类,只要那个类不是声 ...

  4. java sleep唤醒_详解Java中的线程让步yield()与线程休眠sleep()方法

    Java中的线程让步会让线程让出优先级,而休眠则会让线程进入阻塞状态等待被唤醒,这里我们对比线程等待的wait()方法,来详解Java中的线程让步yield()与线程休眠sleep()方法 线程让步: ...

  5. idea看java版本设置_详解IntelliJ IDEA 中如何配置多个jdk版本即(1.7和1.8两个jdk都可用)...

    详解IntelliJ IDEA 中如何配置多个jdk版本即(1.7和1.8两个jdk都可用) 有时候需要看Java源码,但是 Java 1.7 和 Java 1.8的差别的关系,有时候你想查看不同jd ...

  6. java 代码块_详解java中的四种代码块

    在java中用{}括起来的称为代码块,代码块可分为以下四种: 一.简介 1.普通代码块: 类中方法的方法体 2.构造代码块: 构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行. ...

  7. java static 函数_详解java中的static关键字

    Java中的static关键字可以用于修饰变量.方法.代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解. 静态资 ...

  8. java 自动装载_java_详解Java的Spring框架下bean的自动装载方式,Spring容器可以自动装配相互协 - phpStudy...

    详解Java的Spring框架下bean的自动装载方式 Spring容器可以自动装配相互协作bean之间的关系,这有助于减少对XML配置,而无需编写一个大的基于Spring应用程序的较多的和元素. 自 ...

  9. java 引用传递_详解java的值传递、地址传递、引用传递

    详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...

最新文章

  1. 变分自编码器VAE代码
  2. 内存不能“read”
  3. c 自动生成mysql表结构_EntityFrameworkCore 根据实体类自动创建数据库
  4. WordPress实践:上传文件时提示“缺少临时文件夹”
  5. 微软将所有的Windows代码库迁移到Git
  6. 计算机应用画画教程,小学生信息技术之电脑绘画教学
  7. Exploratory Data Analysis可视化分析美国天气
  8. 精通cobol--9.3.1 OCCURS语句的使用方法
  9. 打造海报视觉效果—利用图层模式调色
  10. 前端插件:雪碧图(多图压缩为一张)
  11. 2.命名空间实现机制
  12. 常用的加密有哪些?在Java中如何实现?(MD5、AES、RSA)
  13. 分享一个很酷很炫的html5特效网站源码
  14. 图像处理;C++求已知两直线方程交点
  15. oracle计算两日期相差多少秒,分钟,小时,天
  16. 治愈拖延症患者的解药
  17. C# 检测防火墙状态
  18. 程序员因太过耿直, 致苹果官网出现bug, 网友直呼: 太可爱了
  19. 多线程算法题:国王、毒酒、侍卫
  20. 操作系统入门详解以及Linux介绍

热门文章

  1. 混合云环境中扩展Kubernetes的挑战及方案
  2. Java IO的一些思考
  3. 11 Java NIO Non-blocking Server-翻译
  4. 网页热点区域神器工具大曝光
  5. Fork and Join: Java Can Excel at Painless Parallel Programming Too!---转
  6. Selenium启动不同浏览器
  7. [20160321]bvi使用问题2.txt
  8. Linux 高可用(HA)集群之keepalived+lvs
  9. Android AudioPolicyService和AudioPolicyManager
  10. hi3516中home中的ko