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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《我的极品媳妇》方志强 王亚欣 小说读后感

    《我的极品媳妇》方志强 王亚欣 小说读后感男主角方志强博爱和善良的性格及对待生活的刚毅和坚韧让人敬佩,无论是对待自己的背叛过的兄弟还是互殴的光头都是义字当头,对无耻小人以及伤害身边家人的败类绝不手软,如此种种人格魅力的塑造相当完美;但唯一的缺点是对感情的优柔寡断。在本书中始终在反复得而复失幸福的痛苦中挣扎,但这些也是方志强感情方面性格缺陷导致的。女主王亚欣温柔、贤惠、成熟、多金、坚强、最主要的出身平凡,和男主方志强起步阶段是同一类型的。…

    2022年6月4日
    55
  • mtk keypad

    mtk keypad驱动位置:kernel-3.18/drivers/input/keyboard/mediatek/kpd.c

    2022年6月12日
    46
  • Oracle11g ora 12154 无法解析指定的连接标识符[通俗易懂]

    Oracle11g ora 12154 无法解析指定的连接标识符[通俗易懂]编辑listener.ora加上:SID_LIST_LISTENER=  (SID_DESC=   (GLOBAL_DBNAME=ORCL)   (ORACLE_HOME=D:\Oracle\product\11.2.0\dbhome_1)   (SID_NAME=ORCL)  ) )

    2022年7月24日
    23
  • ES6数组的高阶方法,箭头函数,对象[通俗易懂]

    ES6数组的高阶方法,箭头函数,对象[通俗易懂]一.数组的高阶方法forEach(遍历)vararr=[‘我’,’和’,’我的’,’祖国’];arr.forEach(function(item,index,self){ console.log(item,index,self);})map(映射)vararr=[12,34,56];vararr2=arr.map(function(item,index,self){ console.log(item,index,self); returnitem*2;})

    2022年6月12日
    35
  • git使用具体介绍

    git使用具体介绍

    2021年12月5日
    47
  • pycharm git使用_pycharm上传github

    pycharm git使用_pycharm上传githubpycharm操作git一、git安装和使用​ 安装操作:https://www.cnblogs.com/ximiaomiao/p/7140456.html1.如何使用git将本地代码上传到远程仓库初始化gitinit查看当前仓库状态gitstatus将项目的文件添加到仓库中gitadd<文件名>gitadd.(上传所有文件)将add的文件commit到仓库gitcommit-m”备注”将本地仓库关联到远程仓库gi

    2022年8月25日
    3

发表回复

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

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