一、实验内容
1.判断下面的说法是否正确。如果错误,请说明原因
①一个数组中可以存放多个不同类型的值
错误原因:Java 数组必须存放相同数据类型的元素,创建数组时就确定了类型,只能存该类型或其子类对象,不能随意存放不同类型的值。
②数组下标通常是 float 型的
错误原因:数组下标只能是整数类型(byte、short、int、long),不能是浮点型,浮点型无法作为数组索引。
③二维数组其实质是一维数组的一维数组
正确原因:Java 二维数组本质是每个元素都是一维数组的一维数组,属于数组嵌套形式。
2.什么是异常?举出程序中常见的异常的种类?
异常(Exception) 是程序在运行过程中出现的非正常事件(如错误输入、文件找不到、空指针等),它会中断程序正常的指令流,导致程序崩溃终止。
简单理解:程序原本按步骤正常执行,遇到异常就会 “卡住报错”,如果不处理,程序会直接停止运行。
Java 中所有异常都继承自 Throwable 类,分为错误(Error)和异常(Exception) 两大类,我们日常说的异常主要指 Exception。
- 运行时异常(非受检异常,RuntimeException):程序编译正常,运行时才会触发,无需强制捕获处理,是最常遇到的异常。
- NullPointerException(空指针异常):调用了 null 对象的方法 / 属性,最常见的异常。示例:String str = null; str.length();
- ArrayIndexOutOfBoundsException(数组下标越界异常):访问数组时,下标超出数组的长度范围。示例:int[] arr = {1,2}; arr[5];
- ArithmeticException(算术异常):数学运算错误,最典型的是除零运算。示例:int a = 10 / 0;
- ClassCastException(类型转换异常):强制类型转换时,对象的实际类型不匹配。示例:把 String 强转为 Integer
- IllegalArgumentException(非法参数异常):调用方法时传入了不合法 / 错误的参数。
- IndexOutOfBoundsException(索引越界异常):集合、字符串等访问索引超出范围(数组越界是其子类)。
- 编译时异常(受检异常,Exception):编译阶段就会报错,Java 强制要求必须捕获 / 抛出处理。
- IOException(输入输出异常):文件操作、网络传输等 IO 相关错误,是一大类异常的父类。
- FileNotFoundException(文件未找到异常):打开 / 读取不存在的文件时触发(IOException 子类)。
- ClassNotFoundException(类未找到异常):程序运行时找不到指定的类文件。
- SQLException(数据库异常):操作数据库(连接、增删改查)时出现的错误。
- ParseException(解析异常):字符串转日期、数字等格式解析失败。
3. 运行例 6-1 到例 6-10。
例 6-1:编写一个应用程序,求 Fibonacci 数列的前 10 个数。
Fibonacci 数列的定义为:F1 = F2 = 1;当 n ≥ 3 时,Fn = Fn+1 + Fn+2
运行结果:
例 6-2:编写一个应用程序,在屏幕上输出整型数组的各元素。
运行结果:
例题 6-3:使用对象数组示例。
运行结果:
例题 6-4:编写应用程序,进行数组名之间的复制。
运行结果:
例题 6-5:二维数组引用示例。
运行结果:
例题 6-6:使用多种构造方法创建一个字符串并输出字符串。
运行结果:
例题 6-7:改变字符串的内容。
运行结果:
例题 6-8:枚举类型的使用示例。
运行结果:
例题 6-9:从键盘上输入圆的半径,求圆的面积。
运行结果:
例题 6-10:SimpleDateFormat 类使用示例。
运行结果:
4. Java中异常处理有什么优点?
5.在 Java 中,throw 与 throws 有什么区别?它们各自用在什么地方?
6. try-catch-finally 语句的执行顺序是怎样的?
7.运行例题 6-11 到例题 6-14。
例题 6-11:捕获异常使用示例。
运行结果:
例题 6-12:显示抛出异常使用示例。
运行结果:
例题 6-13:转移异常使用示例。
运行结果:
例题 6-14:自定义异常使用示例。
运行结果:
8. 看程序写结果。
(1)下面是一个排序的程序:
import java.io.;
public class Test56_Sort{
public static void main(String args[ ]){
int[] a={42,99,5,63,95,36,2,69,200,96};
System.out.println("排序前的数据序列:");
ShowArray(a);
Sort(a);
System.out.println("排序后的数据序列:");
ShowArray(a);
}
public static void Sort(int[] x){
int w;
for(int i=1; i<x.length; i++){
for(int j=0; j<x.length-1; j++)
if(x[j]>x[j+1]){
w=x[j]; x[j]=x[j+1]; x[j+1]=w;
}
/ if(i==1||i==2) ShowArray(x);
if(i==2) break; /
}
}
public static void ShowArray(int b[]){
for(int i=0; i<b.length; i++)
System.out.print(" "+b[i]);
System.out.println(" ");
}
}问题: 如果将方法Sort( )中的一对注释符(/ */)去掉,程序输出的结果是什么?
(2)写出以下程序的功能
public class ABC{
public static void main(String args[ ]){
int i , j ;
int a[ ] = { 9,7,5,1,3};
for ( i = 0 ; i < a.length-1; i ++ ) {
int k = i;
for ( j = i ; j < a.length ; j++ )
if ( a[j]>a[k] ) k = j;
int temp =a[i];
a[i] = a[k];
a[k] = temp;
}
for ( i =0 ; i<a.length; i++ )
System.out.print(a[i]+" ");
System.out.println( );
}
}(3)仔细阅读下面的程序,写出程序的执行顺序(写出编号):
public class UsingExceptions {
public static void main( String args[] ) {
try{
method1(); // 1
}catch(Exception e){
System.err.println(e.getMessage()); // 2
}
finally{
System.out.println("Program is end!"); // 3
}
}
public static void method1() throws Exception {
method2(); //4
}
public static void method2() throws Exception {
method3(); //5
}
public static void method3() throws Exception {
throw new Exception( "Exception thrown in method3" ); //6
}
}
评论