day08(异常处理,创建异常,finally,throws和throw的区别)

day08(异常处理,创建异常,finally,throws和throw的区别)

大家好,又见面了,我是全栈君。

异常处理,

    异常的产生

          运行时异常:程序运行中产生的异常;RuntimeException类。

          编译时异常:程序在编译时产生的异常;除了RuntimeException类  其他都是编译时产生的异常。

   处理异常两种方式

    抛出异常:把异常抛给调用者区解决   throws 抛出异常

    捕获异常:编程者自己处理try….catch…finally…

创建异常,

    1.自己创建sun公司的异常类对象

    

public class ClassException {
	public static void main(String[] args) {
		try {//如果出现异常  用来捕获异常
			checkScore(110);
		} catch (Exception e) {
			e.printStackTrace();//输出 异常类型,异常原因,异常位置。 内部具有多线程
		}
	}
	private static void checkScore(int i) throws RuntimeException {
		if (i<0||i>100) {
			throw new RuntimeException("不符合要求");//创建运行时异常对象
		}
		System.out.println("符合要求");
	}
}

 

  

输出结果 :
java.lang.RuntimeException: 不符合要求
	at day08.ClassException.checkScore(ClassException.java:28)
	at day08.ClassException.main(ClassException.java:21)

  

 

    2.自定异常类继承sun公司的异常类(异常名字可以自定义)

  定义一个自定义类 (MyException)

 

public class NotToPrintException  extends Exception{//继承Exception类  调用父类构造输出异常信息
	public NotToPrintException() {
		super();
	}
	public NotToPrintException(String message) {
		super(message);
	}
}

 

  

public class ClassException {
	public static void main(String[] args) {
		try {
			checkScore(110);
		} catch (Exception e) {
			e.printStackTrace();//输出异常类型,异常原因,异常位置 内部具有多线程
 } }
      //使用自定义异常类来抛出异常 private static void checkScore(int i) throws NotToPrintException {//使用自定义类捕获异常 if (i<0||i>100) { throw new NotToPrintException("不符合要求");//抛出NotToPrintException对象 } System.out.println("符合要求"); } }

  

day08.NotToPrintException: 不符合要求 at day08.ClassException.checkScore(ClassException.java:29) at day08.ClassException.main(ClassException.java:21) 

  

 

finally,

    作用: 做为程序的善后的工作  

    执行顺序:try和catch之后  

  

public class FinallyTest {
	public static void main(String[] args) {
		FileWriter fw=null;
		try {
			fw=new FileWriter("a.txt");
			fw.write("hello");
			fw.write("world");
			System.out.println(10/0);//报异常 但是fw还没有关闭 数据没有写进去
			fw.write("java");
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ArithmeticException e) {
			e.printStackTrace();
		}finally{
			try {
				if (fw!=null) {
					fw.close();//如果中途出现错误 但为了让数据已经写的数据存在文本中 则在finally中进行关闭流操作。
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

 

  

a.txt文件中内容


helloworld

  

 

                 特殊案例:catch中存在return 和System.exit(0);

 

  

 

 

public class FinallyTest {
	public static void main(String[] args) {
	System.out.println(method1());
	
	}
	private static int method1(){
		int a=10;
		try{
			System.out.println(10/0);
			a=20;
		}catch(Exception e){
			a=30;
			return a;//在执行finally之前会  return a时 这时a已经被赋值为30  再执行finally中a=40不会影响return a中的a值
      }finally{ a=40; } return a; } }

 

输出结果:
30

/*
* return a在程序执行到这一步的时候,这里不是return a而是return 30;这个返回路径就形成了。
* 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40
* 再次回到以前的返回路径,继续走return 30;
*/

 

    

public class FinallyTest {
	public static void main(String[] args) {
	System.out.println(method1());
	
	}
	private static int method1(){
		int a=10;
		try{
			System.out.println(10/0);
			a=20;
		}catch(Exception e){
			a=30;
			System.out.println(a);
			System.exit(0);//程序退出   不会执行finally
         }finally{ System.out.println(1); a=40; } return a; }

 

  

 

throws和throw的区别

  throws:

      位置:方法声明上

      作用:抛出异常  (处理异常的一种方式)

 

    throw:

      位置:方法中

      作用:创建一个异常对象 (制造异常)

public class ClassException {
	public static void main(String[] args) {
		try {
			checkScore(110);
		} catch (Exception e) {
			e.printStackTrace();
		}
		checkScore(10);
	}
	private static void checkScore(int i) throws RuntimeException {//抛出异常 抛给调用者进行处理
		if (i<0||i>100) {
			throw new RuntimeException("不符合要求");//制造异常
		}
		System.out.println("符合要求");
	}
}

  

     

转载于:https://www.cnblogs.com/fjkgrbk/p/Try_Catch_Finally.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108199.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Recyclerview 刷新「建议收藏」

    Recyclerview 刷新「建议收藏」前言:recyclerview比起listview功能上更加丰富外(如横向列表),在Item复用上也更加灵活,比如listview的某个Item数据需要更新,要通过notifyDataSetChanged方法对全部Item进行刷新,而recyclerview则可以精准刷新。介绍:(1)notifyItemChanged(position)只刷新该position的Item,即只是该Item调用onBindViewHolder,因此如果对数据源进行插、移除操作不能改方法只刷新操作的Item,毕竟该

  • hibernate的hql语句批量删除

    hibernate的hql语句批量删除hibernate使用hql语句,根据条件进行批量删除操作;比如:1.给方法传递一个参数,我传递的是userid2.hql语句编写,根据userid进行删除(我使用了拼接userid的方式进行条件拼接)3.通过createQuery(hql),先到数据库查询满足条件的数据。然后通过executeUpdata()方法进行了批量更新删除操作;具体的代码如下:publicvoidemptycartItm(Integeruserid){//根据条件批量删除Stringhql=“delete

  • 几种页面跳转方法_HTML页面跳转的方法

    几种页面跳转方法_HTML页面跳转的方法页面跳转方式1——herf在一些html的文档中,用herf实现页面跳转的比较常见,也很好用。页面跳转方式2——利用表单action页面跳转方式3——response.sendRedirect(

  • er图是什么样的_er图形状代表什么意思

    er图是什么样的_er图形状代表什么意思数据模型(DataModel)是数据特征的抽象。数据模型所描述的内容包括三个部分(三个要素):数据结构、数据操作、数据约束。数据模型分为两类:第一类和第二类。第一类就是概念模型,ER图就是概念模型的一种表示方法。ER图:实体-关系图。是用来描述现实世界的一种概念模型。包括三个要素:实体(矩形)、属性(椭圆)、关系(菱形)。关系要标明类型:1对多、1对1、多对多等关系。第二类包括逻辑…

  • spring整合log4j_spring整合log4j

    spring整合log4j_spring整合log4j常用日志框架log4j、log4j2(log4j的升级版,最常用的)、logback(spring boot默认)、Jboss-logging…等slf4 是日志接口规范,代码对接slf4,实现和具体日志框架解耦,无需修改编码即可切换日志框架。修改pom依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-st

  • POJ–2289–Jamie&#39;s Contact Groups【二分图的多个匹配+二分法答案】

    POJ–2289–Jamie&#39;s Contact Groups【二分图的多个匹配+二分法答案】

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号