java 异常练习题_Java 异常(习题)

异常

Key Point

* 异常的概念和分类

* 异常的产生和传递

* 异常的处理

* 自定义异常

练习

1. 填空

Java 中所有的错误都继承自throwable类;在该类的子类中,

Error类表示严重的底层错误,对于这类错误一般处理的方式是不要求我们对其处理

Exception类表示例外、异常。

2. 查api,填空

异常类java.rmi.AlreadyBoundException,从分类上说,该类属于已检查(已检查|

未检查)异常,从处理方式上说,对这种异常 必须处理,进行声明抛出或异常捕获;

异常类java.util.regex.PatternSyntaxException,从分类上说,该类属于未检查(已检

查|未检查)异常,从处理方式上说,对这种异常不作处理。

3. (异常的产生)把下面代码补充完整

public class TestThrow{

public static void main(String args[]){

throwException(10);

}

public static void throwException(int n){

if (n == 0){

//抛出一个NullPointerException

throw new

NullPointerException();}else{

//抛出一个ClassCastException

//并设定详细信息为“类型转换出错”

throw new

ClassCastException("类型转换出错");}

}

}

4. (try-catch-finally)有如下代码:

import java.io.*;

import java.sql.*;

class TestException{

public static void main(String args[]){

System.out.println(“main 1”);

int n;

//读入n

ma(n);

System.out.println(“main2”);

}

public static void ma(int n){

try{

System.out.println(“ma1”);

mb(n);

System.out.println(“ma2”);

}catch(EOFException e){

System.out.println(“Catch EOFException”);

}catch(IOException e){

System.out.println(“Catch IOException”);

}catch(SQLException e){

System.out.println(“Catch SQLException”);

}catch(Exception e){

System.out.println(“Catch Exception”);

}finally{

System.out.println(“In finally”);

}

}

public static void mb(int n) throws Exception{

System.out.println(“mb1”);

if (n == 1) throw new EOFException();

if (n == 2) throw new FileNotFoundException();

if (n == 3) throw new SQLException();

if (n == 4) throw new NullPointerException();

System.out.println(“mb2”);

}

}

问:当读入的n 分别为1,2,3,4,5 时,输出的结果分别是什么?

结果: n = 1

main 1

ma1

mb1

Catch EOFException

In finally

main2

n = 2

main 1

ma1

mb1

Catch IOException

In finally

main2

n = 3

main 1

ma1

mb1

Catch SQLException

In finally

main2

n = 4

main 1

ma1

mb1

Catch Exception

In finally

main2

n = 5

main 1

ma1

mb1

mb2

ma2

In finally

main25. (自定义异常)创建两个自定义异常类MyException1

和MyException2。

要求:

1) MyException1 为已检查异常,MyException2 为未检查异常

2) 这两个异常均具有两个构造函数,一个无参,另一个带字符串参数,参数表示产生

异常的详细信息。

public class MyException1 extends

Exception{

public MyException1() {

}

public

String MyException1(String str) {

return str;

}

}

public class MyException2

extends RuntimeException{

public MyException2() {

}

public String MyException2(String str) {

return str;

}

}6.

(自定义异常)在上一题的基础上,把下面代码补充完整。

public class TestMyException{

static MyException1 me = new

MyException1();public static void main(String

args[]){

int n;

//读入n

try{

m(n);

}catch(MyException1 ex1){

//输出ex1 详细的方法调用栈信息

System.out.println(me.getStackTrace1());

}catch(MyException2 ex2){

//输出ex2 的详细信息

//并把ex2 重新抛出

String str = "n == 2";

System.out.println(ex2.MyException2(str));

throw new

MyException2();}

}

public static void m(int n)_________ { //声明抛出MyException1

if (n == 1) {

//抛出MyException1

//并设定其详细信息为“n == 1”

String str = "n == 1";

me.setStackTrace(str);

throw new

MyException1();

}else {

//抛出MyException2

//并设定其详细信息为“n == 2”

throw new

MyException2();}

}

}

7. (try-catch)代码改错。

class MyException extends

Exception{}

class TestException{

public static void main(String args[]){

ma();

}

public static int ma(){

try{

m();

return 100;

}catch(Exception e){

System.out.println(“Exception”);

return 0;}

//catch(ArithmeticException e){

//System.out.println(“ArithmeticException”);

//}}

public static void m()throws MyException{

throw new MyException();

}

}

8. (方法覆盖)有如下代码

import java.io.IOException;

class Super{

public void ma() throws IOException{}

}

interface IA{

void mb();

}

public class MySub extends Super implements IA{

public void ma() //1_________{

}

public void mb() //2_________{

}

}

问:

在//1 处,填入以下________代码可以编译通过,在//2 处,填入_________代码可以编译

通过。

A. throws java.io.IOException

B. throws java.io.FileNotFoundException, java.io.EOFException

C. throws java.sql.SQLException

D. 不能抛出任何异常。

9. *(异常处理)有如下代码

import java.io.*;

import java.sql.*;

public class TestTryCatch{

public static void main(String args[])throws

Exception{

try{

ma(10);

System.out.println(“No Exception”);

}

catch(EOFException ex1){

System.out.println(“ex1”);

}

catch(IOException ex2) {

System.out.println(“ex2”);

}

catch(SQLException ex3) {

System.out.println(“ex3”);

}

}

public static void ma(int n) throws Exception{

if (n == 1){

throw new IOException();

}else if (n == 2){

throw new EOFException();

}else if (n == 3) {

throw new SQLException();

}

}

}

选择正确答案:

A. 编译不通过

B. 编译通过,输出No Exception

C. 编译通过,输出ex1

D. 编译通过,输出ex2

E. 编译通过,输出ex3

结果:A

10. *(try-catch,局部变量)有如下代码

public class TestTryCatch{

public static void main(String args[]){

System.out.println( ma() );

}

public static int ma(){

int n;

try{

n = 10/0;

}catch(Exception e){

}

return n;

}

}

选择正确答案:

A. 编译不通过

B. 编译通过,输出-1

C. 编译通过,输出0

结果:A.

11. *(try-catch-finally)有如下代码

public class TestFinally{

public static void main(String args[]){

System.out.println ( ma() );

}

public static int ma(){

int b;

//读入b

try{

int n = 100;

return n/b;

}catch(Exception e){

return 10;

}finally{

return 100;

}

}

}

在ma 中,当读入的b 为100 时,输出结果为__100__,当读入的b 为0 时,输出结果为

__100___。12.

*(try-finally)写出下面代码运行的结果

public class TestTryFinally{

public static void main(String args[]){

try{

ma();

}catch(Exception ex1){

}

}

public static void ma() throws Exception {

int n = 10;

int b;

//读入一个整数b

try{

System.out.println(“ma1”);

int result = n / b;

System.out.println(“ma2 ” + result);

}finally{

System.out.println(“In Finally”);

}

}

}

在ma 中,读入整数b,如果读入的值为10,则输出:

ma1

ma2 =1

In Finally如果读入的值为0,则输出:

ma1

In Finally

13. *(方法覆盖)

import java.io.*;

class MySuper{

public void m() throws IOException{}

}

class MySub extends MySuper{

public void m() throws EOFException, FileNotFoundException{}

}

class MySub2 extends MySub {

public void m() throws FileNotFoundException{}

}

以上代码是否能编译通过?如果不能,应该如何修改?

14. *(自定义异常)完成某个计费系统的用户登录和注册模块,要求如下:

1) 创建一个User 类,包括:用户登录名(username)、密码(password)、用户真实姓

名(name)、电子邮件地址(email)属性和相应的构造方法及set/get 方法。

2) 创建两个自定义异常类,一个LoginException,表示登录异常。一个RegisterException,

表示注册异常。自定义的两个异常,都要求有一个接受字符串类型参数的构造方法。

3) 创建一个UserBiz 接口,该接口中定义两个方法:

void register(String username, String password, String

password2,

String name, String email) throws RegisterException //用户注册

void login(String username, String password) throws LoginException

//用户登录

其中register 方法接受两个password 参数,原因是:在用户注册时,需要输入两遍

password,只有两次输入的password 一致,才允许注册。

4) 创建UserBiz 接口的实现类。其中

为该实现类创建一个属性,该属性为一个Map,用来保存已注册的用户信息。Map

的键为用户登录名,值为登录名对应的User 对象。初始情况下,Map 中保存的对

象为以下两个:

用户名 密码 真实姓名 电子邮件

admin admin Administrator admin@123.com

tom cat tomcat tomcat@cat.com

register 方法在以下两种情况下抛出异常:

1) username 在Map 中已存在

2) 两次输入的password 不一致

login 方法在以下两种情况下抛出异常:

1) username 不存在

2) username 和password 不匹配

5) 创建一个UserView 接口,该接口中定义两个方法:

void login();

void register();

6) 创建UserView 接口的实现类。

该实现类的login 方法中,利用命令行,让用户输入用户名和密码,之后调用UserBiz

中的login 方法。部分代码如下:

void login(){

System.out.println(“请输入用户名:”);

String username = ;

System.out.println(“请输入密码”);

String password = ;

//调用UserBiz 中的login 方法

}

该类的register 方法采用类似的方法,让用户输入注册时需要的信息,然后调用

UserBiz 中的register 方法。

注意:

1、 密码应该让用户输入两遍。

2、 UserViewImpl 中应当有一个UserBiz 类型的属性

7) 编写测试代码。

类图如下:

a4c26d1e5885305701be709a3d33442f.png

15. **(异常的捕获和抛出)有以下代码:

import java.io.*;

import java.sql.*;

public class TestMyException{

public static void main(String args[]){

try{

System.out.println("main1");

ma();

System.out.println("main2");

}catch(Exception e){

System.out.println("Catch Exception in main");

System.out.println(e.getMessage());

}

}

public static void ma() throws IOException{

try{

System.out.println("ma1");

mb();

System.out.println("ma2");

}catch(SQLException e){

System.out.println("Catch SQLException in ma");

throw new IOException(e.getMessage());

}catch(Exception e){

System.out.println("Catch Exception in ma");

System.out.println(e.getMessage());

}

}

public static void mb() throws SQLException{

throw new SQLException("sql exception in mb");

}

}

问:该程序输出结果是什么?

16. **(异常的捕获和抛出)有以下代码

public class TestException{

public static void main(String args[]){

try{

System.out.println(“main1”);

ma();

System.out.println(“main2”);

}catch(Exception e){

System.out.println(“In Catch”);

}

}

public static void ma(){

System.out.println(“ma1”);

throw new NullPointerException();

System.out.println(“ma2”);

}

}

选择正确答案:

A. 编译出错

B. 编译正常,输出main1 ma1 In Catch

C. 编译正常,运行时出错

17. **(异常的捕获和抛出)有如下代码

import java.io.*;

import java.sql.*;

class TestException{

public static void main(String args[]){

try{

ma();

}

catch(Exception e){}

}

public static void ma() throws IOException{ }

}

下面哪些代码放在处可以编译通过?

A. catch(NullPointerException npe){}

B. catch(IOException ioe){}

C. catch(SQLException sqle){}

18. **(finally)有如下代码

public class TestTryAndTry {

public static void main(String args[]){

System.out.println(ma());

}

public static int ma(){

try{

return 100;

}finally{

try{

return 200;

}finally{

return 500;

}

return 1000;

}

}

}

选择正确答案:

A. 编译错误

B. 输出100

C. 输出200

D. 输出500

E. 输出1000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 半同步 主主_MySQL主从,半同步,主主复制

MySQL Replication我们知道,MySQL数据库的二进制日志记录着每一个明确或者潜在可能导致数据库发生改变的sql语句,因此我们可以基于二进制日志来实现mysql的主从一致。而我们在此提到的mysql的复制的简单过程就是:首先mysql的主服务器(Master)…

java 数据队列_Java 数据结构 - 队列

Java 数据结构 - 队列我们今天要讲的数据结构是队列,比如 Java 线程池任务就是队列实现的。1. 什么是队列和栈一样,队列也是一种操作受限的线性结构。使用队列时,在一端插入元素,而在另一端删除元素。1.1 队列的主要特性队列中的数…

java+set+split_阿里资深工程师教你如何优化 Java 代码!

原标题:阿里资深工程师教你如何优化 Java 代码!作者 | 王超责编 | 伍杏玲明代王阳明先生在《传习录》谈为学之道时说:私欲日生,如地上尘,一日不扫,便又有一层。着实用功,便见道无终穷&#xff0…

myVariable是java标识符吗_java 标识符与变量

一、Java 标识符三要素1.标识符由字母、下划线(_)、美元符号($)或者字母组成。2.标识符应以字母、下划线(_)、美元符开头。3.标识符字符大小写敏感,长度无限制。标识符最重要的就是 见名知意并且不能与java关键字重名!二、Java 变量1.java变量是程序中最基本的单元。…

友盟统计java代码_SFAnalytics 分析友盟统计源码,反编译 SDK,还有部分没有 出来 android 259万源代码下载- www.pudn.com...

文件名称: SFAnalytics下载 收藏√ [5 4 3 2 1 ]开发工具: Java文件大小: 8023 KB上传时间: 2016-06-05下载次数: 0提 供 者: 花心大萝卜详细说明:分析友盟统计源码,反编译友盟统计SDK,还有部分没有反编译出来-Analysis their Allies s…

java mvc数据库 封装_关于SpringMvc参数封装_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...

SpringMVCSpring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。SpringSpring是一个开源框架,Spring是于2003 年兴起的…

20199计算机二级java答案_计算机二级Java练习题-2019.9

是不是急于做大量的计算机等级考试题库,却因测试结果不尽人意而心慌不安?不要急!考无忧小编为大家准备了一些二级Java练习题,希望能帮助大家高效复习,轻松通关!1.下列叙述中正确的是()。A.栈是“先进先出”…

平行志愿遵循分数优先php,2020平行志愿的录取规则是什么有哪些优势

摘要: 2020平行志愿的录取规则是什么有哪些优势为你介绍平行志愿的投档原则仍为“分数优先,遵循志愿”,而传统的顺序志愿则是根据“志愿优先,按分排序”。 2020平行志愿录取规则 平行志愿的投档原则仍为“分数优先,遵循…

Oracle quartile函数,Oracle分析函数六——数据分布函数及报表函数

Oracle 分析函数——数据分布函数及报表 函数CUME_DIST功能描述:计算一行在组中的相对位置, CUME_DIST 总是返回大于 0 、小于或等于 1 的数,该数表示该行在 N 行中的位置。例如,在一个 3 行的组中,返回的累计分布值为…

redhat配置oracle yum源,Redhat5和6 YUM源配置的区别

一、概述随着各个软件版本的不断升级,我们需要掌握的软件特性也越来越多,技术的不断更新也促进了我们脑细胞的循环。 今天在配置RedHat6.3的yum源时也出现了一个有趣的事情,下面请听俺道来。二、问题处理问题源于哥们处,自己就搭建…

linux7 修改服务启动项目命令,centos7服务部署flask项目

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?centos7语言配置问题登录服务器,注意观察是否出现以下警告提示warning: setlocale: LC_CTYPE: cannot change locale (en_US.utf8): No such file or d…

虚拟机linux中怎样打开qt,虚拟机中在Centos 4.7中安装qt-x11-opensource-4.4.3

本人最近学习qt,把qt安装在了虚拟机下,用的是免费的Linux,qt是Linux下开发c不错的软件,经过了2天的奋战,终于把qt安装在了自己的机器上面,现在把安装步骤告诉大家,希望对你们安装错误的同志们有…

linux top p 乱码,将Linux top命令输入到指定文件时的乱码问题

根据需求,项目需要读取linux系统环境参数,所以需要将top命令的输出结果输入到文件中。用重定向命令如下:topresult.txt。用vi打开文件:viresult.txt。显示的根据需求,项目需要读取linux系统环境参数,所以需…

win10子linux如何重置密码,Win10如何使用Windows PowerShell命令重置本地账户密码

在win10系统中,都自带有本地账户,为了安全也会给本地商户设置密码,不过使用一段时间之后,想要重置本地账户密码,但是很多用户并不知道要如何操作,其实我们可以使用Windows PowerShell命令方式来实现&#x…

linux wine 性能,Wine 1.9.16 发布,改善 GDI 性能

Wine 1.9.16 最近发布下载,配备了大量的新功能,改进和错误修正。显着的更新包括在MacOS下能更好与64位二进制兼容性,提升JavaScript性能,对Direct3D的改进,在Direct3D更多的着色器指令,提升GDI性能&#xf…

二级考试c语言中 星号与字母 题型总结,2017年计算机二级考试C语言知识点归纳...

2017年计算机二级考试C语言知识点归纳计算机二级考试是全国计算机等级考试(National Computer Rank Examination,简称NCRE)四个等级中的一个等级,考核计算机基础知识和使用一种高级计算机语言编写程序以及上机调试的基本技能。下面是2017年计算机二级考试…

c#语言输出字符串长度,C#获取字符串长度(string.Length)

字符串实际上是由多个字符组成的,字符串中的第一个字符使用字符串[0]即可得。[0]中的0称为下标。获取字符串中的第一个字符使用的下标是0,则字符串中最后一个字符的下标是字符串的长度减1。使用C#语言如果要获取字符串的长度,使用Length属性即可&#xf…

易语言取c盘文件夹中的文件被占用,win7系统怎么快速找出文件被什么进程占用|win7解除文件占用的方法...

‍‍很多时候我们想删除文件或文件夹的时候,会出现文件正在使用的提示导致文件无法删除,如果知道是什么程序在使用这个文件好,但多数时候我们并不知道是被什么程序占用,那么在win7系统怎么快速找出文件被什么进程占用呢&#xff1…

菜鸟linux的sed,Linux sed命令菜鸟入门

本文首先以一个简单的sed命令应用示例,说明如何使用sed命令进行文本处理,接着从sed命令的用法、工作原理、行地址模式以及sed命令支持的脚本命令详细介绍sed命令的用法。一个完整的sed命令使用简单示例现在有一个待处理文件test.txt,文件中包…

三星s10能升级android11,三星 S10+手机已在测试 Android 11 系统

IT之家2月25日消息 谷歌本月初发布了首个Android 11开发者预览版,首先面向Pixel手机,不过看起来三星已经在Galaxy S10 手机开始测试最新系统。IT之家从Geekbench数据库中获知,上面出现了运行Android R,型号为SM-G975F的三星Galaxy…