精华内容
下载资源
问答
  • Java 如何抛出异常、自定义异常、手动或主动抛出异常

    Java 如何抛出异常、自定义异常、手动或主动抛出异常

    参考文章:

    (1)Java 如何抛出异常、自定义异常、手动或主动抛出异常

    (2)https://www.cnblogs.com/panchanggui/p/10374262.html


    备忘一下。


    展开全文
  • Java提供了许多异常自动处理机制,这里主要聊一下异常主动抛出 异常处理机制 异常处理五个关键字 try、catch、finally、throw、throws try—catch—finally int a = 1; int b = 0; try{ System.out.println(a/b); ...

    异常

    Java提供了许多异常自动处理机制,这里主要聊一下异常的主动抛出

    异常处理机制

    异常处理五个关键字 try、catch、finally、throw、throws

    try—catch—finally

    int a = 1;
    int b = 0;
    try{
    System.out.println(a/b);
    }catch(异常的类 对象){
        //要进行的操作
    }finally{
        //无论是否出现异常,finally都会执行
    }
    

    解释

    当try中的保护代码块出现异常时,异常会作为参数与catch中声明的异常类型进行匹配,匹配成功则运行对应catch的代码块

    • 不管是否出现异常,会继续执行后续代码

    注意

    • 可以有多个catch,异常类型由上往下判断,且众多catch代码块只执行一个
    • catch捕获的异常类型,范围小的放上面
    • finally可以不要

    throw主动抛出异常

    • 对于明显的不合法操作,可以通过throw主动抛出异常

    • 一般在方法中使用

    public void test(int a,int b) throws ArithmeticException{
    if(b == 0){
        //若b==0,主动抛出异常
       throw new ArithmeticException();
    }else{
       System.out.println(a/b);
         }
    }
    

    throws抛出异常

    假如方法中解决不了这个异常,在方法上抛出异常

    public void test(int a,int b) throws 异常类型{
       //要写出什么时候会抛出异常
    }
    

    注意

    如果在一个方法后面用 throws 声明了可能抛出的异常类型,在调用该方法时必须必须用 try 包含方法,且在 catch 一一声明对应的异常

    public class main {
        //方法test声明可能抛出的两种异常
        public void test(int a) throws Exception1,Exception2 {
            //若a>50时抛出一个异常
            if(a>50)
            throw  new Exception1(a);
            if...}
    
    
            try {
                //使用该方法时要用try
                new main().test(60);
                System.out.println("1554");
                //分别捕获对应的异常
            } catch (Exception1 e) {
                e.say();
            }catch (Exception2 d){
    
            }
    
    

    以上方式让调用代码的人通过try—catch的方式对异常进行捕获

    另一种方式

    也可以在方法内部捕获异常

    //定义一个除法运算的方法
    public double divide(double a,double b) {
        	//若除数为令,抛出异常
            if(b==0){
                try{
                    throw new Exception1(b);
             //在方法里面捕获异常
                }catch (Exception1 e){
                    e.toString();
                }
            }
            return a/b;
    }
    

    在此时在调用方法时则不需要调用者捕获异常

    public static void main(String[] args) {
            main m = new main();
        	//此时不需要用try—catch捕获异常
            System.out.println(m.divide(1,0));
        }
    }
    
    展开全文
  • JAVA抛出异常的三种形式

    万次阅读 多人点赞 2018-10-03 11:33:55
    一、系统自动抛出异常 当程序语句出现一些逻辑错误、主义错误或者类型转换错误时,系统会自动抛出异常 例一 public static void main(String[] args) { int a = 5; int b = 0; System.out.println( a / b);...

    一、系统自动抛出异常

    当程序语句出现一些逻辑错误、主义错误或者类型转换错误时,系统会自动抛出异常
    例一

    public static void main(String[] args) {
    	int a = 5;
    	int b = 0;
    	System.out.println( a / b);
    }
    

    运行结果,系统会自动抛出ArithmeticException异常

    Exception in thread "main" java.lang.ArithmeticException: / by zero
    	at io.renren.modules.sys.controller.SysUserController.main(SysUserController.java:154)
    

    例二

    public static void main(String[] args) {
    	String str = "abc";
    	System.out.println(Integer.parseInt(str));
    }
    

    运行结果,系统会抛出NumberFormatException异常

    Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"
    	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    	at java.lang.Integer.parseInt(Integer.java:580)
    	at java.lang.Integer.parseInt(Integer.java:615)
    	at io.renren.modules.sys.controller.SysUserController.main(SysUserController.java:153)
    

    二、throw

    throw是语句抛出一个异常,一般是在代码的内部,当程序出现某种逻辑错误时同程序主动抛出某种特定类型的异常

    public static void main(String[] args) {
    	String str = "NBA";
    	if (str.equals("NBA")) {
    		throw new NumberFormatException();
    	} else {
    		System.out.println(str);
    	}
    }
    

    运行结果,系统会抛出NumberFormatException异常

    Exception in thread "main" java.lang.NumberFormatException
    	at io.renren.modules.sys.controller.SysUserController.main(SysUserController.java:154)
    

    三、throws

    throws是方法可能会抛出一个异常(用在声明方法时,表示该方法可能要抛出异常)
    public void function() throws Exception{......}
    当某个方法可能会抛出某种异常时用于throws 声明可能抛出的异常,然后交给上层调用它的方法程序处理

    public static void testThrows() throws NumberFormatException {
    	String str = "NBA";
    	System.out.println(Integer.parseInt(str));
    }
    
    public static void main(String[] args) {
    	try {
    		testThrows();
    	} catch (NumberFormatException e) {
    		e.printStackTrace();
    		System.out.println("非数直类型不能强制类型转换");
    	}
    }
    
    

    运行结果

    java.lang.NumberFormatException: For input string: "NBA"
    	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    	at java.lang.Integer.parseInt(Integer.java:580)
    	at java.lang.Integer.parseInt(Integer.java:615)
    	at io.renren.modules.sys.controller.SysUserController.testThrows(SysUserController.java:153)
    	at io.renren.modules.sys.controller.SysUserController.main(SysUserController.java:158)
    非数直类型不能强制类型转换
    

    throw与throws的比较

    1、throws出现在方法函数头,而throw出现在函数体。
    2、throws表示出现异常的一种可能性,并不一定会发生这些异常,throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
    3、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

    编程习惯

    1、在写程序时,对可能会出现异常的部分通常要用try{…}catch{…}去捕捉它并对它进行处理;
    2、用try{…}catch{…}捕捉了异常之后一定要对在catch{…}中对其进行处理,那怕是最简单的一句输出语句,或栈输入e.printStackTrace();
    3、如果是捕捉IO输入输出流中的异常,一定要在try{…}catch{…}后加finally{…}把输入输出流关闭;
    4、如果在函数体内用throw抛出了某种异常,最好要在函数名中加throws抛异常声明,然后交给调用它的上层函数进行处理。

    最后推荐一款分分钟在线搭建SpringBoot + Mybatis框架

    地址:https://blog.csdn.net/qq_22067469/article/details/90523169

    展开全文
  • java如何抛出异常

    千次阅读 2019-02-27 21:12:22
    1.什么时候抛出异常? 如果你觉得某些”问题”解决不了了,那么你就可以抛出异常了。比如,你在写一个service,其中在写到某段代码处,你发现可能会产生问题,那么就请抛出异常吧,相信我,你此时抛出异常将是一个最佳...

    1.什么时候抛出异常?

    如果你觉得某些”问题”解决不了了,那么你就可以抛出异常了。比如,你在写一个service,其中在写到某段代码处,你发现可能会产生问题,那么就请抛出异常吧,相信我,你此时抛出异常将是一个最佳时机

    2.抛出怎么样的异常?

      异常的抛出不仅仅是throw掉或者catch掉,而也应该进行异常的业务逻辑的处理所以本身也可以看做if--else的这样的一种分支进行处理掉

    传统的项目都是以MVC框架为基础进行开发的,本文主要从使用restful风格接口的设计来体验一下异常处理的优雅。

    我们把关注点放在restful的api层(和web中的controller层类似)和service层,研究一下在service中如何抛出异常,然后api层如何进行捕获并且转化异常。

    使用的技术是:spring-boot,jpa(hibernate),mysql,

    1.对于入参参数的判断:

       有两个重要的工具类

    1. Guava中的Preconditions类实现了很多入参方法的判断
    2. jsr 303的validation规范(目前实现比较全的是hibernate实现的hibernate-validator)
    3. 如果使用了这两种推荐技术,那么入参的判断会变得简单很多。推荐大家多使用这些成熟的技术和jar工具包,他可以减少很多不必要的工作量。我们只需要把重心放到业务逻辑上。而不会因为这些入参的判断耽误更多的时间

    2.我们经常说的模型其实就是指的是实体模型,由实体模型之间的关系构成了整个逻辑之间的关系,而这个实体模型之间的关系其实也是数据库数据之间的关系.所以这个就是模型的概念

    根据项目场景来看,需要两个domain模型,一个是用户实体,一个是地址实体

    对于约束条件的总结如下:

    1. 基本判断约束(null值等基本判断)
    2. 实体属性约束(满足jsr 303等基础判断)
    3. 业务条件约束(需求提出的不同的业务约束)
    4. 对于service中的抛出异常,笔者认为大致有两种抛出的方法:

    5. 抛出带状态码RumtimeException异常
    6. 抛出指定类型的RuntimeException异

    api异常设计

    大致有两种抛出的方法:

    1. 抛出带状态码RumtimeException异常
    2. 抛出指定类型的RuntimeException异常
    3. 这个是在设计service层异常时提到的,通过对service层的介绍,我们在service层抛出异常时选择了第二种抛出的方式,不同的是,在api层抛出异常我们需要使用这两种方式进行抛出:要指定api异常的类型,并且要指定相关的状态码,然后才将异常抛出,这种异常设计的核心是让调用api的使用者更能清楚的了解发生异常的详细信息,除了抛出异常外,我们还需要将状态码对应的异常详细信息以及异常有可能发生的问题制作成一个对应的表展示给用户,方便用户的查询。(如github提供的api文档,微信提供的api文档等),还有一个好处:如果用户需要自定义提示消息,可以根据返回的状态码进行提示的修改。
    4. 设计api层异常时,正如我们上边所说的,需要提供错误码和错误信息,那么可以这样设计,提供一个通用的api超类异常,其他不同的api异常都继承自这个超类:

     

    展开全文
  • java人为抛出异常,目的是为了@Transactional的回滚: TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return new BscResponse(BscResponse.Status.FAIL,“当前学生已报名为[”+course....
  • 问:自定义运行时异常,怎么样才能像API中那些运行时异常那样...Java中的任何异常都是throw主动抛出的。 实现运行时异常抛出步骤 1、自己定义一个异常类 2、当你想要在控制台显示对应异常信息时,就throw new 异常.
  • https://www.cnblogs.com/wangyingli/p/5912269.html 上面这个文档将各种情况分析的比较全面了,不赘言了  
  • 1.try内声明的变量,类似于局部变量,出了try{}语句,就不能被调用 ...4.可以有多个catch语句,try中抛出异常类对象从上往下去匹配catch中的异常类的类型,  一旦满足就执行catch中的代码。执行完,就跳出其后的
  • SUN提供的JDK内置的异常是肯定不够用的。在实际开发中,又很多业务,这些业务出现异常之后,JDK中都是没有的,和业务挂钩的。那么异常类我们程序员可以定义吗? 异常是可以自定义的 1、自定义异常的方法 需要两步:...
  • java抛出异常机制是在写程序的时候都必须有的吗?可以不写吗?在什么样的情况下才能不写的,异常机制的意义是啥?![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/17.gif)
  • 今天遇到一个问题,在下面的代码中,当抛出运行时异常后,后面的代码还会执行吗,是否需要在异常后面加上return语句呢? public void add(int index, E element){ if(size >= elements.length) { throw new ...
  • java抛出异常 (try/catch/finally)

    千次阅读 2019-03-19 14:34:08
    把有风险的程序代码包含在try/catch块中,编译器会放心很多。...如果要处理异常情况,就把异常处理程序放在catch块中。 import javax.sound.midi.*; public class MusicTest1 { public void play(){ try{ ...
  • 一、系统自动抛出异常 当程序语句出现一些逻辑错误、主义错误或者类型转换错误时,系统会自动抛出异常 例一 public static void main(String[] args) { int a = 5; int b = 0; System.out.println( a / b); } ...
  • Java异常处理-3-throws方式抛出异常

    千次阅读 2018-06-21 23:43:41
    在异常处理之中,出了我们自己主动捕获处理异常,还有一种处理方式,那就是抛出异常。抛出就是抛出给JVM,然后打印错误信息到控制台,中断程序的运行。1.先来看看之前我们做过的不抛出异常 这里利用Person这个类,...
  • 手动抛出异常:throw new NameClass();RuntimeException 继承RuntimeException(运行时异常-系统自动处理)可以手动抛出异常 package Test; /** * 手动抛出自定义异常:throw * * 继承RuntimeException(运行...
  • 手动或主动抛出异常

    千次阅读 2017-09-08 14:05:40
    public static void main(String[] args) { ... throw new Exception("抛出异常"); } catch (Exception e) { e.printStackTrace(); System.out.println("捕获异常"); } } 控制台打印的信息 ja
  • 在service层的某个方法中,在执行完一个对数据库的写方法后,抛出异常,再执行另一个对数据库的写方法,伪代码如下: @Transactional public void func() { dao.write(pojo1); throw new Exception(&...
  • 如果不抛出异常则是在catch块里,抛出则由调用方法的类处理。 为了避免调用的人不知道有异常,才抛出异常的,所以是谁掉用的久在哪里处理。说的对吗对.1、throws关键字通常被应用在声明方法时,用来指定可能抛出的...
  • flask中主动抛出异常,统一异常处理

    万次阅读 2017-11-20 16:56:22
    在开发时,后台出现异常 ,但不想把异常显示给用户或者要统一处理异常时,可以使用abort主动抛出异常,再捕获异常返回美化后的页面。 from flask import Blueprint, render_template, redirect,session,request,...
  • 就是被拦截的方法抛出异常,但不能捕获处理,这样 【AOP代理】能捕获异常,才能进行回滚。 所以,若要发生异常时,可以进行正确的回滚: 1)service 层处理,不要进行异常捕获,或者捕获了直接抛出 ...
  • 0.异常处理 来看看下面一段代码 def main(args: Array[String]): Unit = { val i = 10 / 0 println("你好!") } Exception in thread "main" java.lang.ArithmeticException: / by zero at ForDemo$.main...
  • 目录一、throws与声明方法抛出异常 一、throws与声明方法抛出异常 在一个方法中如果能够处理异常,则需要捕获并处理。但是本方法没有能力处理该异常,捕获它没有任何意义,则需要在方法后面声明抛出该异常,通知上层...
  • JAVA自学笔记,在方法中抛出异常

    千次阅读 2019-08-07 00:45:08
    如果某个方法可能会发生异常,但不想在当前方法中处理这个异常,则可以使用throws,throw关键字在方法中抛出异常。 使用throws关键字抛出异常 throws关键字通常被应用在声明方法时,用来指定方法可能抛出的异常,多...
  • java通过抛异常来返回提示信息

    千次阅读 2015-08-22 21:08:00
    结论:如果把通过抛异常的方式得到提示信息,可以使用java.lang.Throwable中的构造函数: public Throwable(String message) { fillInStackTrace(); detailMessage = message; } 或 public ...
  • 异常可作为正常的错误状态使用,如"在业务层中,判断到用户不存在,可以直接抛出异常信息,在Web层接口中进行捕获,并返回错误码",这是正确的错误信息返回。这样做的益处是函数中不需要一层一层返回对应的错误原因...
  • java web后台主动抛出404错误

    千次阅读 2016-08-05 09:45:28
    我在服务器端有个需求,就是根据拿到的请求地址,判断是否合法,不合法的时候总不能服务器直接抛...当在服务器端需要主动抛出错误时,可在响应里设置错误代码,这样前端就会显示相应的错误。 response.sendError(404);
  • java异常处理对性能的影响

    千次阅读 2017-11-26 12:57:59
    如果抛出一场的代码块和捕获异常的代码块和捕获异常的代码块位于同一个位置,这种影响会小一些;如果Java虚拟机必须搜索方法调用栈来寻找异常处理代码块,对性能的影响就比较大了。尤其当异常处理代码块位于调用栈的...
  • 在日常的开发中,我们往往会使用到手动抛出异常,这里就需要用到thorw关键字 代码示例: /** * @ Author: Zhangyu * @ Date: 2020/7/27 * @ Description: */ public class Test { public static void main...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,887
精华内容 18,754
关键字:

java主动抛出异常

java 订阅