一、【必做题】
1.写出以下程序的运行结果。(知识点:异常处理机制)
Static double average(int[] a) throws NullPointerException {
Try {
Int sum = 0;
for (int I = 0; I < a.length; i++) {
Sum += a[i];
}
Return (((double) sum) / a.length);
} catch (NullPointerException e) {
System.out.println(“NullPointerException”);
throw e;
}
}
Public static void main(String args[]) {
Try {
Int a[] = null;
average(a);
} catch (NullPointerException e ) {
System.out.println(“NullPointerException”);
}
System.out.println(“OK”);
}
输出结果为:
NullPointerException
NullPointerException
OK
2.编写一个方法,比较两个字符串。假如其中一个字符串为空,会产生NullPointerException异常,在方法声明中通告该异常,并在适当时候触发异常,然后编写一个程序捕获该异常。(知识点:自定义异常)
3.假如要从命令行获得两个整数,自定义两个异常类来描述可能发生的异常:ParameterNumberException(参数个数异常),ParameterFormateException(参数格式异常),设计一个类,在check(String args[])方法中通告这两个异常,在main方法中判断相应的情况下触发异常,然后捕获异常,对它们进行处理。(知识点:异常处理机制)
4.给定下面代码: public void example(){
try {
unsafe();
System.out.println("Test 1");
}catch(Exception e){
System.out.println("Test 2");
}
finally{
System.out.println("Test 3");
}
System.out.println("Test 4");
}
如果方法unsafe()运行正常,哪个结果不会被显示出来?
A. Test 1 B. Test 2 C. Test3 D. Test 4
(知识点:异常处理机制)
5.编写应用程序,从命令行传入两个整型数作为除数和被除数。要求程序中捕获NumberFormatException 异常和ArithmeticException 异常在命令行输入不同的参数时能输出如下各种结果:
(知识点:异常处理机制)
6.编写一个检查给定的数字的数据类型是否为byte的程序,如果此数字超出byte数据类型表示的数的范围,则引发用户自定义的异常ByteSizeException,并显示相应的错误信息(知识点:自定义异常)
步骤1:创建用户自定义异常类ByteSizeException
步骤2:在main方法中编写逻辑代码
步骤3:运行并测试
效果如图:
答案:
一、【必做题】
1.写出以下程序的运行结果。
Static double average(int[] a) throws NullPointerException {
Try {
Int sum = 0;
for (int I = 0; I < a.length; i++) {
Sum += a[i];
}
Return (((double) sum) / a.length);
} catch (NullPointerException e) {
System.out.println(“NullPointerException”);
throw e;
}
}
Public static void main(String args[]) {
Try {
Int a[] = null;
average(a);
} catch (NullPointerException e ) {
System.out.println(“NullPointerException”);
}
System.out.println(“OK”);
}
NullPointerException
NullPointerException
OK
2.编写一个方法,比较两个字符串。假如其中一个字符串为空,会产生NullPointerException异常,在方法声明中通告该异常,并在适当时候触发异常,然后编写一个程序捕获该异常。
publicclass Main {
publicstaticvoid test(String s,String a ) throws NullPointerException {
if(s==null||a == null) {
thrownew NullPointerException();
}else{
}
}
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
try{
String s = null;
String a = "asff";
test(s,a);
}catch(NullPointerException e){
e.printStackTrace();
}
}
}
3.假如要从命令行获得两个整数,自定义两个异常类来描述可能发生的异常:ParameterNumberException(参数个数异常),ParameterFormateException(参数格式异常),设计一个类,在check(String args[])方法中通告这两个异常,在main方法中判断相应的情况下触发异常,然后捕获异常,对它们进行处理。
4.给定下面代码: B. Test 2
public void example(){
try {
unsafe();
System.out.println("Test 1");
}catch(Exception e){
System.out.println("Test 2");
}
finally{
System.out.println("Test 3");
}
System.out.println("Test 4");
}
如果方法unsafe()运行正常,哪个结果不会被显示出来?
A. Test 1 B. Test 2 C. Test3 D. Test 4
5.编写应用程序,从命令行传入两个整型数作为除数和被除数。要求程序中捕获NumberFormatException 异常和ArithmeticException 异常在命令行输入不同的参数时能输出如下各种结果:
java A
总是被执行
Exception in thread "main" java.lang.ArrayIndexOutofBoundsException at
A.main(A.java:7)
java A 1 2
0
总是被执行
java A 1 3a
java.lang.NumberFormatException: 3a
at java.lang.Integer.parseInt(Integer.java:435)
at java.lang.Integer.parseInt(Integer.java:476)
at A.main(A.java:8)
总是被执行
java A 1 0
java.lang.ArithmeticException: / by zero at A.main(A.java:9)
总是被执行
6.编写一个检查给定的数字的数据类型是否为byte的程序,如果此数字超出byte数据类型表示的数的范围,则引发用户自定义的异常ByteSizeException,并显示相应的错误信息
步骤1:创建用户自定义异常类ByteSizeException
步骤2:在main方法中编写逻辑代码
步骤3:运行并测试
效果如图:
publicclass ByteSizeException extends Exception{
public ByteSizeException(){
super("此数字超出byte数据类型表示的数的范围");
}
}
publicclass Main {
publicstaticvoid foo(int number) throws ByteSizeException{
if(number > 127 || number < -128){
thrownew ByteSizeException();
}
}
publicstaticvoid main(String[] args) {
try{
foo(555);
}catch (ByteSizeException e) {
e.printStackTrace();
}
}
}