之前给大家介绍了java

throws声明异常,那么和throws不一样的是throw语句用来直接拋出一个异常,后接一个可拋出的异常类对象,下面的话一起来详细的了解一下throw拋出异常吧。

下面是语法格式:throw ExceptionObject;

注意,ExceptionObject必须是Throwable类或者是其子类的对象,哪怕是自定义异常类,也必须是Throwable的直接或者是间接子类。

例:

下面的语句会在编译的时候产生语法错误:throw new String("拋出异常");    // String类不是Throwable类的子类

在throw语句执行的时候,它后面的语句将不执行,这个时候,程序转向调用者程序,寻找和它相匹配的catch语句,执行相应的异常处理程序。

假如,没有找到相匹配的catch语句,那么,再转向上一层的调用程序,这样逐层向上,直到最外层的异常处理程序终止程序并打印出调用栈情况。

throw关键字不会单独使用,它的使用完全符合异常的处理机制,但是,一般来讲用户都在避免异常的产生,所以不会手工抛出一个新的异常类的实例,而往往会抛出程序中已经产生的异常类的实例。

示例:

在某仓库管理系统当中,要求管理员的用户名需要由8位以上的字母或者数字组成,不能含有其他的字符。

当长度在8位以下时拋出异常,并显示异常信息;

当字符含有非字母或者数字时,同样拋出异常,显示异常信息;

代码:import java.util.Scanner;

public class Test05

{

public boolean validateUserName(String username)

{

boolean con = false;

if (username.length() > 8)

{

// 判断用户名长度是否大于8位

for (int i = 0; i

{

char ch = username.charAt(i); // 获取每一位字符

if ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))

{

con = true;

}

else

{

con = false;

throw new IllegalArgumentException("用户名只能由字母和数字组成!");

}

}

}

else

{

throw new IllegalArgumentException("用户名长度必须大于 8 位!");

}

return con;

}

public static void main(String[] args)

{

Test05 te = new Test05();

Scanner input = new Scanner(System.in);

System.out.println("请输入用户名:");

String username = input.next();

try

{

boolean con = te.validateUserName(username);

if (con)

{

System.out.println("用户名输入正确!");

}

}

catch (IllegalArgumentException e)

{

System.out.println(e);

}

}

}

在validateUserName()方法中两处拋出了IllegalArgumentException异常,也就是当用户名字符含有非字母或者数字以及长度不够8位的时候,在main()方法当中,调用了validateUserName()方法,并使用catch语句捕获该方法可能拋出的异常。

运行程序,当用户输入的用户名包含非字母或者数字的字符时,程序输出异常信息,如下:请输入用户名:

administrator@#

java.lang.IllegalArgumentException: 用户名只能由字母和数字组成!

用户输入的用户名长度不够8位的时候,程序同样会输出异常信息,如下:请输入用户名:

admin

java.lang.IllegalArgumentException: 用户名长度必须大于 8 位!

以上就是对于java throw拋出异常的介绍了,你都清楚了吧,更多常见问题,可以继续的通过奇Q工具网来进行了解哦。

推荐阅读:

java throw异常_java throw拋出异常详解相关推荐

  1. java lombok 视频_Java开发神器Lombok使用详解

    最近正在写SpringBoot系列文章和录制视频教程,每次都要重复写一些Getter/Setter.构造器方法.字符串输出的ToString方法和Equals/HashCode方法等.甚是浪费时间,也 ...

  2. java observer模式_Java观察者模式(Observer)详解及应用

    Java观察者模式(Observer)详解及应用 (2011-12-15 14:03:30) 标签: 杂谈 Java观察者模式(Observer)详解及应用 由于网站带有弱sns功能,因此需要设计关注 ...

  3. java闭合数据_java多线程中线程封闭详解

    线程封闭的概念 访问共享变量时,通常要使用同步,所以避免使用同步的方法就是减少共享数据的使用,这种技术就是线程封闭. 实现线程封闭的方法 1:ad-hoc线程封闭 这是完全靠实现者控制的线程封闭,他的 ...

  4. java linkedlist实例_Java Linkedlist原理及实例详解

    这篇文章主要介绍了Java Linkedlist原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 定义:linkedlist属于链表结构 ...

  5. java多线程教程_java 基础教程之多线程详解及简单实例

    java 多线程详解 在这篇文章里,我们关注多线程.多线程是一个复杂的话题,包含了很多内容,这篇文章主要关注线程的基本属性.如何创建线程.线程的状态切换以及线程通信. 线程是操作系统运行的基本单位,它 ...

  6. java 类参数_Java的数据类型和参数传递(详解)

    Java提供的数据类型主要分为两大类:基本数据类型和引用数据类型. Java中的基本数据类型 名称 大小 取值范围 byte型 (字节) 8bit -128-127 (-2^7到2^7-1) shor ...

  7. java静态多态_Java静态方法不具有多态性详解

    动态绑定机制使得基类的引用能够指向正确的子类对象,从而使得面向基类编程成为可能. 然而动态绑定在以下两种情况会失效. 1.基类方法是private或final修饰的 这个很好理解,因为private说 ...

  8. java 链表逆转_java 实现单链表逆转详解及实例代码

    java 实现单链表逆转详解 实例代码: class Node { Node next; String name; public Node(String name) { this.name = nam ...

  9. java迭代例子_Java 迭代器的代码实例详解

    一.摘要 迭代器模式是与集合共生共死的.一般来说,我们只要实现一个容器,就需要同时提供这个容器的迭代器.使用迭代器的好处是:封装容器的内部实现细节,对于不同的集合,可以提供统一的遍历方式,简化客户端的 ...

  10. java工程师待遇_Java软件工程师工资待遇详解

    Java软件工程师工资待遇详解 时间:2018-08-16     来源:未知 Java软件工程师工资待遇情况怎么样?Java软件工程师的工资水平与哪些因素有关呢?今天小编从这两方面和大家来进行分析一 ...

最新文章

  1. 多个模型在测试集上的Accuracy以及AUC指标可视化对比实战
  2. 如果计算机语言是中国人发明的 | 每日趣闻
  3. 干货 | 毕业论文无从下手?一文帮你理清头绪!
  4. JS ES6中export和import详解
  5. javamail 解码 base64 html格式邮件_python使用QQ邮箱实现自动发送邮件
  6. 机器学习是如何改善企业生产力的?(内附机器智能版图)
  7. 树状数组 Binary Indexed Tree/Fenwick Tree
  8. 云大计算机昆工,云南最好的7所大学,分3档!本地人青看中昆医大,外省更爱昆工!...
  9. OpenCV中的级联分类器Cascade Classifier(面部识别)
  10. 119 Python程序中的线程操作-线程同步
  11. 分析arm Internal error: synchronous external abort: 96000010 [#1] PREEMPT SMP
  12. 零基础如何学习C语言
  13. 抖音多画面分屏PR分屏预设 横板竖版手机短视频分屏效果PR预设下载
  14. pythonshell窗口是什么_使用IDLE的Python shell窗口实例详解
  15. Phyton pymssql连接数据库
  16. 计算学习理论PAC模型
  17. centos mysql 1146_MySQL查询报错:ERROR 1146 (42S02): Table 'craw.sitePageConfig' doesn't exist
  18. 微信小程序的选择收货地址、新增地址、地址管理等模块的总结(1)
  19. 22-3-批量对excel文件重命名
  20. Rational Rose 2003下载与破解安装

热门文章

  1. PHP的simplexml_load_string
  2. python替换缺失值_python 缺失值处理(Imputation)
  3. 操作系统角度谈测试管理和自动化测试
  4. PHP中的const
  5. PHP超实用的函数总结整理
  6. 基于PHP的CURL快速入门
  7. java可以转linux么_Java开发必会的Linux命令(转)
  8. idea设置默认maven路径(2020版idea)
  9. java jar包图片_jar包的图片不显示 求解
  10. 【sprinb-boot】资源、配置、lib分离打包