一选择题1—5AAADC
二简答题
1请指出下列Java代码错误
答:使用多重 catch 语句时,异常子类一定要位于异常父类之前。应把catch(Exception e)放在最后一个catch块。
2请给出下面这段程序的执行结果并说明原因
答:运行结果:234
原因:进入if语句—〉抛出异常——〉进入catch—〉输出2----〉进入finally—>输出3—〉执行剩余代码—〉输出4
3编写能产生ArraylndexOutOfBoundsException异常代码并将其捕获在控制台输出异常信息
package cn.jbit.homework;
public class ArrayIndexExceptionTest {
public static void main(String[] args) {
try{
int[] arr ={20,35,66,99,88};
for(int i=0;i<=arr.length;i++)
System.out.println(arr[i]);
}catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组长度越界! ");
}
4简述java异常使用体系结构
答:Error类:表示仅靠程序本身无法恢复的严重错误,如:内存溢出、动态连接失败、虚拟机错误等。应用程序不应该抛出这种类型的错误,假如出现这种错误,应尽量使程序安全退出。Exception类:由Java应用程序抛出和处理的非严重错误,如所需文件找不到、网络连接不通或中断、算术运算出错、数组下标越界、装载一个不存在的类、对null对象操作、类型转换异常。
5修改第三题使用log4j记录日志在jbit.log文件中记录产生的异常信息
package cn.jbit.log;
import org.apache.log4j.Logger;
/**
- 使用log4j记录日志。
- @author 北大青鸟
*/
public class ArrayIndexExceptionLog {
private static Logger logger=Logger.getLogger(ArrayIndexExceptionLog.class.getName());
public static void main(String[] args) {
try{
int[] arr ={20,35,66,99,88};
for(int i=0;i<=arr.length;i++){
System.out.println(arr[i]);
logger.debug(“输出:” + arr[i]);
}
}catch (ArrayIndexOutOfBoundsException e) {
logger.error(“数组长度越界!”, e);
}
}
}
三.上机练习
1.根据编号输出课程名称
package cn.jbit.exception;
import java.util.Scanner;
/**
- 测试try-catch-finally的使用。
*/
public class TestException1 {
public static void main(String[] args) {
System.out.print(“请输入课程代号(1~3之间的数字):”);
Scanner in = new Scanner(System.in);
try {
int courseCode = in.nextInt();
switch (courseCode) {
case 1:
System.out.println(“C#编程”);
break;
case 2:
System.out.println(“Java编程”);
break;
case 3:
System.out.println(“SQL基础”);
}
} catch (Exception ex) {
System.out.println(“输入不为数字!”);
ex.printStackTrace();
} finally {
System.out.println(“欢迎提出建议!”);
}
}
}
2使用throw抛出异常
package cn.jbit.exception;
/**
* 使用throw在方法内抛出异常。
*/
public class Person {
private String name = "";// 姓名
private int age = 0;// 年龄
private String sex = "男";// 性别
/**
* 设置性别。
* @param sex 性别
* @throws Exception
*/
public void setSex(String sex) throws Exception {
if ("男".equals(sex) || "女".equals(sex))
this.sex = sex;
else {
throw new Exception("性别必须是“男”或者“女”!");
}
}
public void setAge(int age) throws Exception {
if (age>=1 && age<=100)
this.age = age;
else {
throw new Exception("年龄必须在1到100之间!");
}
}
/**
* 打印基本信息。
*/
public void print() {
System.out.println(this.name + "(" + this.sex
+ "," + this.age + "岁)");
}
}
package cn.jbit.exception;
/**
* 捕获throw抛出的异常。
*/
public class TestException2{
public static void main(String[] args) {
Person person = new Person();
try {
person.setAge(110);
person.print();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3使用log4j输出日志到控制台
输出package cn.jbit.log;
import java.util.Scanner;
import org.apache.log4j.Logger;
/**
- 使用log4j输出异常信息到控制台。
*/
public class TestLog1{
private static Logger logger=
Logger.getLogger(TestLog1.class.getName());
public static void main(String[] args) {
try {
Scanner in = new Scanner(System.in);
System.out.print(“请输入被除数:”);
int num1 = in.nextInt();
System.out.print(“请输入除数:”);
int num2 = in.nextInt();
System.out.println(String.format("%d / %d = %d",
num1, num2, num1/ num2));
} catch (Exception e) {
logger.error(“出现异常”,e);
} finally {
System.out.println(“感谢使用本程序!”);
}
}
}
4使用log4j输出日志到文件
package cn.jbit.log;
import java.util.InputMismatchException;
import java.util.Scanner;
import org.apache.log4j.Logger;
/**
-
记录日志到文件。
*/
public class TestLog2 {
private static Logger logger = Logger.getLogger(TestLog2.class.getName());public static void main(String[] args) {
try { Scanner in = new Scanner(System.in); System.out.print("请输入被除数:"); int num1 = in.nextInt(); System.out.print("请输入除数:"); int num2 = in.nextInt(); System.out.println(String.format("%d / %d = %d", num1, num2, num1 / num2)); logger.info(String.format("%d / %d = %d", num1, num2, num1 / num2)); } catch (InputMismatchException e) { logger.error("被除数和除数必须是整数。"); } catch (ArithmeticException e) { logger.warn("除数不能为零。"); } catch (Exception e) { logger.error("其他异常",e); } finally { System.out.println("感谢使用本程序!"); }
}
}