1异常的定义

异常就是与我们编译相违背在过程中出现的逻辑或忘记一些赋值等等

分为编译时错误和运行时错误

运行时异常

我们一般处理的时Exception异常;

异常处理

异常处理可以通过关键字try,catch,finally,throw,throws;

try,catch,finally处理 捕获异常

try捕获异常,通常把try放在我们觉得出错的位置;

catch 捕获异常,当异常出现时,被catch捕获通过Exception方法来提示异常(通常从异常最后一行开始处理异常);

finally

无论前面出现什么都会直接下面语句;

package com.jiedada.exception;

import java.util.Scanner;

public class Frist {

    public static void main(String[] args) {
// TODO Auto-generated method stub
int x=,y=; System.out.println("=============运行开始=========");
Scanner sc=new Scanner(System.in);
try {
System.out.println("请输入分子");
x=sc.nextInt();
System.out.println("请输入分母");
y=sc.nextInt();
}
catch(Exception e)
{
System.out.println("================程序结束=========");
e.printStackTrace();
}
finally {
System.out.println("该算术表达式结果为"+(x/y));
}
} }
 

catch可以使用多个子类的方法来判断属于那种类型的错误如ArithmeticException(算术表达式的错误)

在多个cat表达式中最后一个catch中最好或者一定要包含一个Exception的子方法表达式这样才能检查所有错误;

InputMismatchException(判断输入的类型不是不错的

package com.jiedada.exception;

import java.util.InputMismatchException;
import java.util.Scanner; public class Frist { public static void main(String[] args) {
// TODO Auto-generated method stub
int x=0,y=0; System.out.println("=============运行开始=========");
Scanner sc=new Scanner(System.in);
try {
System.out.println("请输入分子");
x=sc.nextInt();
System.out.println("请输入分母");
y=sc.nextInt();
System.out.println("该算术表达式结果为"+(x/y));
}
catch(ArithmeticException e)
{
System.out.println("除数不能为0,请重新输入");
e.printStackTrace();
}
catch(InputMismatchException e)
{
System.out.println("请输入整数");
e.printStackTrace();
}
catch(Exception e)
{
System.out.println("出错啦---");
e.printStackTrace();
}
finally {
System.out.println("================程序结束=========");
}
} }

Sysout.exit(非0数)终止程序运行

return在这个结构中的使用:因为finally的存在,不管怎么都会执行finally中的语句所以

return写在finally中都只会返回finally中的return;

throws声明异常

是抛出异常,通过在方法后面添加throws和 错误信息提示如Exception,ArithmeticException;

是通过调用该方法的实列通过try catch finally来执行

可以通过文档注释对异常进行说明;

package com.jiedada.exception;

import java.util.Scanner;

public class Three {

    public static  void main(String[] args) {
// TODO Auto-generated method stub
try {
int result=test();
System.out.println(result);
} catch (ArithmeticException e) {
// TODO Auto-generated catch block
System.out.println("除数不能为0");
e.printStackTrace();
}
}
/**
* 该方法是除法的运算
* @return 该算术的商
* @throws ArithmeticException
*/
public static int test()throws ArithmeticException{
int x=0,y=0;
System.out.println("=============运行开始=========");
Scanner sc=new Scanner(System.in); System.out.println("请输入分子");
x=sc.nextInt();
System.out.println("请输入分母");
y=sc.nextInt();
System.out.println("================程序结束=========");
return x/y; } }

throw处理抛出异常;

第一种方法:throw也是一种抛出异常结构为通过try catch在try中写入throw new 异常类型();

第二种方法:和throws差不太多,通过在代码中写入throw new 异常类型()[建议不要抛出非检查异常如,ArithmeticException]

通过在方法后面添加throws和 错误信息提示如Exception;谁调用谁就通过try catch异常处理;

在Exception中有输入字符串的方法如下:

在第二种中throw new 异常类型()通过在方法后面添加throws后面的异常处理必须要比throw中的大,如

package com.jiedada.exception;

import java.util.Scanner;

public class Four {

    public static void main(String[] args) {
// TODO Auto-generated method stub
try {
testAge();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
/*public static void testAge()
{ System.out.println("请输入入住者的年龄");
Scanner input=new Scanner(System.in);
int age=input.nextInt();
if(age<18||age>80)
{
try {
throw new Exception("18岁以下,80岁以上的人需要家人的陪同入住");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else
{
System.out.println("欢迎入住");
}*/ public static void testAge() throws Exception
{ System.out.println("请输入入住者的年龄");
Scanner input=new Scanner(System.in);
int age=input.nextInt();
if(age<18||age>80)
{ throw new Exception("18岁以下,80岁以上的人需要家人的陪同入住"); }else
{
System.out.println("欢迎入住");
}
}
}

自定义异常

当需要反复使用一些异常时我们可以自己定义:先创建一个异常继承Eception类,然后和Exception的方法相同。

在创建类的时候我们和其他的类一样需要创建构造类;

异常链

多个throw的向上抛出产生的异常问腿

package com.jiedada.exception;

public class Five {

    public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ThreeTest();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
public static void OneTest() throws HotelException
{
throw new HotelException();
}
public static void TwoTest() throws Exception
{
try {
OneTest();
}catch(HotelException e)
{
throw new Exception("这是第三个TEST",e);
}
}
public static void ThreeTest() throws Exception
{
try {
TwoTest();
}catch(Exception e2)
{
//throw new Exception("这是第三个TEST");
Exception e1=new Exception();
e1.initCause(e2);
throw e1;
}
} }

总结

保证能够正常执行当加入System.exit(非0数字)会终端;在该语句中return只会在执行了finally后才会返回值;

当子类继承父类的抛出方法是,子类只能抛出父类抛出方法的子类或者同类

JAVA常用工具类异常处理的更多相关文章

  1. JavaEE-实验一 Java常用工具类编程

    该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1.  使用类String类的分割split 将字符串  “Solutions to selected exercises ca ...

  2. JAVA常用工具类汇总

    一.功能方法目录清单: 1.getString(String sSource)的功能是判断参数是否为空,为空返回"",否则返回其值: 2.getString(int iSource ...

  3. Java常用工具类---XML工具类、数据验证工具类

    package com.jarvis.base.util; import java.io.File;import java.io.FileWriter;import java.io.IOExcepti ...

  4. [转]Java常用工具类集合

    转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...

  5. java常用工具类(java技术交流群57388149)

    package com.itjh.javaUtil;   import java.util.ArrayList; import java.util.List;   /** * * String工具类. ...

  6. 项目经验分享——Java常用工具类集合 转

    http://blog.csdn.net/xyw591238/article/details/51678525 写在前面     本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数 ...

  7. java 常用工具类

    1. org.apache.commons.collections4包提供CollectionUtils.MapUtils.ListUtils.SetUtils等工具类: 2. org.apache. ...

  8. Java常用工具类之Excel导出

    package com.wazn.learn.util; import java.util.List; import java.util.Map; import org.apache.poi.hssf ...

  9. Java常用工具类之删除文件

    package com.wazn.learn.util; import java.io.File; /** * 删除文件工具类 * @author yangzhenyu * */ public cla ...

随机推荐

  1. C# 实现邮件收取发送功能

    .Net调用QQ邮箱发送邮件   话说网上发送邮件的代码很多,但是我由于不细心,导致拿别人的代码发送邮件老是失败,今天就说说几个要注意的地方吧!!! ? 1 2 3 4 5 6 7 8 9 10 11 ...

  2. 以太坊钱包开发系列2 - 账号Keystore文件导入导出

    以太坊去中心化网页钱包开发系列,将从零开始开发出一个可以实际使用的钱包,本系列文章是理论与实战相结合,一共有四篇:创建钱包账号.账号Keystore文件导入导出.展示钱包信息及发起签名交易.发送Tok ...

  3. SSH服务器拒绝了密码

    一般进行到这一步,可能是sshd的设置不允许root用户远程登录首先修改一下vim /etc/sshd/ssh_config     修改成如下图:然后reboot或者service sshd res ...

  4. redis 版的 hello world

    为 redis 添加一个命令,效果如下图: 在 Server.h 中加入命令处理函数的声明: void meCommand(client *c); 在 Server.c 的命令表中加入: struct ...

  5. 1-Angular学习篇

    Angular 官方学习网站:https://angular.io 1.安装node.js 在angular主页下载node.js安装包 2.创建angular工程 Windows系统在命令窗口输入: ...

  6. 在数据库中sql查询很快,但在程序中查询较慢的解决方法

    在写java的时候,有一个方法查询速度比其他方法慢很多,但在数据库查询很快,原来是因为程序中使用参数化查询时参数类型错误的原因 select * from TransactionNo, fmis_Ac ...

  7. <转载> 从算法上解读自动驾驶是如何实现的?

     科技新闻小鹏汽车2016-03-28 10:42 [摘要]车辆路径规划问题中路网模型.路径规划算法和交通信息的智能预测为关键点. 由于驾驶员的驾驶工作繁重,同时随着汽车拥有量的增加,非职业驾驶员的数 ...

  8. 基于lnmp环境安装Discuz

    安装环境 Linux:CentOS Linux release 7.5.1804 (Core) nginx:1.14.2 php-fpm:5.4.16 mariadb-server:5.5.60 基本 ...

  9. Python开发【项目】:学员管理系统(mysql)

    需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图: 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节上课纪录对应多条学员 ...

  10. mysql varchar存储最大

    utf-8的汉字 3个字节,varchar()括号中的数字是可存储的最大字符数,但是总和不超过65535个字节,这是行的size限制的,除以3差不多21800多,算上其他列等信息,如果用最大的话设置2 ...