收藏 分销(赏)

Java程序的设计课后练习答案.docx

上传人:二*** 文档编号:4451755 上传时间:2024-09-23 格式:DOCX 页数:57 大小:75KB 下载积分:5 金币
下载 相关 举报
Java程序的设计课后练习答案.docx_第1页
第1页 / 共57页
本文档共57页,全文阅读请下载到手机保存,查看更方便
资源描述
《Java程序设计》课后练习答案 第一章 Java概述 一、选择题 1. ( A )是在Dos命令提示符下编译Java程序的命令,( B )是运行Java程序的命令。 A. javac B. java C. javadoc D. javaw 2. ( D )不是Java程序中有效的注释符号。 A. // B. /* */ C. /** */ D. */ */ 3. ( B )不是Java语言的特点。 A. 面向对象 B. 自动检查语法错误 C. 跨平台 D. 解释执行 4. Java编译器会将Java程序转换为( C ) A. 可执行代码 B. 目标代码 C. 字节码 D. 机器代码 5. Java源文件的扩展名是(D ) A. .class B. .jar C. .jav D. .java 二、简答题 1、 Java的跨平台的含义是什么?为什么Java可以跨平台? Java语言的一个非常重要的特点就是平台无关性。它是指用Java编写的应用程序编译后不用修改就可在不同的操作系统平台上运行。Java之所以能平台无关,主要是依靠Java虚拟机(JVM)来实现的。JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。 Java编程人员在编写完Java程序后,Java编译器将Java源代码文件编译后生成字节码文件(一种与操作系统无关的二进制文件)。字节码文件通过Java虚拟机(JVM)里的类加载器加载后,经过字节码校验,由解释器解释成当前电脑的操作系统能够识别的目标代码并最终运行。以下图展示了Java程序从编译到最后运行的完整过程。 2、 简述Java语言的特点 Java具有以下特点: 1)、 简单性 Java语言的语法规则和C语言非常相似,只有很少一部分不同于C语言,并且Java还舍弃了C语言中复杂的数据类型(如:指针和结构体),因此很容易入门和掌握。 2)、 可靠性和安全性 Java从源代码到最终运行经历了一次编译和一次解释,每次都有进行检查,比其它只进行一次编译检查的编程语言具有更高的可靠性和安全性。 3)、 面向对象 Java是一种完全面向的编程语言,因此它具有面向对象编程语言都拥有的封装、继承和多态三大特点。 4)、 平台无关和解释执行 Java语言的一个非常重要的特点就是平台无关性。它是指用Java编写的应用程序编译后不用修改就可在不同的操作系统平台上运行。Java之所以能平台无关,主要是依靠Java虚拟机(JVM)来实现的。Java编译器将Java源代码文件编译后生成字节码文件(一种与操作系统无关的二进制文件)。字节码文件通过Java虚拟机(JVM)里的类加载器加载后,经过字节码校验,由解释器解释成当前电脑的操作系统能够识别的目标代码并最终运行。下图展示了Java程序从编译到最后运行的完整过程。 5)、 分布式 分布式包括数据分布和操作分布,而Java支持WWW客户机/服务器计算模式,因此也支持这两种分布式。 6)、 多线程 Java在两方面支持多线程。一方面,Java环境本身就是多线程的。若干个系统线程运行负责必要的无用单元回收,系统维护等系统级操作;另一方面,Java语言置多线程控制,可以大大简化多线程应用程序开发。如果操作系统本身不支持多线程,Java的多线程特性可能就表现不出来。 三、综合编程题 1、 请编写一个简单的Java程序能够输出“这是我的第一个Java程序”。(注意为程序添加合适的注释和文档注释)。 /** * 第一个java程序 */ public class Demo { /** * main方法,程序的起点 */ public static void main (String[] args) { //向控制台输出 System.out.println ("这是我的第一个Java程序"); } } 第二章 Java语法基础 一、选择题 1. 下面哪个单词是Java语言的关键字( B )? A. c2 c X. }# f% W3 O9 @$ @7 cDouble B. this C. string D. bool 2. 下面属于Java关键字的是( D )。 A. NULL B. IF C. Do D. goto 3. 在启动Java应用程序时可以通过main( )方法一次性地传递多个参数。如果传递的参数有多个,可以用空格将这些参数分割;如果某一个参数本身包含空格,可以使用(B)把整个参数引起来。 A. 单引号 B. 双引号 4. 下面哪个是Java语言中正确的标识符( BD )。 A. 5x B. $x C. abc D. 5. Java语言中,下列标识符错误的是( D )。 A. _* A, \/ A" |% labc B. abc C. ABC D. 5abc 6. 在Java中,整型常量不可以是( A )。 A. ! r; \* z& V' D0 T0 `) _double B. Long C. int D. byte 7. 在Java中,不属于整数常量的是( D )。 A. : n" h: R- C+ D100 B. 100L C. 0x100A D. 6.0f 8. 下面哪个语句能定义一个字符变量chr( B )。 A. char chr=’abcd’; B. char chr=’\uabcd’; C. char chr=”abcd”; D. char chr=\uabcd; 9. 下面哪个是对字符串s1的不正确定义( CD )。 A. String s1=”abcd”; B. String s1; C. 2 V2 X2 U0 F4 \* x) String s1=‘abcd\0’; D. String s1=”\abcd”; 10. 下面哪个围是char型的取值围( C )。 A. -256 ~ 255 B. - (2^15) ~ (2^15)-1 C. \u0000’ ~ ‘\uffff’ D. 0~32767 11. 下面哪条语句不能定义一个float型的变量f1( ABD )。 A. - y" c! B& Q$ @) m' W- pfloat f1= 3.1415E10 B. float f1=3.14 C. float f1=3.1415F D. f1=3.14F 12. 下列运算结果为float的是( C )。 A. 100/10 B. 100*10 C. 100.0+10 D. 100-10 13. 数组中可以包含什么类型的元素( D )。 A. int型 B. string型 C. 数组 D. 以上都可以 14. Java中定义数组名为xyz,下面哪项可以得到数组元素的个数( B )。 A. xyz.length( ) B. xyz.length C. len(xyz) D. ubound(xyz) 15. 下面哪条语句定义了3个元素的数组( A )。 A. int [ ] a={20,30,40}; B. int a [ ]=new int(3); C. int [3] array; D. int [ ] arr; 二、简答题 1、 Java有哪些基本的数据类型?写出这些基本数据类型所占用的最大空间(用字节描述)。 (1)数字型 (number),具体又分为: a.整型 (integers),整型又包括: ①字节整数 (byte, 8 bits) ②短整数 (short, 16 bits) ③整数 (int, 32 bits) ④长整数 (long, 64 bits) b.实型 (real numbers),具体又分为: ①单精度(float, 32 bits) ②双精度(double, 64 bits) (2)字符型 (char, 16-bit Unicode字符) (3)布尔型 (boolean)。 2、 说明Java字符编码的类型与特点。 Java字符编码的类型为Unicode,具有以下特点: (1)Unicode是16比特的字符编码,其支持当前世界上绝大多数的语言; (2)Unicode给每个字符提供了一个唯一的编码表示,不论是什么平台、程序或语言; (3)Windows系统(Windows 2000版本)、Java、XML、LDAP等已支持Unicode; (4)Unicode实现了ISO/IEC 10646标准; 3、 写出Java中六个常用的转义字符。 \b 退格 \t 制表符 \n 换行 (Newline) \r 回车 (Carriage return) \' 单引号 4、 下面的几个标示符哪些是正确的,哪些是错误的,如果是错误的,请说明原因。 MyClass, _isHis, 3JavaProgram, _$asdf, Java-Visual-Machine MyClass:正确,符合标识符的组成规则。 _isHis:正确,符合标识符的组成规则。 3JavaProgram:错误,因为第1个符号不能为数字。 _$asdf:正确,符合标识符的组成规则。 Java-Visual-Machine:错误,标识符不能为保留字。 5、 说出常量与变量的定义并举例说明。 常量是指程序执行过程中,值保持不变的量,类型划分如下: ø 整型常量 ø 实型常量 ø 布尔型常量 ø 字符型常量 ø 字符串常量 如整型常量:   起始 最大整数(正) 最大长整数(正) 举例 十进制 0,1~9 2147483647 07L 23, +567, -12,0,1234 八进制 0 7 77777L 034,0175, -0777L 十六进制 0x 0x7FFFFFFF 0x7FFFFFFFFFFFFFFFL 0xFF, 0x45L 变量是指在程序执行过程中,值可以改变的量,类型划分为:整型变量、实型变量、字符型变量、字符串变量、布尔变量等。如:int x=2,就定义了一个整型变量x并且赋值为2。 6、 什么是强制类型转换?并说明其运用场合。 显型类型转换是强制类型转换,它是一种窄化转换 (narrowing conversion),如: double a = 1.5; float b = a; System.out.println("b=" + b); 编译: "possible loss of precision" 数据精度丢失,数据丢失。 强制类型转换一般运用在 ø二元运算符的二个操作数类型不同 ø表达式值的类型与变量的类型不同 7、 描述Java程序的构成。如何判断Java程序的主类?下面的程序有哪些错误并改正,该程序的源代码应当保存为什么名字的文件? Public class MyClass{ Public static void main(){ System.out.printIn(“my name is …”); } System.out.printIn(“the end!”); } Java程序的主类中包含main(),而其它类中没有;该程序的源代码应当保存为MyClass.java。另外该程序中包含以下的错误: (1) Public的第一个字符应当小写; (2) 定界符“”应当改为""; (3) printIn应该为println\ (4) System.out.printIn(“the end!”); 代码应放在方法中 8、 结构化程序设计有哪三种基本流程?分别对应Java中的那些语句? 结构化程序设计有下面三种基本流程:顺序结构语句,条件选择语句,循环控制语句,跳转/转向语句。 条件选择语句对应Java中的if,if-else,嵌套的if-else,条件运算符,switch-case。 循环控制语句对应Java中的for,while,do-while语句。 跳转/转向语句对应Java中的contonue,break,return语句。 9、 在一个循环中使用break,continue,return的差别。 break: 跳出(中止)循环 continue: 结束本次循环 return: 方法返回 10、 数组的定义,特点与分类。如何进行数组的初始化? 数组的定义:数组是一组同类型的变量或对象的集合。 数组的特点:数组的类型可以是基本类型,或类和接口;数组中每个元素的类型一样;引用数组元素通过数组名[下标];数组下标(数组的索引)从0开始。数组是一种特殊的对象(Object),可以定义类型 (声明);创建数组 (分配存空间) ;释放 (Java虚拟机完成)。 数组分类:一维数组、多维数组。 第三章 面向对象的实现 一、 选择题 1. 在Java中,用package说明一个包时,该包的层次结构必须是( B )。 A. 与文件的结构一样 B. 与文件的目录层次一样 C. 与文件的类型一样 D. 与文件大小一样 2. 下列构造方法的调用方式中,正确的是( C )。 A. 按照一般方法调用 B. 由用户直接调用 C. 可通过new自动调用D. 被系统调用 3. int 型public成员变量MAX_LENGTH,该值保持为常数100,则定义这个变量的语句是( D )。 A. public int MAX_LENGTH=100 B. final int MAX_LENGTH=100 C. public const int MAX_LENGTH=100 D. public final int MAX_LENGTH=100 4. 在Java中,以下叙述不正确的是 ( B ) A. 构造方法名与类名一样。 B. 构造方法不是用来完成初始化的。 C. 构造方法由 new 操作调用,而不能被用户直接调用。 D. 构造方法没有返回类型。 5. 在Java中,下面的叙述哪个是不正确的?( D ) A. 类的静态方法可以在该类的对象被创建前调用 B. 类的静态方法不能访问该类的非静态方法 C. abstract 修饰符可以出现在类或方法的前面,但不能出现在变量之前 D. final 修饰符可以出现在类或变量之前,但不能出现在方法之前 6. 在Java里,下列选项( D )不是实现面向对象思想的机制。 A. 封装 B. 继承 C. 多态 D. 数据类型转换 7. 类Worker是类Person的子类,Worker构造方法中有一句"super( );",该语句是什么意思?( C ) A. 调用类Worker中定义的super()方法 B. 调用类Person中定义的super()方法 C. 调用类Person的构造函数 D. 语法错误 8. 给定Java程序,如下:编译运行Test.java,结果是( C )。 public class Test{ private static final int counter=10; public static void main(String[ ] args){ System.out.println(counter++); } } A. 10B.11 C.编译错误D. 运行时出现异常 9. 给定如下Java代码,编译时会在( D )出现错误。(只选择一项) class Parent{ } class Child extends Parent{ public static void main(String[ ] args){ Parent p1 = new Child( ); //第一行 Parent p2 = new Parent( ); //第二行 Child c1 = new Child( ); //第三行 Child c2 = new Parent( ); //第四行 } } A. 第一行 B. 第二行 C. 第三行 D. 第四行 10. 在Java中,某类方法使用下列( BC )访问修饰符修饰后,可以被其的子类访问。 A. private B. protected C. publicD. friendly 11. 在Java 语言中,如果你有下面的类定义: abstract class Shape{ abstract void draw(); } class Square extends Shape{ } 以下描述正确的是( B ) A. 一切成功编译 B. Shape可以编译,Square不能编译 C. Square可以编译,Shape不能编译 D. Square,Shape都不能编译 12. 分析下列Java代码: class A{ public static void main(String[ ] args){ method( ); } static void method( ){ System.out.println("Hello"); System.exit(0); System.out.println("good-bye"); } } 编译运行后,输出结果是( A )。 A. "Hello" B. "good-bye" C. "Hello"后面是"good-bye" D. 代码不能编译 13. 下表是final修饰符与变量、方法、类等一起作用的结果的对应表,但是对应关系存在错误,请选择正确的对应关系。( C ) 概念 作用 1 变量 A 不能再产生子类 2 方法 B 一旦赋值,就不能更改 3 类 C不能在子类中覆盖 A. 1-A 2-B 3-C B. 1-C 2-A 3-B C. 1-B 2-C 3-A D. 1-C 2-B 3-A 14. 有以下程序: public class ConstOver { public ConstOver (int x, int y, int z) { } } 下面哪个方法重载了上面的ConstOver构造方法?( B ) A. protected int ConstOver ( ){ } B. private ConstOver (int z, int y, byte x) { } C. public object ConstOver (int x, int y, int z) { } D. public void ConstOver (byte x, byte y, byte z) { } 15. 有以下程序: class BaseClass { private float x = 1.0f ; public float getVar() ( return x;) } class Subclass extends BaseClass { private float x = 2.0f; // insert code here } 下面哪个方法加到程序中的“//insert code here”位置是有效的重定义父类的方法。( B ) A. protected float getVar ( ){ return x;} B. public float getVar( ) { return x;} C. protected float double getVar( ) { return x;} D. public float getVar(float f) { return f;} 16. 指出下列程序运行的结果( B ) public class Example{ String str = new String("good"); char[ ] ch = {'a','b','c'}; public static void main(String[ ] args){   Example ex=new Example( );   ex.change(ex.str,ex.ch);   System.out.print(ex.str + " and ");   System.out.print(ex.ch); } public void change(String str, char ch[ ]){   str = "test ok";   ch[0] = 'g'; } } A. good and abc B. good and gbc C. test ok and abc D. test ok and gbc 17. 下列哪些语句关于存回收的说明是正确的? ( B ) A. 程序员必须创建一个线程来释放存; B. 存回收程序负责释放无用存; C. 存回收程序允许程序员直接释放存; D. 存回收程序可以在指定的时间释放存对象。 18. 创建一个名为“MyClass.java”的文件,该文件中只有一个可被整个工程中的所有类访问的类,那么该类的正确声明应为:( C ) A. private class MyClass extends Object B. class TestClass extends Object C. public class MyClass D. public class TestClass 19. 下列叙述中,错误的是 ( A ) A. 部类的名称与定义它的类的名称可以一样 B. 部类可用abstract修饰 C. 部类可作为其他类的成员 D. 部类可访问它所在类的成员 20. 用于在子类中调用被重写的父类方法的关键字是 ( B ) A. this B. super C. This D. Super 21. 下面程序输出结果是 ( A ) public class Delta { static boolean foo(char c) { System.out.print(c); return true; } public static void main( String[] argv ) { int i =0; for ( foo('A'); foo('B')&&(i<2); foo('C')){ i++ ; foo('D'); } } } A. ABDCBDCB B. ABCDABCD C. 编译错误 D. 运行时异常 22. 下列( B )修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问。 A. privateB. 无修饰符 C. public D. protected 23. 给出下列代码,如何使成员变量m 被方法fun( )直接访问? ( C ) class Test{ private int m; public static void fun( ){ ... } } A. 将private int m 改为protected int m B. 将private int m 改为 public int m C. 将private int m 改为 static int m D. 将private int m 改为 int m 24. 已知有下列类的说明,则下列哪个语句是正确的? ( A ) public class Test{ private float f = 1.0f; int m = 12; static int n = 1; public static void main(String[ ] args){ Test t = new Test( ); } } A. t.f; B. this.n; C. Test.m; D. Test.f; 25. 下列代码的执行结果是 ( A ) public class Test{ public void aMethod( ) { static int i = 0; i++; System.out.println(i); } public static void main(String[ ] args){ Test test = new Test( ); test.aMethod( ); } } A. 编译错误 B. 0 C. 1 D. 运行成功,但不输出 26. 若特快订单是一种订单,则特快订单类和订单类的关系是( C ) A. 使用关系 B. 包含关系 C. 继承关系 D. 无关系 27. 下列代码中,将引起一个编译错误的行是( D ) 1)public class Test{ 2) int m,n; 3) public Test( ) { } 4) public Test(int a) {m=a;} 5) public static void main(String[ ] args){ 6) Test t1,t2; 7) int j, k; 8) j = 0; k = 0; 9) t1 = new Test(); 10) t2 = new Test(j,k); 11) } 12)} A. 第3行 B. 第5行 C. 第6行 D. 第10行 28. 下列叙述中,错误的是( D ) A. 父类不能替代子类 B. 子类能够替代父类 C. 子类继承父类 D. 父类包含子类 二、 程序阅读题 1、 写出以下程序的结果: public class Test {     private static void printArray(int[] arr)   {         for(int i=0;i< arr.length;i++)             System.out.print(arr[i]+”,”);         System.out.println(“\n”);     }     private static void changeValue(int value) {         value*=2;     }     private static void changeValue(int[] arr) {             for(int i=0;i<arr.length;i++)                 arr[i]*=2;     }    public static void main (String[] args) {    int[] arr={1,2,3,4,5};    changeValue(arr[0]);    printArray(arr);    changeValue(arr);    printArray(arr);     } } 运行结果: 1,2,3,4,5, 2,4,6,8,10, 2、 指出以下程序的错误,并改正:   public class Main {       public static final A obj=null;       public static void main(String[] args) {         obj=new A();       }   }   class A{   } 错误:final的对象不能改变。 3、 指出以下程序的错误,并改正:   public class Test {       public static void main(String[] args) {           MyClass obj=new MyClass();           obj.Info+=”,World!”;           System.out.println(obj.Info);       }   }   class MyClass  {          public String Info=”Hello”;          public MyClass(String Info)           {              this.Info=Info;           }   } 错误: MyClass obj=new MyClass();找不到匹配的构造方法。 4、 指出下面程序的错误,并改正:   abstract class Animal  {   public abstract  void saySomething()    {       System.out.println(“你想说什么就说吧!”);       }   }   class Dog extends Animal {   public void saySomething() {       System.out.println(“我现在有了第二职业:捉耗子!”);       }   }   public class Test {      public static void main (String[] args) {           Animal ani=new Dog();            ani.saySomething();   } } 错误:public abstract void saySomething()抽象方法不能有方法体。 三、 简答题 1、 简述继承、方法重写和抽象类如何支持多态性?(略) 2、 解释什么是方法重载和重定义,并举例说明他们的作用。(略) 3、 说明抽象类与接口的区别。(略) 4、 什么是垃圾回收,它是如何工作的?什么是finalize()?(略) 5、 举例说明this关键字的作用?(略) 6、 举例说明java中枚举类型的用法。(略) 第四章 异常和异常处理 一、选择题 1. 以下( A )和( C )是Throwable的直接子类。 A. Error B. NullPointerException C. Exception D. Assert 2. 能单独和finally块一起使用的块是( A ) A. try B. catch C. throw D. throws 3. 下列异常类中,在多重catch中同时使用时( C )异常类的catch块应该最后列出? A. NullPointerException B. ArithmeticException C. Exception D. ArrayIndexOutOfBoundsException 4. 程序读入用户输入的一个值,要求创建一个自定义的异常,如果输入值大于10,使用throw语句显式地引发异常,异常输出信息为"something wrong!",语句为( C )。 A. if (i>10) throw Exception("something wrong!"); B. if (i>10) throw Exception e ("something wrong!"); C. if (i>10) throw new Exception("something wrong!"); D. if (i>10) throw new Exception e ("something wrong!"); 5. 分析下列Java代码: class A{ public static void main(String[ ] args){ method( ); } static void method( ){ try{ System.out.println("Hello"); System.exit(0); }finally{ System.out.println("good-bye"); } } } 编译运行后,输出结果是(A ) A. Hello B. good-bye C. Hello D. 代码不能编译 good-bye 6. 关于捕获错误的语法try-catch-finally的下列描述正确的是( C )。 A. try必须和catch搭配使用 B. try可以单独使用 C. try-finally可以搭配使用 D. 在try块后如果定义了finally,则不能再定义catch块 7. 在Java 中,假定有一个包含引起异常(不是一个RuntimeException)的代码的方法,用什么方式告诉方法的调用者要捕获该异常。( B ) A. throw Exception B. throws Exception C. new Exception D. 不用特别指定 8. 考虑下列JAVA代码: class A{ public static void main(String[ ] args){ try{ System.out.println("Hello,World!"); } } } 这段代码错误的原因是( A )。 A. 没有catch和finally块 B. 没有抛出异常的代码不能出现在try代码块 C. 如果没有catch块而使用try,main( )会总是抛出异常 D. class A没有throws IOException 9. 考虑一下代码,编译运行之后,会( D ) String s=null; System.out.println(s.charAt(0)); A. 输出null B. 没有输出 C. 编译错误 D. 编译成功,但是运行时报NullPointerException异常 10. 研究下面的Java代码: public class testException{ public static void main(String[ ] args){ int a[ ]={0,1,2,3,4}; int sum=0; try{ for(int i=1;i<6;i++) sum=sum+a[i]; System.out.println("sum=" + sum); }catch(A
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服