JAVA学习之 异常处理机制

今天就来说说java的异常处理机制,异常处理不是第一接触,尤其是写过很多c#的代码,基本都会写到异常处理的代码,其实c#的异常处理与java的异常处理基本都是一样的,只是在一些细节上不是很一样。今天就来说说关于Java的异常处理机制。

一、为什么需要

1、原因很简单就是错误是无法避免的,为什么这么说:我们的程序都是需要与外界交互的,但是外界环境是没有办法控制的,例如要访问的文件不存在,突然网络中断,或者操作失误等等都在所难免。还有代码是程序员写出来的,有bug也在情理之中。

2、异常无法避免,但是一个好的系统不能再遇到异常的时候就瘫痪吧?!我们需要对用户提出友好的提示,并且对用户的操作进行保存。这样异常处理就是非常必要的了。

首先说道异常,我们都知道在写程序的时候异常在所难免,但是这些异常都是怎么造成的呢?!总结发现异常一般是由用户错误引起,程序错误引起,物理错误引起。

二、优势

1、传统的方法会将很多精力用在错误处理上,如果用异常处理我们可以先完成正常的流程,再对异常进行捕捉处理

2、传统的方法正常流程和异常混在一起,而异常处理则是互相独立的,增强了代码的可读性。

3、传统的方法使用分支语句来处理错误,增加了代码的复杂性,如果用异常处理的方法则对异常类型进行分类型分组别进行处理简单明了

4、传统的方法只能对考虑到的错误进行处理,对无法预测的错误没有应对措施,如果用异常处理的方式则对各种异常都能进行处理

三、分类

1、Throwable(java.lang.Throwable):在API文档中写到:Throwable
类是 Java
语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java
虚拟机或者Java throw
语句抛出。类似地,只有此类或其子类之一才可以是 catch
子句中的参数类型。

2、Error(java.lang.Error):我们都知道是错误的意思,用于指示合理的应用程序不应该试图捕获的严重问题

3、Exception(java.lang.Exception):异常是指程序本身可以处理的异常

4、RuntimeException(java.lang.RuntimeException)(运行时异常):可能在java虚拟机正常运行期间抛出的异常超类。这种异常是可以通过改进代码来避免的。

5、非运行时异常(编译异常):是runtimeException以外的异常,从程序的角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。例如:sqlException以及自定义的Exception异常。

四、异常机制

在java中两种方法处理异常:捕捉异常,抛出异常。

1、捕捉异常:

使用try...catch捕获异常并处理,多个catch语句用来匹配多个异常,如:

代码如下:

package com.tgb.pattern;

import javax.swing.JOptionPane;
public class Demo {

	public static void main(String[] args){

		int i=Integer.parseInt(JOptionPane.showInputDialog("请输入一个整数"));
		JOptionPane.showMessageDialog(null,"输入的整数是:"+ i);
	}
}

如果输入qq就会出现:

调整后:

package com.tgb.pattern;

import javax.swing.JOptionPane;
public class Demo {

	public static void main(String[] args){

		try{
			int i=Integer.parseInt(JOptionPane.showInputDialog("请输入一个整数"));
			JOptionPane.showMessageDialog(null,"输入的整数是:"+ i);
		}catch(NumberFormatException nf){
			JOptionPane.showMessageDialog(null,nf.getMessage());
		}
	}

}

结果为:

这样用户还是没有办法看明白,继续修改:

package com.tgb.pattern;

import javax.swing.JOptionPane;
public class Demo {

	public static void main(String[] args){

		try{
			int i=Integer.parseInt(JOptionPane.showInputDialog("请输入一个整数"));
			JOptionPane.showMessageDialog(null,"输入的整数是:"+ i);
		}catch(NumberFormatException nf){
			JOptionPane.showMessageDialog(null,"只能输入整数!");
		}
	}
}

结果为:

再看一个多个catch的代码:

package com.tgb.pattern;

import javax.swing.JOptionPane;
public class Demo {

	public static void main(String[] args){
		try{
			int i=Integer.parseInt(JOptionPane.showInputDialog("请输入一个整数,范围是0-10:"));
			JOptionPane.showMessageDialog(null,"输入的数为:" +getIntDigit(i));
		}catch(Exception ex){
		    JOptionPane.showMessageDialog(null,ex.getMessage());
		}
	}

	static int getIntDigit(int i)throws Exception{
	   if(i>0 && i<=10){
	       return i;
	   }else{
	      throw new Exception("输入数的范围不在0-10之间");
	   }
	}
}

结果为:

没能不为整数的数据进行异常处理,下面修改一下:

package com.tgb.pattern;

import javax.swing.JOptionPane;
public class Demo {

	public static void main(String[] args){
		try{
			int i=Integer.parseInt(JOptionPane.showInputDialog("请输入一个整数,范围是0-10:"));
			JOptionPane.showMessageDialog(null,"输入的数为:" +getIntDigit(i));
		}catch(NumberFormatException nf){
		    JOptionPane.showMessageDialog(null, "必须输入整数");
		}catch(Exception ex){
		    JOptionPane.showMessageDialog(null,ex.getMessage());
		}
	}

	static int getIntDigit(int i)throws Exception{
	   if(i>0 && i<=10){
	       return i;
	   }else{
	      throw new Exception("输入数的范围不在0-10之间");
	   }
	}
}

结果为:

这样就可以捕获到不同的异常信息并对其进行处理了,其实以上代码的getIntDigit方法中的异常处理就是抛出,并在主方法中进行捕获。所以就不再写关于抛出异常的实例了。

在java的异常处理机制中还有很多不同的java异常处理类,这里没有一一说明,可以在响应的api文档进行查询,当然如果有兴趣也可以在敲代码过程中收集错误信息。很好的利用异常处理可以提高代码的可读性,使的代码更加简洁!

时间: 2024-10-17 06:48:23

JAVA学习之 异常处理机制的相关文章

Java中的异常处理机制

Java中的异常处理机制 示例 public class test { public static void main(String[] args) { // TODO Auto-generated method stub String s="hello"; int i=Integer.parseInt(s); } } 运行异常结果 在上述代码中Integer.parseInt表示把字符串类型转化成整数类型,同时Integer是Int的封装类:程序会报错,因为计算机没有办法把hello

Java中的异常处理机制的简单原理和应用。

异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间.地点.人物.情节等信息,可以用一个对象来表示,Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息. Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception,Erro

Java基础(四)-异常处理机制及其设计

本篇主要是记录自己所理解的Java异常处理机制(基于jdk1.7)以及怎么去处理和设计异常.还记得当初学习Java异常这块的时候都没怎么注意它的用途,以为就是简单的处理下异常,我避免程序出现这样错误就行了(当初真的很懵懂很天真).当踏入社会工作后才知道一个好的异常处理框架是有多重要,比方说当你的项目投入使用的时候,当程序出错如何快速的定位到问题的根源(出了什么错,在哪出的错,为什么出错),这就跟你的异常处理的好坏有关了(当然离不开你的日志处理).在有效使用异常的情况下,异常类型会回答报的什么错,

Java面向对象编程之异常处理机制

一:Java的异常处理机制的优点: 1:把各种不同情况的异常情况分类,使用JAVA类来表示异常情况,这种类被称为异常类.把各种异常情况表示成异常类,可以充分的发挥类的可扩展性和可重用性. 2:异常流程的代码和正常流程的代码分离,提高了代码的可读性,简化了代码的结构. 3:可以灵活的处理异常,如果发生了异常程序员可以手动抛出异常,也可以交给调用者来处理异常. 二:Java虚拟机的方法调用栈 Java虚拟机用方法来调用栈来跟踪每个线程一系列的方法调用过程,该堆栈保存了每个调用方法的本地信息(比如说方

Java学习之反射机制

前段时间在做项目的时候,由于是用的纯Servlet基础框架进行开发的,没有用到那些集成的框架,后来在后台处理表单中的数据的时候,感觉有很多东西都是重复的,比较繁琐,例如获取到前台页面表单中的值之后,要在后台实例化一个对象并且调用定义的setter方法来给对象赋值,由于表单中的数据比较多,然后这个调用setter方法的代码就显得有些重复臃肿,后来网上查资料才了解到可以通过java中的反射机制简化这一操作,并且也知道了很多框架里面也都用到了反射... 一.什么是反射机制 JAVA反射机制是在运行状态

java异常、异常处理机制

任何一种程序设计语言设计的程序在运行时都有可能出现错误. 捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生. 对于这些错误,一般有两种解决方法: 遇到错误就终止程序的运行. 由程序员在编写程序时,就考虑到错误的检测.错误消息的提示,以及错误的处理. java异常 在java语言中,将程序执行中发生的不正常情况称之为“异常”. java中的异常用于处理非预期的情况,如文件没找到,网络错误,非法的参数. java程序运行过程中所发生的异常事件可分为两类: Error:JVM系统内部错误.

Java学习:反射机制简介

反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它的任意一个方法和属性: 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 通俗点讲,通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以. 反射机制能做什么 反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类: 在运行时构造任意一个类的对象: 在运行时判断任意一个类所具有的成员变量和方法: 在运行时调用任意一个对象的方法: 生成动

Java学习之反射机制及应用场景

前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框架都或多或少的用到Java的反射机制.以下是自己使用反射的两个地方,感兴趣的同学可以看下:Android okHttp网络请求之Json解析,Android业务组件化之子模块SubModule的拆分以及它们之间的路由Router实现. 什么是Java反射机制? JAVA反射机制是在运行状态中,对于任

Java学习---4.异常处理

1.Java 异常:运行期出现的错误,要观察错误的名字和行号. Java自动生成异常对象,抛给异常类对象(throw),java找到异常代码并catch. 1 try{ 2 system.out.println(2/0); 3 }catch (ArithmaticExecption){system.out.println("异常错误"); } Error:错误,有Java虚拟机生成并抛出,包括动态链接失败,不能处理 execption:可以处理的异常 1 FileInputStream