第九章 Java异常处理练习
- 格式:doc
- 大小:96.50 KB
- 文档页数:5
浅析Java异常处理机制及应用摘要:Java异常处理机制是Java编程语言中最为重要的机制之一,它可以在代码中处理各种类型的异常。
本文将对Java异常处理机制进行浅析,并从应用层面探讨一些常见的Java异常处理方法。
关键词:Java,异常处理,应用正文:一、Java异常处理机制Java异常处理机制是Java编程语言中最为重要的机制之一。
在Java语言中,异常是指一个程序运行时产生的意外情况,可以是代码中的错误,也可以是由于外部环境因素导致的错误。
Java提供了一整套异常处理机制,可以帮助开发者处理各种类型的异常。
在Java中,异常通常被定义为继承自Throwable类的任意一个子类。
常见的异常类型包括RuntimeException、IOException、ClassNotFoundException、ArithmeticException等等。
Java中异常的处理主要分为两种方式:try-catch块和throws语句。
try-catch块是一种捕捉异常的方法,其基本语法结构如下:```try {// 可能会抛出异常的代码块} catch (type1 e1) {// 处理type1类型异常的代码块} catch (type2 e2) {// 处理type2类型异常的代码块} finally {// 不管是否发生异常,都会执行的代码块}```throws语句是一种抛出异常的方法,其基本语法结构如下:```public void methodName() throws ExceptionType {// 可能会抛出异常的代码块}```二、Java异常处理的应用Java异常处理机制应用广泛,以下是应用层面探讨一些常见的Java异常处理方法。
1、基于try-catch块的异常处理try-catch块是Java中最基本的异常处理方法。
它可以在程序运行时捕捉异常,并且根据不同的异常类型采取不同的处理方法。
ng.NullPointerException原因是:有空指针,有地址没赋值2.Exception in thread "main" ng.ArithmeticException: / by zero原因是除数是03.ArrayIndexOutOfBoundsException原因是:数组越界ng.NumberFormatException原因是:数字格式化有问题5.Unhandled exception type Exception原因是:没有进行异常处理6.进行国际化操作的时候遇到这样的错误:Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name Message, locale zh_CN答:因为在命令提示符中,是没有错误的解决方法是:在myeclipse中,会出现这个错误java国际化之Can't find bundle for base name1.初步学习最近在学习ResourseBundle时遇到了“Can't find bundle for base name ”这个错误搞了很久才解决了。
原因就是类路径问题要将属性文件放在类路径中!百度里很多都是教程但没有涉及到解决方法!2.中文显示:测试文件java 代码package com.lht.ResourseBundleStudy;import java.util.ResourceBundle;public class ResourseBundleDemo {public static void main(String[] args) {ResourceBundle resource = ResourceBundle.getBundle("test");System.out.print(resource.getString("msg0") + "!");System.out.println(resource.getString("msg1") + "!"); }}test.propertiesmsg0="Hello World"msg1="da jia hao"开始自己测试的时候:将属性文件放在bin/下也试过也不行无赖中就在google中搜索了一下终于在sun的java论坛(/thread.jspa?threadID=660477&messageID=4231534)中找到了线索下面是帖子的内容:I've solved the problem the best way possible. Basically what i've done is added a new class folder named config to the project home dir. Then i added this classfolder to the classpath in project properties. After doing all of this you only need to reference the properties file by "Email".Hope this helps anyone else who is having similiar problems.基本意思就是在src下建立classes(名字无所谓)文件夹将属性文件存放在下面,然后将这个文件夹加入类路径中!运行就可以了:加入类路径的方法:你的工程文件夹->properties->选择Libraries选项卡->Add Class Folder 将刚才建立的文件夹加入就可以了!结果如下:"Hello World"!"da jia hao";!2.中文显示在classes目录下建立message_CH.properties内容如下:ms0="大家好"同样用上面的测试文件!结果如下:"?ó????"!乱码怎么回事啊!在百度里搜索后找到了答案有以为网友写的很清楚:/3885062.html 下面引用如下:原理Property文件中,使用的编码方式根据机器本身的设置可能是GBK或者UTF-8。
JAVA异常处理机制摘要:在编写java程序时,应尽可能避免异常的发生;在异常发生时提供处理这些不正常事件的方法,使程序不会因为异常的发生而中断或产生不可预见的结果。
该文阐述如何运用java的异常处理机制为我们控制和处理异常的出现,从而保证程序的安全性和可用性。
关键词: java;异常;异常处理;继承中图分类号:tp311 文献标识码:a 文章编号:1009-3044(2013)15-3525-02异常是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程。
例如:整数除以零、使用空指针、数组越界访问、文件找不到、用户输入错误、格式不正确的url、连接数据库失败等等。
异常不同于编译错误,编译错误是因为程序存在语法问题而未通过编译,异常其实相当于运行错误,也就是在程序的运行中出现一些没有预料到的情况或不能人为控制的因素,这时就需要进行异常处理。
1 异常的处理机制异常产生的位置是在方法内部。
我们只会说,一个方法产生了异常,而不是一个类或一个变量产生了异常。
java程序在执行过程中如果某个方法内出现异常,会自动生成一个异常类的对象(throwable),该异常对象将被自动提交给jvm,这个过程称之为抛出(throw)异常[1]。
异常抛出之后,jvm会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称之为捕获(catch)异常和处理异常。
如果jvm找不到可以捕获异常的代码,jvm会终止当前程序的运行,并打印异常堆栈信息。
2 异常的分类以及继承关系在java中,异常情况分为两在类:exception(异常)类和error (错误)类[2]。
1)错误(error):jvm系统内部错误或资源耗尽等严重情况属于jvm需要负担的责任。
2)异常(exception):其它因编程错误或偶然的外在因素导致的一般性问题。
这类异常得到恰当的处理时,程序有机会恢复至正常运行状况。
从编程角度也可以把throwable分为两个分支:1)不受检查(unchecked)异常,包括runtimeexcepton及其子类和error:编译器不要求强制处理的异常。
java Java异常处理结构在Java中,任何异常对象都是ng.Throwable类或其子类的对象,即所有异常类型都是内置类Throwable的子类。
因此,Throwable类在异常类层次结构的顶层。
紧接着Throwable类把异常分成两个不同分支的子类:Exception类和Error类,如图8-1所示:图8-1 异常结构图由上图可以知道,Thorwable类是所有异常和错误的超类,两个Error和Exception子类,分别表示错误和异常。
其中,Exception异常类又分为运行时异常(RuntimeException)和非运行时异常,这两种异常有很大的区别,在于不检查异常(Unchecked Exception)和检查异常(Checked Exception)两种方式。
●Exception类用于用户程序可能出现的异常情况,也可以用来创建自定义异常类。
●Error类在通常环境下定义不希望被程序捕获的异常。
Error类型的异常用于Java运行时与运行系统本身有关的错误,如堆栈溢出属于该错误之一。
运行时异常都属于运行异常类及其子类异常,如尝试访问null对象成员(NullPointerException)、索引超出范围(IndexOutOfBoundsException)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。
这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生。
非运行时异常是运行时异常以外的异常,类型上都属于Exception类及其子类。
从程序语法角度讲是必须进行处理的异常,如果不处理,程序则无法通过编译,如输入/输出异常(IOException)、SQL语句异常(SQLException)等以及用户自定义的Exception异常。
常用的异常类如表8-1所示。
表8-1 Java常用异常类。
Java中异常的捕获与处理⼀、Java异常简介什么是异常?程序运⾏时,发⽣的不被期望的事件,它阻⽌了程序按照程序员的预期正常执⾏,这就是异常。
异常发⽣时,是任程序⾃⽣⾃灭,⽴刻退出终⽌。
在Java中即,Java在编译或运⾏或者运⾏过程中出现的错误。
Java提供了更加优秀的解决办法:异常处理机制。
异常处理机制能让程序在异常发⽣时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最⼤可能恢复正常并继续执⾏,且保持代码的清晰。
Java中的异常可以是函数中的语句执⾏时引发的,也可以是程序员通过throw 语句⼿动抛出的,只要在Java程序中产⽣了异常,就会⽤⼀个对应类型的异常对象来封装异常,JRE就会试图寻找异常处理程序来处理异常。
Java异常机制⽤到的⼏个关键字:try、catch、finally、throw、throws。
try -- ⽤于监听。
将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发⽣异常时,异常就被抛出。
catch -- ⽤于捕获异常。
catch⽤来捕获try语句块中发⽣的异常。
finally -- finally语句块总是会被执⾏。
它主要⽤于回收在try块⾥打开的物⼒资源(如数据库连接、⽹络连接和磁盘⽂件)。
只有finally 块,执⾏完成之后,才会回来执⾏try或者catch块中的return或者throw语句,如果finally中使⽤了return或者throw等终⽌⽅法的语句,则就不会跳回执⾏,直接停⽌。
throw -- ⽤于抛出异常。
throws -- ⽤在⽅法签名中,⽤于声明该⽅法可能抛出的异常。
主⽅法上也可以使⽤throws抛出。
如果在主⽅法上使⽤了throws抛出,就表⽰在主⽅法⾥⾯可以不⽤强制性进⾏异常处理,如果出现了异常,就交给JVM进⾏默认处理,则此时会导致程序中断执⾏。
产⽣异常的原因:⽤户输⼊了⾮法数据。
要打开的⽂件不存在。
JAVA各章习题及答案面向对象程序设计―Java语言习题答案第1章一、选择题1.下列选项中,不属于Java语言特点的一项是(C )。
(A)分布式(B)安全性(C)编译执行(D)面向对象Java程序采用解释执行的方法。
在系统编译运行Java程序时,Java编译器将Java程序转化为字节码,在运行时,解释器将编译得到的字节码进行解释执行。
2.在Java语言中,( C )是最基本的元素?(A)方法(B)包(C)对象(D)接口构成Java程序的基本元素类(抽象的对象)。
3.编译一个定义了3个类和10个方法的Java源文件后,会产生( D )个字节码文件?扩展名是( D )?(A)13个字节码文件,扩展名为.class (B)1个字节码文件,扩展名为.class(C)3个字节码文件,扩展名为.java (D)3个字节码文件,扩展名为.class源文件中的每一个类编译后都会生成一个字节码文件,字节码文件的扩展名是.class。
5.Java语言属于(B )种语言?(A)面向机器的语言(B)面向对象的语言(C)面向过程的语言(D)面向操作系统的语言Java语言是一种纯面向对象的语言。
6.下列关于Application和Applet程序的说法中不正确的一项是( B )。
(A)Application使用解释器java.exe (B)Application不使用独立的解释器(C)Applet在浏览器中运行(D)Applet必须继承Java的Applet类Application程序包含main()方法,它是一种独立执行的程序,因此必须使用独立的解释器解释执行。
7.下列选项中,不属于Java核心包的一项是(A )。
(A)javax.swing (B)java.io (C)java.utile (D)ng 凡是以java开头的包都是Java核心包,以javax开头的包则属于Java扩展包。
8.下列描述中,不正确的是(A )。
第九章 异常 在Java应用程序中,异常处理是保证程序正常、可靠运行的一个重要方面,在前边已经遇到了简单的异常处理。本章实验将主要针对程序中常用的异常的处理及异常的应用。
实验一:异常处理及应用
实验目的 (1). 了解异常的基本概念、异常的的产生和异常处理的过程。 (2). 基本掌握异常在应用程序中的应用。
实验要求 编写应用程序,在程序中对常见的异常进行捕捉并作相应的处理。 实验内容 实验示例9.1.1 在上一章的实验示例测试中,若没有输入答案或输入非数字字符,则在处理过程中会出现数据格式异常,修改实验示例创建的Exercises类,添加捕获并处理异常的程序代码。
— 实现该示例的步骤如下: ⑴ 简要分析 根据题意,首先需要确定会产生异常的程序段,然后使用try~catch结构进行捕捉和处理异常地处理。由于主要处理数据格式异常,它由输入时的错误引起,所以,在处理异常时,就是返回到输入处,重新输入数据。 ⑵ 根据上述简要分析,给出如下修改后的参考程序代码: /*这是一个小学生综合训练题测试的应用程序 *程序的名称: *程序中捕捉处理数据格式异常(NumberFormatException) */ import .*; import .*; 。 import .*;
public class Exercises extends StudentScreen implements ActionListener,KeyListener { int count = 0; int n1=0,n2=0; int total=0; int right=0; long timenum=0; Random rand=new Random(); public Exercises(int total) 图9-2 实验示例9.1.2屏幕界面
{ 、 =total;
(""+(100)); (""+(100)); ("测试题目数:"+total+"道"); (false); quals("+")) x=n1+n2; else if().equals("-")) x=n1-n2; else if().equals("*")) x=n1*n2; else if().equals("/")) x=n1/n2; if(x==())) right++; } … catch(NumberFormatException e)
{ (null,"数据格式错误,请重新输入数据!!!"); (); return; } catch(Exception e1) { (null,()); return; } count++; ~ if(count==total) ;
public class TestExercises extends JFrame { TestExercises()
{ add(new Exercises(30)); -1a-1c9.1.29.1.1; import .*; import .*; public class Calculator extends JFrame implements ActionListener { float f1=0; float f2=0; JLabel num1=new JLabel(""); Choice op=new Choice(); — JTextField num2=new JTextField(10);
JLabel result=new JLabel(); JButton ok = new JButton("下一个"); JButton next = new JButton("清零"); JButton exit = new JButton("退出"); JPanel jp1=new JPanel();
9-1a 选择测试题目数对话框 9-1b 答题屏幕界面 9-1c 异常信息对话框 9-1d 结果信息对话框 JPanel jp2=new JPanel(); public Calculator() { ("简单计算器应用"); | (new GridLayout(3,1));
(new JLabel("请选择运算并输入运算数:")); ("+"); ("-"); ("*"); ("/"); (num1); (op); (num2); (result); ! (ok);
(next); (exit); (jp1); (jp2); (this); //委托监听对象 (new KeyPressListener()); //……… (new KeyPressListener());//……… (new KeyPressListener());//……… (this); //委托监听对象 % (this);
(); (true); ; (); } /**********判断数据是否合法***********/ public boolean isNumber() throws DefException { try · {
f2=()); //获取运算数 } catch(NumberFormatException e) { (null,"数据格式错误,请重新输入数据!!!"); (); return false; } catch(Exception e1) — {
(null,()); return false; } if(f2<=0||f2>1000) throw new DefException(); return true; } /**********成员方法:运算处理***********/ public void compute() { ¥ try
{ if(!isNumber()) { (); return; } } catch(DefException e2) //处理自定义异常 { (null,()); (); return; } switch ()) { ^ case 0: f1=f1+f2; break;
case 1: f1=f1-f2; break; case 2: f1=f1*f2; break; case 3: f1=f1/f2; break; } (""+f1); (" = "+f1); (""); (); } ' /********ActionListener接口方法************/
public void actionPerformed(ActionEvent e) { if()==ok) compute(); //执行成员方法,继续下一数运算 else if()==next) //清零,开始新的运算 { f1=0; (""); (""); (""); (0); 】 ();
} else if()==exit) (); //结束程序 } /*添加内部类KeyPressListener*/ class KeyPressListener extends KeyAdapter { public void keyPressed(KeyEvent e) //键盘按下事件 { if()!= return; //如果不是按了Enter键,则不处理 @ if()==op) (); //选择运算后,准备输入运算数
else compute(); //执行成员方法,继续下一数运算 } } //内部类结束 } ⑶ 分别编译、程序,生成、类文件,以供其他应用程序所用。
⑷ 程序及分析 本程序是一个简单计算器程序,除了界面组件外,在类中还定义了几个成员变量: f1和f2 (float) 两个运算数,其中f1记录运算的结果,并作为运算数参与运算,f2是输入的运算数。 两个方法: isNumber() 该方法用于确定输入的运算数是否合格,合格才能参与运算。在方法中捕捉并处理数据格式异常。当数据在0~1000之外时,创建并抛出自定义异常DefException对象 compute() 方法用于计算处理。在方法中捕捉并处理了自定义的数据超界异常,在确保输入的数据合格后,方能进行运算数的运算。 程序实现了两个接口ActionListener和KeyListener,其中KeyListener接口以内部类的方式实现。当输入运算后,单击按钮“下一个”和按“Enter”键,其目的是一样的,都表明已输入运算数,可以进行运算,将这一功能处理放在compute()方法中完成。 ⑸ 编写测试程序,测试Calculator类的功能。测试程序代码如下: public class Test Calculator { public static void main(String [] args) { new Calculator(); } }
编译执行程序,测试程序的功能。 自由练习 仿照上述实验示例,修改自由练习,创建自定义异常类,当输入的入学成绩超出599~700时,视为超界数据,添加捕捉自定义异常的功能。