Java 中的异常处理机制
生活中的异常:
不能够完整而顺利的完成一些工作
根据不同的异常进行相应的处理,而不会就此终端我们的生活
引出:
异常处理:
方式:
1.选择结构(逻辑判断)避免
demo:if逻辑处理异常
import java.util.Scanner;
public class TestIF {
/**
* 程序中的异常
* @param 房上的猫
*/
public static void main(String[] args) {
//处理异常的方式1:if ..逻辑判断
Scanner input=new Scanner(System.in);
System.out.print("请输入第一个整数:");
if(input.hasNextInt()==true){
int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
System.out.print("请输入第二个整数:");
int num2=input.nextInt();
if(num2==0){
System.err.println("除数不能为0,程序退出");
System.exit(1);// 退出程序
}
else
{
int jg=num1/num2;//输入num2可能输入 0
System.out.println(jg);
}
}else
{
System.err.println("输入的不是整数,程序退出");
System.exit(1);
}
}
}
弊端:
1)代码臃肿
2)程序员要花很大精力“堵漏洞”
3)程序员很难堵住所有漏洞
2.使用异常机制
异常处理机制,是专门应对异常出现后,如何解决该异常的一种手段
异常是指程序在运行过程中所发生的不正常的时间,它会中断正在运行的程序
Java编程语言使用异常处理机制为程序提供了错误处理机制
异常处理关键字
捕获异常:
try(试一试):执行可能产生异常的代码
catch(抓住,捕获):捕获异常
finally(最终):无论是否发生异常,代码总能执行
声明异常:
throws(抛出):声明方法可能要抛出的各种异常
抛出异常:
throw(抛出):手动抛出异常
throws声明异常,抛给调用者,调用必须进行try...catch
位置:方法名后面进行 声明异常,多个异常使用逗号隔开
//声明异常,多个异常用逗号隔开
只要有throws,强制要求方法调度方法必须 手段1:try catch 2.继续向上抛
public static void a() throws 异常类型{
//可能出现异常的代码
}
throw:手动抛出异常
throw new Exception("异常");
注:在真实开发中,如果我们定制了工具类,工具类中有特别复杂的方法,需要各种断定,这个时候,工具类的方法一定有一个机制,就是异常上抛的机制,作用:为了工具的使用房,可以感知到这个异常
demo 01:
import java.util.InputMismatchException;
import java.util.Scanner; public class TestExceptionThrows1 { /**
* throws声明异常,抛给调用者处理,调用者必须进行try..catch
* 位置: 方法名后面进行 声明异常,多个异常使用逗号隔开
*/
public static void divid() throws InputMismatchException,ArithmeticException,Exception{ Scanner input=new Scanner(System.in);
System.out.print("请输入第一个整数:");
int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
System.out.print("请输入第二个整数:");
int num2=input.nextInt();
int jg=num1/num2;//输入num2可能输入 0
System.out.println(jg); }
public static void main(String[] args) {
//调用处必须处理
try {
divid();
} catch (InputMismatchException e) {
System.err.println("输入不匹配");
e.printStackTrace();
} catch (ArithmeticException e) {
System.err.println("除数不能为0");
e.printStackTrace();
} catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace();
} } }
demo 02:
import java.util.InputMismatchException;
import java.util.Scanner; public class TestExceptionThrows2 { /**
* throws声明异常,抛给调用者处理,调用者必须进行try..catch
* 位置: 方法名后面进行 声明异常,多个异常使用逗号隔开
*/
public static void divid() throws InputMismatchException,ArithmeticException,Exception{ Scanner input=new Scanner(System.in);
System.out.print("请输入第一个整数:");
int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
System.out.print("请输入第二个整数:");
int num2=input.nextInt();
int jg=num1/num2;//输入num2可能输入 0
System.out.println(jg); } public static void main(String[] args) throws InputMismatchException,ArithmeticException,Exception{
//调用处不处理,抛给了java虚拟机继续处理 divid(); } }
demo 03:
public class PersonThrow {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age>=0 && age<=100){
this.age = age;
}else{
try {
//手动抛出异常
throw new Exception("输入的年龄必须是0~100之间的数");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public String getSex() {
return sex;
}
public void setSex(String sex) throws Exception {
if(!sex.equals("男") && !sex.equals("女")){
throw new Exception("输入必须是男或女");
}else
{
this.sex = sex;
}
}
}
public class TestPerson {
public static void main(String[] args) {
PersonThrow per=new PersonThrow();
per.setAge(-90);
System.out.println(per.getAge());
try {
per.setSex("fd");
System.out.println(per.getSex());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
异常的分类
常见的异常处理类型

解析:检查时异常:编译时系统提示必须使用异常处理机制环绕(chenked异常)
运行时异常:运行时抛出异常
使用try-catch-finally处理异常
异常是一种特殊的对象,类型为 java.lang.Exception或其子类
语法:
格式1 :
try{
//可能发生异常的语句
} catch(Exception){
//捕获异常
}finally{
//无论是否有异常,都进入执行
}
执行顺序:
try块 发生异常 产生异常对象
异常类型匹配 进入 catch块
程序继续执行
printStactTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程
ex.getMessage();
返回异常信息描述的字符串
ex.printStactTrace();
异常堆栈信息
显示具体异常类型
显示产生异常的具体位置
当异常类型不匹配时,程序之间中断
打印自定义处理信息:
System.err.println(“自定义信息”);
多路异常捕获:
多个catch块并列,但异常类型不同(捕获可能出现多种异常的代码块)
注:子异常一定在顶级一次之前

demo:try..catch处理异常
import java.util.InputMismatchException;
import java.util.Scanner; public class TestExceptionTry { /**
*
*/
public static void main(String[] args) { try {
Scanner input=new Scanner(System.in);
System.out.print("请输入第一个整数:");
int num1=input.nextInt();//1)输入不是整数类型 2)除法 输入 0
System.out.print("请输入第二个整数:");
int num2=input.nextInt();
int jg=num1/num2;//输入num2可能输入 0
System.out.println(jg);
}catch(ArithmeticException ae){
System.err.println("除数不能为0"+ae.getMessage());
ae.printStackTrace();
}catch(InputMismatchException ae){
System.err.println("输入的不是整数");
System.exit(1);
}
catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
} } }
(C) 房上的猫 。 保留所有权利。
https://www.cnblogs.com/lsy131479/
如需转载,请注明出处!!!
Java 中的异常处理机制的更多相关文章
- Java中的异常处理机制的简单原理和应用?
程序运行过程中可能出现各种"非预期"情况,这些非预期情况可能导致程序非正常结束. 为了提高程序的健壮性,Java提供了异常处理机制: try { s1... s2... s3... ...
- 16、java中的异常处理机制
异常:就是程序在运行时出现不正常情况.异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述.并封装成对象. 其实就是java对不正常情况进行描述后的对象体现. 对于问题的划 ...
- java中的异常处理机制
java异常处理机制 1)在java语言中,通常将可能出现异常的语句放入try{}语句中,将出现错误后需要执行的语句放入到catch{}语句中,将无论是否发生异常都要执行的语句放在finally{}语 ...
- Java中的异常处理机制《》
异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性. Java异常机制主要依赖于try.catch.finall ...
- Java中的异常处理机制的简单原理和应用
异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间.地点.人物.情节等信息,可以用一个对象来表示,Java使用面向对象的方式 ...
- java中的异常处理机制_函数覆盖时的异常特点
/*注意:异常声明在函数上 异常在子父类覆盖时的体现1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者异常的子类2.如果父类方法抛出多个异常,那么子类在覆盖该方法 ...
- 【Java面试题】21 Java中的异常处理机制的简单原理和应用。
异常指Java程序运行时(非编译)所发生的非正常情况或错误. java对异常进行了分类,不同类型的异常使用了不同的java类,所有异常的根类为java.lang.Throwable.Throwable ...
- java中的异常处理机制_finally的使用
finally总结: finally代码块:定义一定执行的代码 通常用于关闭资源或者某些一定执行的代码 实例1:finally功能演示 class FuShuException extends Exc ...
- 43 java中的异常处理机制的简单原理和应用
随机推荐
- [转载]WCF和ASP.NET Web API在应用上的选择
http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html http://msdn.microsoft.com/en-us/libra ...
- 【BZOJ】3160: 万径人踪灭 FFT+回文串
[题意]给定只含'a'和'b'字符串S,求不全连续的回文子序列数.n<=10^5. [算法]FFT+回文串 [题解]不全连续的回文子序列数=回文子序列总数-回文子串数. 回文子串数可以用回文串算 ...
- java 连接Kafka报错java.nio.channels.ClosedChannelExcep
Java 客户端连接Kafka报如下错误 java.nio.channels.ClosedChannelExcep 是由于Kafka server.properties中的advertised.hos ...
- python概念-其实只要简单了解一下,但是却讲了将近两个小时的知识点:元类
说实话,我真心不太想总结这个东西,算了,炒一下egon的吧 1 引子 1 class Foo: 2 pass 3 4 f1=Foo() #f1是通过Foo类实例化的对象 python中一切皆是对象,类 ...
- Python Dict用法
Operation Result len(a) the number of items in a 得到字典中元素的个数 a[k] the item of a with key k 取得键K所对应的值 ...
- 关于onConfigurationChanged
这两天测试app时,发现一个奇怪问题,app在启动后,Activity会onCreate两次,起初以为是横屏设置导致,随即在Activity中添加了android:configChanges=&quo ...
- console.dir() 与 console.dirxml() 的使用
在调试JavaScript程序时,有时需要dump某些对象的详细信息.通过手工编写JavaScript代码可以完成这一工作:针对对象的属性进行循环,将循环到的每一个属性值打印出来:可见,这一过程是比较 ...
- 2016.07.13-map的使用(以leetcode1-Two Sum为例)
map的使用 1.unordered_map和map的区别 2.如何用 3.for (int a : nums1) 4.to_string() 5.map的应用 1.unordered_map和map ...
- WCF REST 工作总结
首先引用System.ServiceModel;System.ServiceModel;System.ServiceModel.Activation;命名空间 [ServiceContract] pu ...
- linux 进程内存解析【转】
转自:http://blog.csdn.net/lile269/article/details/6460807 之前我所了解的linux下进程的地址空间的布局的知识,是从APUE第2版的P430得来的 ...