开发者社区> 吴英强> 正文

Java异常--其他概念—throw、throws、Exception、RuntimeException、断言

简介: <h1>1、throws关键字</h1> <div> <img src="http://img.blog.csdn.net/20131009151636140" alt=""><br> </div> <div> <span style="white-space:pre"></span>假设定义一个除法的方法div(),对于除法来说:有可能出现异常,有可能不出现异常。所以对于这样的方法来
+关注继续查看

1、throws关键字


假设定义一个除法的方法div(),对于除法来说:有可能出现异常,有可能不出现异常。所以对于这样的方法来说,最好使用throws关键字进行声明。一旦出现了异常,则交给调用处处理。
因为div()方法使用了throws关键字声明。所以调用此方法的时候,必须进行异常处理。
class Math{
	public int div(int i,int j) throws Exception{	// 定义除法操作,如果有异常,则交给被调用处处理
		int temp = i / j ;	// 计算,但是此处有可能出现异常
		return temp ;
	}
};
public class ThrowsDemo01{
	public static void main(String args[]){
		Math m = new Math() ;		// 实例化Math类对象
		try{
			System.out.println("除法操作:" + m.div(10,2)) ;
		}catch(Exception e){
			e.printStackTrace() ;	// 打印异常
		}
	}
};
如果在主方法的声明中使用了throws关键字,则主方法也可以不处理异常了。则将一切异常交给JVM进行处理。
class Math{
	public int div(int i,int j) throws Exception{	// 定义除法操作,如果有异常,则交给被调用处处理
		int temp = i / j ;	// 计算,但是此处有可能出现异常
		return temp ;
	}
};
public class ThrowsDemo02{
	// 在主方法中的所有异常都可以不使用try...catch进行处理
	public static void main(String args[]) throws Exception{
		Math m = new Math() ;		// 实例化Math类对象
		System.out.println("除法操作:" + m.div(10,0)) ;
	}
};

2、throw关键字


在异常处理中,try语句中药捕获的是一个异常的对象,那么此异常对象也可以自己抛出。
public class ThrowDemo01{
	public static void main(String args[]){
		try{
			throw new Exception("自己抛着玩的。") ;	// 抛出异常的实例化对象
		}catch(Exception e){
			System.out.println(e) ;
		}
	}
};

3、throw与throws应用范例

例如:要设计一个相除的方法,但是在进行操作之前必须打印“计算开始”的信息、结束之后打印“计算结束”的信息。如果有异常的话,则应该吧异常交给被调用处处理。
class Math{
	public int div(int i,int j) throws Exception{	// 定义除法操作,如果有异常,则交给被调用处处理
		System.out.println("***** 计算开始 *****") ;
		int temp = 0 ;	// 定义局部变量
		try{
			temp = i / j ;	// 计算,但是此处有可能出现异常
		}catch(Exception e){
			throw e ;
		}finally{	// 不管是否有异常,都要执行统一出口
			System.out.println("***** 计算结束 *****") ;
		}
		return temp ;
	}
};
public class ThrowDemo02{
	public static void main(String args[]){
		Math m = new Math() ;
		try{
			System.out.println("除法操作:" + m.div(10,0)) ;
		}catch(Exception e){
			System.out.println("异常产生:" + e) ;
		}
	}
};

4、Exception与RuntimeException的区别

public class RuntimeExceptionDemo01{
	public static void main(String args[]){
		String str = "123" ;	// 定义字符串,全部由数字组成
		int temp = Integer.parseInt(str) ; // 将字符串变为int类型
		System.out.println(temp * temp) ;	// 计算乘方
	}
};
parseInt()方法的定义格式为:
public static int parseInt(String s) throws NumberFormatException
在此方法中明明已经使用了throws关键字抛出异常,为什么不用处理,编译也能通过呢??

5、自定义异常类

只需要继承Exception就可以完成自定义异常类。
class MyException extends Exception{	// 自定义异常类,继承Exception类
	public MyException(String msg){
		super(msg) ;	// 调用Exception类中有一个参数的构造方法,传递错误信息
	}
};
public class DefaultException{	
	public static void main(String args[]){
		try{
			throw new MyException("自定义异常。") ;	 // 抛出异常
		}catch(Exception e){
			System.out.println(e) ;
		}
	}
}

6、断言(assert)




7、总结






版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java.lang.StackOverflowError异常解决
在hibernate一对多映射中,两个实体都重写了toString()方法,,应用程序递归太深了,所以发生了堆栈溢出。
1325 0
转Unity 异常操作
  摘要 使用 unity 处理异常的方法可能会与你的直觉不符。本文将给出正确的处理方法,并简单剖析Unity这部分源代码。 处理异常 打算用Unity的AOP截获未处理的异常,然后写个日志什么的,于是我写下了这样的代码(注意 这段代码是错误的): public class My...
667 0
Java异常--基本概念try...catch...finally
<h1><strong>1、异常:</strong></h1> <p><img src="http://img.blog.csdn.net/20131009101613156" alt=""><br></p> <h1>2、异常处理格式:</h1> <div> <img src="http://img.blog.csdn.net/20131009101751953" alt=""><b
1023 0
异常之: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.
在 MySQL 中执行命令试下:  set global time_zone=’+8:00’   设置为东8区 就不报错了。 show variables like '%time_zone%';   解释:在访问数据库时出现时区无法识别问题,在通过在数据库连接URL后,加上?serverTimezone=UTC , 时区是确认了但是这默认是0市区,导致在存入数据库时,JDBC会将当前系统市区东8区,减去8个小时,最终导致时间不匹配。
1730 0
异常信息: ResultSet can not re-read row data for column 2
解决方法:下面的解决方案是网上高人说的:                    (1)如果采用jdbc-odbc驱动,那么就必须按照查询顺序来一次读取(不论有没有image或text类型)           (2)如果采用微软提供的ms sql server jdbc driver,...
598 0
Eclipse中项目报Target runtime com.genuitec.runtime.generic.jee60 is not defined异常的解决方法
Eclipse中项目报Target runtime com.genuitec.runtime.generic.jee60 is not defined异常的解决
116 0
关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
原文:关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException 关于Microsoft.CSharp.RuntimeBinder.RuntimeBinderException的异常一般来自于两种, 第一种: Predefined type 'Microsoft.CSharp.RuntimeBinder.Binder' is not defined or imported 解决它的办法是,直接在项目引用中添加 Micorsoft.Csharp 就可以了。
1555 0
+关注
329
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载