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电力电缆复训题库及在线模拟考试

    2022电力电缆复训题库及在线模拟考试题库来源:安全生产模拟考试一点通公众号小程序2022年电力电缆操作证考试题为电力电缆复习题考前押题!2022电力电缆复训题库及在线模拟考试根据电力电缆考试教材。电力电缆考试题库通过安全生产模拟考试一点通准确把握考试要点。1、【单选题】6~35kV三芯交联聚乙烯电缆共用()。(A)A、内护套B、中性导体C、地线2、【单选题】中性点经电阻接地的优点是,()。(A)A、减小了单相接地电流B、不需要增加设备C、加大了电磁干扰3、【单选题】传统的配电网,特别是农村电网多为()。(

    2022年5月7日
    59
  • Unity中的Shuriken粒子系统(5)

    Unity中的Shuriken粒子系统(5)设置速度在生命周期内改变(曲线的设置)1.VelocityoverLifetime通过ParticleSystem中的StartSpeed,只能设置粒子发射的起始速度,不能改变粒子发射过程中的速度;而VelocityoverLifetime能够改变粒子在运动过程中的速度。当把StartSpeed设为0(粒子初始速度为0),VelocityoverLifetime只设置X的值…

    2025年7月4日
    2
  • hdu 2648 Shopping

    hdu 2648 Shopping

    2021年8月26日
    55
  • java 写入properties文件_Java读写Properties配置文件

    java 写入properties文件_Java读写Properties配置文件Java 读写 Properties 配置文件 1 Properties 类与 Properties 配置文件 Properties 类继承自 Hashtable 类并且实现了 Map 接口 也是使用一种键值对的形式来保存属性集 不过 Properties 有特殊的地方 就是它的键和值都是字符串类型 2 Properties 中的主要方法 1 load InputStreami 这个方法可以从 properti

    2025年9月30日
    2
  • 前向传播算法(Forward propagation)与反向传播算法(Back propagation)「建议收藏」

    前向传播算法(Forward propagation)与反向传播算法(Back propagation)「建议收藏」虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解。因此特意先对深度学习中的相关基础概念做一下总结。先看看前向传播算法(Forwardpropagation)与反向传播算法(Backpropagation)。1.前向传播如图所示,这里讲得已经很清楚了,前向传播的思想比较简单。举个例子,假设上一层结点i,j,k,…等一些结点与本层的结点w有连接,那么结点

    2022年4月28日
    47
  • ubuntu18.04 安装CUDA9.0 + CUDNN7 deb安装

    ubuntu18.04 安装CUDA9.0 + CUDNN7 deb安装一安装显卡驱动:直接在系统软件更新中选择安装:或者选择PPA源安装,参照:https://blog.csdn.net/new_delete_/article/details/81544438输入命令测试是否安装成功:nvidia-smi 二、安装CUDA1、安装gcc-6 g++-6(由于CUDA9.0仅支持GCC6.0及以下版本,而Ubuntu18.04预装…

    2022年5月20日
    153

发表回复

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

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