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

    万次阅读 多人点赞 2017-06-13 23:18:02
    一、异常的抛出 1、定义 : 一个...(位置: 方法体内)3、throws : 如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常。用它修饰的方法向调用者表明该方法可能会抛出异

    一、异常的抛出

    1、定义 : 一个方法不处理这个异常,而是调用层次向上传递,谁调用这个方法,这个异常就由谁来处理。

    2、throw : 将产生的异常抛出(强调的是动作),抛出的既可以是异常的引用,也可以是异常对象。(位置: 方法体内

    3、throws : 如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常。用它修饰的方法向调用者表明该方法可能会抛出异常(可以是一种类型,也可以是多种类型,用逗号隔开)(位置: 写在方法名 或方法名列表之后 ,在方法体之前。)

    注意 : 调用可能会抛出异常的方法,必须添加try-catch代码块尝试去捕获异常 或者 添加throws 声明 来将异常 抛出给更上一层的调用者进行处理,这里需要注意一个细节:新的异常包含原始异常的所有信息,根据这个我们可以去追溯最初异常发生的位置

    如下图所示
    这里写图片描述

    4、简单使用

    // 定义一个方法,抛出 数组越界和算术异常(多个异常 用 "," 隔开)
    	public void Test1(int x) throws ArrayIndexOutOfBoundsException,ArithmeticException{
    	
    	System.out.println(x);
    	
    	if(x == 0){
    		
    		System.out.println("没有异常");
    		return;
    	}
    	
    	//数据越界异常
    	else if (x == 1){
    		
    		int[] a = new int[3];
    		 a[3] = 5;
    	}
    	
    	//算术异常
    	else if (x == 2){
    		
    	    int i = 0;
    		int j = 5/0;
    	}
    		
    	}
    

    在main方法中调用

    public static void main(String[] args) {
    		
    		//创建对象
    		ExceptionInital object = new ExceptionInital();
    		
    		// 调用会抛出异常的方法,用try-catch块
    	    try{
    	    	
    	    	object.Test1(0);
    	    	
    	    }catch(Exception e){
    	    	
    	    	System.out.println(e);
    	    }
    
    	    // 数组越界异常
    	    try{
    	    	
    	    	object.Test1(1);
    	    }catch (ArrayIndexOutOfBoundsException e) {
    			
    	    	System.out.println("数组越界异常:"+e);
    		}
    	    
    	    
    	    // 算术异常
    	    try{
    	    	
    	    	object.Test1(2);
    	    	
    	    }catch(ArithmeticException e){
    	    	
    	    	System.out.println("算术异常:"+e);
    	    }
    	    
    	    
    	    //使用 throw 抛出异常(可以抛出异常对象,也可以抛出异常对象的引用)
    	    try{
    	    	
    	        ArrayIndexOutOfBoundsException  exception = new ArrayIndexOutOfBoundsException();
    	    	
    	    	throw exception;//new ArrayIndexOutOfBoundsException();
    	    	
    	    }catch(ArrayIndexOutOfBoundsException e){
    	    	
    	    	System.out.println("thorw抛出异常:"+e);
    	    }
    	    
    	}
    

    运行结果
    这里写图片描述

    总结下 throw 和throws 关键字的区别

    1、写法上 : throw 在方法体内使用,throws 函数名后或者参数列表后方法体前
    2、意义 : throw 强调动作,而throws 表示一种倾向、可能但不一定实际发生
    3、throws 后面跟的是异常类,可以一个,可以多个,多个用逗号隔开。throw 后跟的是异常对象,或者异常对象的引用。
    4、throws 用户抛出异常,当在当前方法中抛出异常后,当前方法执行结束(throws 后,如果有finally语句的话,会执行到finally语句后再结束。)。可以理解成return一样。

    二、自定义异常

    前面所讲的异常,都是系统自带的,系统自己处理,但是很多时候项目会出现特有问题,而这些问题并未被java所描述并封装成对象,所以对于这些特有的问题可以按照java的对问题封装的思想,将特有的问题进行自定义异常封装。在Java中要想创建自定义异常,需要继承Throwable或者他的子类Exception。

    语法

    class  自定义异常类 extends 异常类型(Exception){
    
     // 因为父类已经把异常信息的操作都完成了,所在子类只要在构造时,将异常信息传递给父类通过super 语句即可。
      // 重写 有参 和 无参  构造方法
    }
    

    例如:

    public class CustomException extends Exception {
    
    	//无参构造方法
    	public CustomException(){
    		
    		super();
    	}
    	
    	//有参的构造方法
    	public CustomException(String message){
    		super(message);
    		
    	}
    	
    	// 用指定的详细信息和原因构造一个新的异常
    	public CustomException(String message, Throwable cause){
    		
    		super(message,cause);
    	}
    	
    	//用指定原因构造一个新的异常
    	 public CustomException(Throwable cause) {
    		 
    		 super(cause);
    	 }
    	
    }
    
    // 备注: 这些方法怎么来的? 重写父类Exception的方法,那么如何查看Exception具有哪些API,快捷键:选中Exception, command+单击。windows系统 :选中Exception, control+单击。
    

    自定义异常的使用例子:
    自定义test1()方法,抛出 "我喝酒了"的异常信息,test2()方法调用test1()方法,并将异常包装成RuntimeException类型的异常,继续抛出,在main方法中调用test2()方法,并尝试捕获异常

    public void test2() {
    		
    		try{
    			
    			test1();
    			
    		}catch (CustomException e){
    			
    		   RuntimeException exception  =  new RuntimeException(e);
    		   //exception.initCause(cause)
    		   throw  exception;
    		}
    	
    	}
    	
    	public void test1() throws CustomException{
    		
    		throw new CustomException("我喝酒了");
    	}
    // main方法
    	public static void main(String[] args) {
    		
    		CustomExceptionInital object =  new  CustomExceptionInital();
    		
    		//try{
    			
    			object.test2();
    			
    		//}catch(Exception e){
    			
    		//e.printStackTrace();
    			
    		//}
    
    	}
    

    输出结果:
    这里写图片描述

    思考 ? 为什么上述demo, test1() 方法 抛出异常了,但是test1() 方法自己没办法处理,所以在 参数列表后方法体前将该异常抛出了,test2() 方法调用了test1()方法捕获其异常,并将其异常 包装成 RuntimeException 异常继续抛出,但是test2()方法却没有声明 抛出异常 ? 而且,在main 方法中,调用test2()方法的时候,也不用try-catch 代码块去捕获 异常呢 ?点击我告诉你为什么

    本篇文章demo传送门

    在这里插入图片描述

    展开全文
  • JAVA 内层方法抛出异常 外层方法捕捉并处理异常

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                    这是一篇有关 JAVA :内层方法抛出异常,外层方法捕捉并处理异常的文章信息。
    我发布到 报名在线 EDU84.COM上,和大家分享一下 JAVA :内层方法抛出异常,外层方法捕捉并处理异常
    public void methodA (){ 
    try{ 
    // 调用methodB 
    methodB(); 

    catch(ExceptionType et){ 
    // 相应处理措施 


    public void methodB throws ExceptionType{ 
    if (condition is true) 

    // 相应处理措施 

    else 

    throw new ExceptionType(argument); 


    在这个例子中,方法B的头部中声明了该方法会抛出一个类型为ExceptionType的异常,在方法体中使用throw子句抛出了一个异常,那么该异常被谁捕捉到呢,答案是方法A。因为异常抛出后,JVM会顺着该方法的调用栈一层一层的往上找。因为方法A中有一个catch(ExceptionType et),所以被抛出的异常会被捕捉到并处理。           

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block var foo = 'bar'; 

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目Value
    电脑$1600
    手机$12
    导管$1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列第二列第三列
    第一列文本居中第二列文本居右第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPEASCIIHTML
    Single backticks'Isn't this fun?'‘Isn’t this fun?’
    Quotes"Isn't this fun?"“Isn’t this fun?”
    Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to- HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

    Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    gantt
            dateFormat  YYYY-MM-DD
            title Adding GANTT diagram functionality to mermaid
            section 现有任务
            已完成               :done,    des1, 2014-01-06,2014-01-08
            进行中               :active,  des2, 2014-01-09, 3d
            计划一               :         des3, after des2, 5d
            计划二               :         des4, after des3, 5d
    
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • java中只有方法抛出异常,类是不会抛出异常的是不是 抛出的异常最终也是要处理的是吧, 具体是如何处理的呢
  • 这是一篇有关JAVA:内层方法抛出异常,外层方法捕捉并处理异常的文章信息。 我发布到报名在线EDU84.COM上,和大家分享一下JAVA:内层方法抛出异常,外层方法捕捉并处理异常 public void methodA (){  try{  // ...

    这是一篇有关JAVA:内层方法抛出异常,外层方法捕捉并处理异常的文章信息。
    我发布到报名在线EDU84.COM上,和大家分享一下JAVA:内层方法抛出异常,外层方法捕捉并处理异常
    public void methodA (){ 
    try{ 
    // 调用methodB 
    methodB(); 

    catch(ExceptionType et){ 
    // 相应处理措施 


    public void methodB throws ExceptionType{ 
    if (condition is true) 

    // 相应处理措施 

    else 

    throw new ExceptionType(argument); 


    在这个例子中,方法B的头部中声明了该方法会抛出一个类型为ExceptionType的异常,在方法体中使用throw子句抛出了一个异常,那么该异常被谁捕捉到呢,答案是方法A。因为异常抛出后,JVM会顺着该方法的调用栈一层一层的往上找。因为方法A中有一个catch(ExceptionType et),所以被抛出的异常会被捕捉到并处理。

    展开全文
  • java 异常处理之声明抛出异常

    千次阅读 2018-11-01 00:44:38
    java 异常处理声明抛出异常2.声明抛出异常Java中处理异常的第二种方式 2.声明抛出异常Java中处理异常的第二种方式 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此...

    2.声明抛出异常是Java中处理异常的第二种方式

    1. 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
    2. 在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。
      声明抛出异常举例:
    public class TestException2 {
    	//常规处理方式
    	public static void main(String[] args) {
    		TestException2 t = new TestException2();
    		try {
    			t.method2();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	//抛,常规不使用该方式处理异常
    	public static void main(String[] args) throws IOException{//main方法在往上就是JVM了
    		TestException2 t = new TestException2();
    		t.method2();
    	}
    	public void method2() throws IOException{//往上抛,抛给他的调用者
    		method1();
    	}
    	public void method1() throws FileNotFoundException,IOException{//往上抛,抛给他的调用者
    		FileImageInputStream fis = new FileImageInputStream(new File("testEception.txt"));
    		int b;
    		while((b = fis.read()) != -1) {
    			System.out.println((char)b);
    		}
    		fis.close();
    	}
    }
    
    

    总结:

    • 格式,如:public void method1() throws FileNotFoundException,IOException{}
    • 当此方法在内部出现异常的时候,会抛出一个异常类对象,抛给方法的调用者。
    • 异常的对象可以逐层向上抛,直至main中,在向上抛的过程中,可以通过try-catch-finally捕获处理。
    • 使用的时候一般不会这个逐层往上抛,一般会在某个特定地方进行处理(try-catch),因为如果谁都不处理这个问题的话,程序就停止运行了。
    • 核心思想:(try-catch)在项目中使用最多,其在出现异常的时候,就是告诉程序怎么处理,如果一直抛出,那最后要处理的人,很可能就是不知道,当初出现问题是什么?
    • 项目中,一般不是编译不过的,不会用异常处理,具体是原因,可以思考一下,回复哩。。
    展开全文
  • Java 异常:抛出异常

    千次阅读 2018-09-15 18:06:18
    1.throw用于抛出具体异常类的对象,一般用于方法体中。   2.什么时候使用:当所写的代码因不满足某些条件致使程序无法运行时可以借助throw抛出一个异常对象提醒程序员。         3.当b为0时不满足下面...
  • Java 使用 throw 抛出异常

    万次阅读 多人点赞 2019-06-11 21:13:47
    此外,Java 也允许程序自行抛出异常,自行抛出异常使用 throw 语句来完成。 本文包含: 抛出异常 自定义异常类 catch 和 throw 同时使用 Java 7 增强的throw 语句 异常链 1. 抛出异常 如果需要在程序中自行抛出...
  • Java异常之抛出异常详解和代码举例

    千次阅读 2020-06-06 14:20:45
    异常类型不同,抛出异常方法也不同,分为:系统自动抛出的异常、指定方法抛 出的异常。 3.系统定义的异常由系统抛出;指定方法抛出的异常需使用关键字throw或throws; 我们主要讨论由方法抛出的异常用法。 1....
  • Java的声明抛出异常

    千次阅读 2018-07-29 17:26:11
    如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。 在方法声明中用throws语句可以...
  • 【0】README0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常——捕获异常+再次抛出异常与异常链 的相关知识;【1】捕获异常相关1.1)如果某个异常发生的时候没有再任何地方进行捕获, 那程序...
  • java如何抛出异常

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

    千次阅读 2016-08-13 22:20:25
    抛出处理定义一个功能,进行除法运算例如...抛出后需要在函数上进行声明,告知调用函数者,我有异常,你需要处理如果函数上不进行throws 声明,编译会报错。例如:未报告的异常 java.lang.Exception;必须对其进行捕捉
  • java中重写了某方法后,该方法可以抛出的异常有: 不抛出任何异常 仅抛出父类方法的的部分异常 抛出父类方法抛出异常的子类型异常 可以抛出与父类方法完全相同的异常 ...
  • java如何抛出异常 抛出异常使用throws/throw关键字。 throws关键字是什么 throws用来声明某一个方法可能抛出的异常,这个异常可以是系统定义的,也可以是自己定义的。 调用throws修饰的方法,必须要对其做异常处理...
  • java 捕获异常还是抛出异常

    千次阅读 2019-01-19 23:14:02
    而hadoop中很多方法的声明是有异常抛出的,而我的系统中的很多方法的声明都没有抛出异常。只是判断了异常情况,并输出了错误提示,但是并没有抛出异常。 org.apache.hadoop.hdfs.protocol包下的Block类的readFi...
  • Java 中的异常处理除了包括捕获异常和处理异常之外,还包括声明异常和拋出异常,可以通过 throws 关键字在方法上声明该方法要拋出的异常,然后在方法内部通过 throw 拋出异常对象。本节详细介绍在 Java 中如何声明...
  • java当中什么方法什么情况下需要抛出异常方法的返回值类型有限定吗,方法体的内容有什么要特别注意的地方吗?
  • java 方法超过执行时间后抛出异常

    千次阅读 2014-12-02 14:53:44
    在线程中执行某方法,如果超出执行时间后立即抛出异常。停止该方法继续执行。 import java.lang.reflect.Method; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import ...
  • JAVA抛出异常的三种形式

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

    万次阅读 2017-12-07 09:47:04
    一般在业务开发时需要向上层抛异常写法如下:public void A() throws Exception{ throw new Exception(); } public void B(){ try{ A(); }catch(Exception e){ //具体处理异常 } }但是如果是通过反射调用的A...
  • JAVA如何抛出异常

    千次阅读 2016-04-12 14:30:43
    JAVA如何抛出异常  分享| 2011-07-07 13:54mengmeng2xiao | 浏览 49337 次  java 2011-07-07 13:59 #2016年高质量新标准全面升级!# 提问者采纳 如果你知道你写的某个函数有...
  • java throw抛出异常

    千次阅读 2014-11-20 14:15:20
    1、throws关键字通常被应用在声明方法时,用来指定可能抛出异常。多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。如下面例子所示: public class Shoot { 创建...
  • java 异常之手动抛出 和 自动抛出

    千次阅读 2018-11-01 23:40:05
    java 异常之手动抛出 和 自动抛出1.java异常处理机制的两类 1.java异常处理机制的两类 抓:异常的处理,有两种方式 ① try-catch-finally ② throws 抛: ① 自动抛出 可以理解为所有没有使用throw关键字的...
  • 【0】README0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常——异常分类+声明已检查异常+如何抛出异常+自定义异常类 的相关知识; 0.2)异常处理的任务: 就是将控制权从错误产生的地方转移...
  • Java学习之自定义异常和抛出异常

    万次阅读 2016-06-01 10:11:43
    1.throws是在定义方法时候抛出异常,throw是在方法体内抛出异常 2.try{}catch(Exception e){}finally{}这是一个比较常见的组合使用try-catch-finally组合注意点: • 当不存在catch语句时,finally 语句...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 605,406
精华内容 242,162
关键字:

方法抛出异常java

java 订阅