第1章 面向对象的开发方法概述
1.面向对象的软件开发有哪些优点?
[答案]l 把软件系统看成是各种对象的集合,这更接近人类的自然思维方式。
l 软件需求的变动往往是功能的变动,而功能的执行者——对象一般不会有大的变 化。这使得按照对象设计出来的系统结构比较稳定。 l 对象包括属性(数据)和行为(方法),对象把数据以及方法的具体实现方式一起 封装起来,这使得方法和与之相关的数据不再分离,提高了每个子系统的相对独立 性,从而提高了软件的可维护性。
l 支持封装、抽象、继承和多态,提高了软件的可重用性、可维护性和可扩展性。 2.在软件系统中,为什么说一个孤立的不对外提供任何服务的对象是没有意义的? 开发软件系统的目的,就是为了让它提供特定服务。从使用者的角度出发,整个软件系统就是一个服务提供者。大的系统由多个子系统组合而成。在系统内部,每个子系统(对象或对象的组合)也都是服务提供者,它们为其它子系统或者所属的大系统提供服务,各个系统之间通过发送消息来互相获得服务。因此,一个孤立的不对外提供任何服务的系统是没有任何意义的。
3.列举一些现实生活中的例子,来说明什么是依赖关系、什么是聚集关系,以及什么是关联关系。
依赖关系:人依赖食物;电视机依赖电;理发师依赖剪刀和吹风机;鱼依赖水 聚集关系:电脑由显示器、主机和键盘等聚集而成; 关联关系:公司和员工;银行和客户;老公和老婆
4.列举一些现实生活中的例子,来说明什么是封装,什么是接口。
封装:电脑主机的组件被封装在机箱内;电视机的内部构件也被封装在大壳子内
接口:电脑的键盘上的按键是电脑向人提供的接口;电脑上的USB插口是向移动硬盘提供的接口;电脑上的光盘驱动器是向光盘提供的接口。 5.抽象的最主要的特征是什么? 抽象是指从特定角度出发,从已经存在的一些事物中抽取我们所关注的特性,形成一个新的事物的思维过程。抽象是一种由具体到抽象、由复杂到简洁的思维方式。 6.在建立对象模型时,要经历哪些抽象思维过程? (1)从问题领域的事物到软件模型中对象的抽象 (2)从对象到类的抽象 (3)从子类到父类的抽象
7.类就是程序员自定义的类型,这句话对吗? [答案] 对的。
对象模型中的类可看作是开发人员自定义的数据类型,Java虚拟机的运行时环境封装了把自定义的数据类型映射到计算机的内置数据类型的过程,使得开发人员不必受到计算机的内置数据类型的限制,对任意一种问题领域,都可以方便的根据识别对象、再进行分类(创建任意的数据类型)的思路来建立对象模型。
8.小王本来体重70Kg,经过减肥,体重降到45Kg,试从这个问题领域中识别对象、类、属性、行为、状态,和状态变化。
对象:小王;类:人;属性:体重;行为:减肥
状态:减肥前状态:小王体重70Kg;减肥后状态:小王体重45Kg 状态变化:减肥行为使得小王的体重发生了变化
9.在UML框图中,哪些框图描述了系统的动态结构,哪些框图描述了系统的静态结构? 状态转换图、时序图和协作图则构成了系统的动态结构;用例图、类框图、组件图
1
和部署图等四个图形,构成了系统的静态结构; 第2章 第一个 Java应用
1.把一个类放在包里有什么作用? 把类放到特定的包中,有三大作用: (1)能够区分名字相同的类。(2)有助于实施访问权限控制。 (3)有助于划分和组织Java应用中的各个类。
2.JavaDoc文档是不是为软件的终端用户提供的使用指南? [答案]不是
Java类通过JavaDoc文档来对外公布自身的用法,JavaDoc文档是基于HTML格式的帮助文档。JavaDoc文档主要是供Java开发人员看的。
3.对于com.abc.dollapp.AppMain类,使用以下命令进行编译,编译出来的.class文件位于什么目录下?
java –d C:\\classes –sourcepath C:\\src C:\\src\\com\\abc\\dollapp\\AppMain.java [答案] C:\\classes\\com\\abc\\dollapp\\AppMain.java
4.对于以上编译出来的AppMain类,以下哪个java命令能正确地运行它? a) java C:\\classes\\com\\abc\\dollapp\\AppMain.class b) java –classpath C:\\classes AppMain
c) java –classpath C:\\classes\\com\\abc\\dollapp AppMain d) java –classpath C:\\classes com.abc.dollapp.AppMain 5.以下哪个main()方法的声明能够作为程序的入口方法? a) public static void main()
b) public static void main(String[] string) c) public static void main(String args) d) static public int main(String[] args) e) static void main(String[] args)
6. 假定以下程序代码都分别放在MyClass.java文件中,哪些程序代码能够编译通过?a)import java.awt.*; package myPackage; class MyClass {}
b)package myPackage; import java.awt.*; class MyClass{}
c) /*This is a comment */ package myPackage; import java.awt.*; public class MyClass{} 7.对于以下Myprog类,运行命令―java Myprog good morning‖,将会得到什么打印结果? public class Myprog{
public static void main(String argv[]){ System.out.println(argv[2]);}}
[答案] 将抛出java.lang.ArrayIndexOutOfBoundsException异常 8.下面哪些是Java的关键字? a) default b) NULL c) String d) throws e) long f) true
2
10.下面哪些是合法的Java标识符?
a) #_pound b) _underscore c) 5Interstate d) Interstate5 e) _5_ f) class
第 3章 数据类型和变量1.对于以下程序,运行―java Abs‖,将得到什么打印结果? public class Abs{ static int a=0x11; static int b=0011; static int c='\'; static int d=011;
public static void main(String args[]){ System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); } }
[答案] 打印以下内容: 17 9 17 9
2.以下哪段程序能正确编译通过? a) char a='a';char b=1; char c=08; b) int a='a';
c) long a='\? '; d) char a='\%u0FF '; e) char d=\
3.下面哪段代码能编译通过? a) short myshort = 99S;
b) String name = 'Excellent tutorial Mr Green'; c) char c = 17c; d) int z = 015;
4.字符―A‖的Unicode编码为65。下面哪些代码正确定义了一个代表字符―A‖的变量? a) char ch = 65; b) char ch = '\\65';
c) char ch = '\A'; d) char ch = 'A'; e)char ch = \
5.以下代码共创建了几个对象? String s1=new String(\ String s2=new String(\ String s3=s1; String s4=s2; 2个对象
6.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? public class Test {
3
static int myArg = 1;
public static void main(String[] args) { int myArg;
System.out.println(myArg); }}
[答案] 编译出错,main()方法中的myArg局部变量没有被初始化。
7.对于以下程序,运行―java Mystery Mighty Mouse‖,得到什么打印结果? public class Mystery {
public static void main(String[] args) { Changer c = new Changer(); c.method(args);
System.out.println(args[0] + \ static class Changer { void method(String[] s) { String temp = s[0]; s[0] = s[1]; s[1] = temp; }}}
[答案] 打印:Mouse Mighty
8.对于以下程序,运行―java Pass‖,得到什么打印结果? public class Pass{ static int j=20;
public static void main(String argv[]){ int i=10;
Pass p = new Pass(); p.amethod(i);
System.out.println(i); System.out.println(j);}
public void amethod(int x){ x=x*2;
j=j*2;} }
[答案] 打印:10 40
第 4章 操作符1.以下哪些程序代码能够编译通过? a) int i=0; if(i) {
System.out.println(\}
b) boolean b1=true; boolean b2=true; if(b1==b2) {
System.out.println(\
4
c) int i=1; int j=2;
if(i==1|| j==i)
System.out.println(\d) int i=1; int j=2;
if(i==1 &| j==2)
System.out.println(\
2.运行以下程序,得到什么打印结果? System.out.println( 1 >>> 1); System.out.println( -1 >> 31); System.out.println( 2 >> 1); System.out.println( 1 << 1); [答案] 打印:0 -1 1 2
3.以下temp变量的最终取值是什么? long temp = (int)3.9; temp %= 2; [答案] 1
4.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? if (5 & 7 > 0 && 5 | 2) System.out.println(\[答案] 不能编译通过
5.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? int output=10; boolean b1 = false;
if((b1==true) && ((output+=10)==20)){ System.out.println(\ }else{
System.out.println(\[答案] 打印:Not equal! 10
6.以下代码能否编译通过,假如能编译通过,运行时得到什么打印结果? int output=10; boolean b1 = false;
if((b1=true) && ((output+=10)==20)){ System.out.println(\ }else{
System.out.println(\ } [答案] 打印:We are equal 20 7.对于以下声明:
String s1=new String(\ String s2=new String(\ String s3=new String(); 下面哪个是合法的操作? a) s3=s1 + s2; b) s3=s1-s2;
5