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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MOXA串口服务器6450串口引脚图

    大家好,又见面了,我是你们的朋友全栈君。

    2022年4月8日
    34
  • sp_executesql和execute的区别

    sp_executesql和execute的区别execute对拼成的字符串SQL是有长度限制的,今天在开发中就遇到这种情况,由于长度过长总是被截取。导致报错!后决定改用sp_executesql。但是sp_executesql对参数类型有限制,我声明的类型为varchar(max),报错:Procedureexpectsparameter@statementoftypentext/nchar/nvarchar。这句话

    2022年5月21日
    33
  • Domain 2008R2域管理员没有权限

    Domain 2008R2域管理员没有权限

    2021年8月30日
    71
  • 面试官,不要再问我三次握手和四次挥手「建议收藏」

    面试官,不要再问我三次握手和四次挥手「建议收藏」三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。见过比较典型的面试场景是这样的:面试官:请介绍下三次握手求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就…

    2022年4月29日
    45
  • 硬盘没有初始化怎么恢复数据_初始化磁盘崩溃转储怎么处理

    硬盘没有初始化怎么恢复数据_初始化磁盘崩溃转储怎么处理没有初始化是因为分区表损坏了,导致硬盘出现没有初始化。磁盘显示没有初始化恢复数据办法工具/软件:光明数据恢复软件步骤1:软件运行后,直接双击需要恢复文件的磁盘。步骤2:坐等软件扫描完毕大概需要几分钟到半个小时,稍微耐心等下即可。步骤3:勾上所有需要恢复的数据,然后点右上角的保存,《另存为》按钮,将勾上的文件COPY出来。步骤4:等待软件将资料复制完成就可以了。注意事项1:没有初始化恢复出来的资料需要暂时保存到其它盘里。注意事项2:想要恢复没有初始化需要注意,在文件找到之前,不要

    2022年9月21日
    2
  • 前端参数用MD5加密[通俗易懂]

    前端参数用MD5加密[通俗易懂]今天来讲一下如何用这个MD5来加密第一步:两种导入MD5.js一种你可以到以下这个地址去下载MD5的js路径:https://www.bootcdn.cn/blueimp-md5/另一种下面是md5的js,直接复制下去放到js文件里。亲测可用varhexcase=0;varb64pad=&quot;&quot;;varchrsz=8;functionhex_md…

    2022年7月11日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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