Java面向对象编程习题总结.docx
- 文档编号:30753221
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:21
- 大小:20.75KB
Java面向对象编程习题总结.docx
《Java面向对象编程习题总结.docx》由会员分享,可在线阅读,更多相关《Java面向对象编程习题总结.docx(21页珍藏版)》请在冰豆网上搜索。
Java面向对象编程习题总结
第一章面向对象开发方法概述
1.面向对象的软件开发有哪些优点?
1)把软件系统看成是各种对象的集合,这更接近人类的自然思维方式。
2)软件需求的变动性往往是功能的变动,而功能的执行者——对象,一般不会有多大的变化,比结构化更稳定。
3)对象包括属性和行为,对象把数据及方法的具体实现方式一起封装起来,使得方法与之相关的数据不再分析,提高了每个子系统的相对对立性,从而提高软件的可维护性。
4)支持封装,抽象,继承和多态。
提高了软件的可重用性,可维护性和可扩展性。
2.在软件系统中,为什么说一个孤立的不对外提供任何服务的对象是没有意义的?
1)每个对象都具有特定的功能,相对于其他对象而言,它的功能就是为其他对象提供的服务。
2)从使用者角度出发,整个软件系统就是一个服务的提供者。
3)在系统内部,每个子系统也都是服务的提供者,它们其他子系统提供服务。
4)因此说一个孤立的部队为提供任何服务的系统是美欧任何意义的。
3.列举一些现实生活中的例子,来说明什么是依赖关系、什么是聚集关系,以及什么是关联关系。
1)关联关系:
关联是指类之间的特定对应关系,可以分为单向关联和双向关联,也可以分为一对一关联、一对多关联以及多对多关联。
A关联B,是指ClassA与ClassB之间存在特定的对应关系。
举例如学生和老师,订单和客户。
2)依赖关系:
类之间的调用关系。
A依赖B,ClassA访问ClassB提供的服务。
如Panel与Shape的关系。
3)聚集关系:
是整体与部分之间的关系
4.列举一些显示生活中的例子,来说明什么是封装,什么是接口。
1)接口:
对象中所有向使用者公开的方法的声明构成了对象的接口。
2)封装:
隐藏对象的属性和实现细节,仅仅对外公开接口。
3)接口的优点:
a.提高系统之间松散耦合b.提高了系统的可扩展性。
4)封装的有点:
a.便于使用者正确、方便地理解和使用系统,防止使用者错误修改系统的属性。
b.有助于建立各个系统之间的松耦合关系,提高系统的独立性。
c.提高软件的可重用性,没个系统都是一个相对独立的整体,可以在多种环境中得到重用。
d.降低构建大型系统的风险,即使整个系统不成功,个别的独立子系统有可能依然有价值。
5.抽象的最主要特征是什么?
抽象是指从特定角度出发,从已经存在的一些事物中抽取我们所关注的特性,形成一个新的事物的思维过程。
6.在建立对象模型时,要经历哪些抽象思维过程?
1)从问题领域的事物到软件模型中对象的抽象。
2)从对象到类的抽象。
3)从子类到父类的抽象
7.类就是程序员自定义的类型。
这种说法是否正确?
不正确,类是一组具有相同属性和行为的对象的抽象。
类及类的关系构成了对象模型的主要内容。
开发人员需要根据先识别对象,然后再进行分类(创建任意的数据模型)的思路来建立对象模型。
8.小王本来体重70kg,经过减肥,体重降到45kg,试从这个问题领域中识别对象、类、属性、状态和状态的变化。
1)类:
人。
2)对象:
小王。
3)属性:
体重。
4)状态:
70kg。
5)状态的变化:
小王的减肥行为导致体重下降。
9.在UML图中哪些框图描述了系统的动态结构,哪些框图描述了系统的静态结构?
1)用例图、类框图、组件图、部署图构成了系统的静态模型。
2)状态转换图、时序图、协作图则构成了系统的动态模型。
第二章第一个Java应用
1.把一个类放在包里有什么用?
答:
把类分包的作用:
(1)能够区分名字相同的类
(2)有助于实施访问权限控制
(3)有助于划分和组织Java应用中的各个类
2.JavaDoc文档是不是为软件的终端用户提供的使用指南?
答:
不是的,JavaDoc文档是供Java开发人员阅读的,他们通过JavaDoc文档来了解其他开发人员开发的类的用法。
Java开发人员应该养成经常阅读JavaDoc文档的良好习惯。
3.对于com.abc.dollapp.AppMain类,使用以下命令进行编译,编译出来的.class文件位于什么目录下?
java–dC:
\classes–sourcepathC:
\srcC:
\src\com\abc\dollapp\AppMain.java
答:
将会存放在C:
\classes\com\abc\dollapp\下。
4.对于以上编译出来的AppMain类,以下哪个java命令能正确运行它?
(a)javaC:
\classes\com\abc\dollapp\AppMain.class
(b)java–classpathC:
\classesAppMain
(c)java–classpathC:
\classes\com\abc\dollappAppMain
(d)java–classpathC:
\classescom.abc.dollapp.AppMain
答:
(b)
5.以下哪些main()方法的声明能够作为程序的入口方法?
(a)publicstaticvoidmain()
(b)publicstaticvoidmain(String[]string)
(c)publicstaticvoidmain(Stringargs)
(d)staticpublicintmain(String[]args)
(e)staticvoidmain(String[]args)
答:
(b),主函数必须以publicstaticvoid形式存在,参数必须为String数组形式。
6.假定以下程序代码都分别放在MyClass.java文件中,哪些程序代码能够编译通过?
(a)importjava.awt.*;
packageMypackage;
classMyClass{};
(b)packageMyPackage;
importjava.awt.*;
classMyClass{};
(c)/*Thisiscomment*/
packageMyPackage;
importjava.awt.*;
publicclassMyClass{};
答:
(c),程序顺序必须按照import,package,class走,源文件必须以public类型的类命名。
7.对于以下Myprog类,运行命令”javaMyproggoodmorning”,将会得到打印结果?
publicclassMyprog
{
publicstaticvoidmain(Stringargv[])
{
System.out.println(argv[2]);
}
}
答:
打印结果为空。
argv[0]=“good”,argv[1]=“morning”。
8.下面哪些是Java的关键字?
(a)default
(b)NULL
(c)String
(d)throws
(e)long
(f)true
答:
(a),(d),(e),(f),java中所有的关键字都是小写。
9.当AppMain类的main()方法创建了5个Doll对象时,运行时数据区的数据如何分布的?
参考2.4节的图2-13,画出此时运行时数据区的状态图。
运行时数据区(内存)
Java栈区
执行main()方法的主线程的方法调用栈
局部变量beibei
局部变量jingjing
局部变量huanhuan
局部变量yingying
局部变量nini
堆区
Doll实例
name:
贝贝
Doll实例
name:
晶晶
Doll实例
name:
欢欢
Doll实例
name:
迎迎
Doll实例
name:
妮妮
方法区
Doll类型信息
AppMain类型信息
(包含main()方法信息)
10.下面哪些是合法的Java标识符?
(a)#_pound
(b)_underscore
(c)5Interstate
(d)Interstate5
(e)_5_
(f)class
答:
(b),(d),(e)标识符命名规则如下:
(1)标识符首字母必须为字母、下划线“_”、美元“$”、人民币“¥”
(2)标识符由数字、大写字母、小写字母、下划线以及美元等组成
(3)不能把关键字和保留字作为标识符
(4)标识符没有长度的限制
(5)标识符是大小写敏感的
第三章数据类型和变量
1.对于以下程序,运行“javaAbs”,将得到什么打印结果?
publicclassAbs
{
staticinta=0x11;//十六进制
staticintb=0011;//八进制
staticintc='\u0011';//十六进制数据的Unicode字符编码
staticintd=011;//八进制
/**
*@paramargs
*/
publicstaticvoidmain(String[]args)
{
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println("d="+d);
}
}
答:
输出如下
a=17
b=9
c=17
d=9
2.以下哪段代码能正确编译通过?
(a)chara=‘a’;
charb=1;
charc=08;
(b)inta=‘a’;
(c)longa=’\u00FF’;
(d)chara=‘\u0FF’;
(e)chard=“d”;
答:
(b)、(c)能通过编译。
(a)中“charc=08”将int赋值给char需要部分强制转换,“charc=8”就正确;(d)中unicode编码错误,java采用的是UCS-2编码,共16位;(e)字符赋值是使用单引号,字符串String赋值时才使用双引号。
3.下面哪些代码能编译通过?
(a)shortmyshort=99S;
(b)Stringname=‘ExcellenttutorialMrGreen’;
(c)charc=17c;
(d)intz=015;
答:
(d)可以编译通过。
(a)中char赋值给short需要强制转换;(b)中String类型赋值用双引号;(c)中int赋值给char需要部分强制转换。
4.字符“A”的Unicode字符编码为65.下面哪些代码正确定义了一个代表字符“A”的变量?
(a)Charch=65;
(b)Charch=’\65’;
(c)Charch=’\u0041’;
(d)Charch=’A’;
(e)Charch=”A”
答:
(c)、(d)可以得到”A”。
(b)的输出为5,其他无法编译通过。
5.以下代码共创建了几个对象?
Strings1=newString(“hello”);
Strings2=newString(“hello”);
Strings3=s1;
Strings4=s2;
答:
共创建了2个对象。
栈区4个局部变量分别引用了堆区的2个实例,而2个实例又引用了工作区的同一个类。
6.以下代码能否编译通过?
假如能编译通过,运行时将得到什么打印结果?
classTest
{
staticintmyArg=1;
publicstaticvoidmain(String[]args)
{
IntmyArg;
System.out.println(myArg);
}
}
答:
无法编译通过,因为局部变量myArg声明之后Java虚拟机就不会自动给它初始化为默认值,若在使用前未被初始化,编译会报错。
7.对于以下程序,运行“javaMysteryMightyMouse”,将得到什么打印结果?
publicclassMystery
{
publicstaticvoidmain(String[]args)
{
Changerc=newChanger();
c.method(args);
System.out.println(args[0]+""+args[1]);
}
staticclassChanger
{
voidmethod(String[]s)
{
Stringtemp=s[0];
s[0]=s[1];
s[1]=temp;
}
}
}
答:
打印结果为“MightyMystery”
8.对于以下程序,运行“javaPass”,将得到什么打印结果?
publicclassPass
{
staticintj=20;
publicstaticvoidmain(String[]args)
{
inti=10;
Passp=newPass();
p.amethod(i);
System.out.println("i="+i);
System.out.println("j="+j);
}
publicvoidamethod(intx)
{
x*=2;
j*=2;
}
}
答:
打印结果是
i=10
j=40
其中“intx”是传参,作用域仅在amethod之中。
第四章操作符
1.以下哪些程序代码能够编译通过?
(a)
inti=0;
if(i)
{
System.out.println("hello");
}
(b)
booleanb1=true;
booleanb2=true;
if(b1==b2)
{
System.out.println("Sotrue");
}
(c)
inti=1;
intj=2;
if(i==1||j==i)
{
System.out.println("ok");
}
(d)
inti=1;
intj=2;
if(i==1&|j==i)
{
System.out.println("ok");
}
答:
(b)、(c)能编译通过。
(a)中int不能作为boolean出现,(d)中不能出现&|该操作符。
2.运行以下程序,将得到什么打印结果?
System.out.println(-1>>>1);
System.out.println(-1>>1);
System.out.println(2>>1);
System.out.println(1<<<1);
答:
>>>是逻辑右移位操作符,也称不带符号右移位操作符,在移位的过程中二进制数开头填0;>>是右移位操作符,也称带符号右移位操作符,舍弃末尾,在开头填符号位;<<<操作符不存在;
11111111111111111111111111111111
-1>>>1
01111111111111111111111111111111
11111111111111111111111111111111
-1>>1
11111111111111111111111111111111
00000000000000000000000000000010
2>>1
00000000000000000000000000000001
2147483647
-1
1
3.以下temp变量最终取值是什么?
longtemp=(int)3.9;
temp%=2;
答:
取值为1。
4.以下代码能否编译通过?
假如能编译通过,运行时将得到什么打印结果?
if(5&7>0&&5|2)System.out.println("true");
答:
int型不能作为boolean型出现。
5.以下代码能否编译通过?
假如编译通过,运行时将得到什么打印结果?
intoutput=10;
booleanb1=false;
if((b1==true)&&((output+=10)==20))
{
System.out.println("Weareequal"+output);
}
else
{
System.out.println("Notequal!
"+output);
}
答:
Notequal!
10
6.以下代码能否编译通过?
假如能编译通过,运行时将得到什么打印结果?
intoutput=10;
booleanb1=false;
if((b1==true)&((output+=10)==20))
{
System.out.println("Weareequal"+output);
}
else
{
System.out.println("Notequal!
"+output);
}
答:
Notequal!
20
7.对于以下声明:
Strings1=newString(“Hello”);
Strings2=newString(“there”);
Strings3=newString();
下面哪些是合法的操作?
(a)s3=s1+s2;
(b)s3=s1-s2;
(c)s3=s1&s2;
(d)s3=s1&&s2;
答:
(a)是合法操作。
除了“+”能用于字符串的连接以外,其他操作符(如“-”、“&”、“&&”等)都不支持String类型的操作元。
第五章流程控制
1.运行以下代码,将得到什么打印结果?
inti=3;
intj=0;
doublek=3.2;
if(i if(i==j) System.out.println(i); else System.out.println(j); else System.out.println(k); 答: 0 2.以下代码能否编译通过? 假如能编译通过,运行时将得到什么打印结果? inti=4; switch(i) { default: System.out.println("default"); case0: System.out.println("zero"); break; case1: System.out.println("one"); case2: System.out.println("two"); } 答: 可以编译通过,打印结果是: default zero 分析: default可以放在任何位置上,一旦符合一个case即从头执行到尾,不再判断case。 3.以下哪些是合法的 (a)inti;for(i=5,intj=10;i<10;j--){} (b)inti,j;for(i=0,j=10;i<10,j>0;i++,j--){} (c)inti,k;for(i=0,k=9;(i<10&&k>0);i++,k--){} (d)inti,j;for(i=0;j=10;i<10;i++,j--){} 答: (a)for语句中int定义要放在开头。 编译不通过。 (b)循环判断语句不可以用逗号连接。 编译不通过。 (c)合法。 (d)分号只能有2个。 4.运行以下代码,将得到什么打印结果? inti=1; switch(i) { default: System.out.println("default"); case0: System.out.println("zero"); break; case1: System.out.println("one"); case2: System.out.println("two"); } 答: 分析同1,运行结果如下: one two 5.以下哪些代码合法? (a)floatx=1; switch(x){ case1; System.out.println(“Gota1”); } (b)longx=1; switch(x){ case1; System.out.println(“Gota1”); } (c)bytex=1; switch(x){ case1/1; System.out.println(“Gota1”); } (d)intx=1; intc=1; switch(c){ casex; System.out.println(“Gota1”); } (e)shortx=1; switch(x){ case3.2/2; System.out.println(“Gota1”); } (f)shortx=1; switch(x){ case1,2,3; System.out.println(“Gota1”); } 答: 只有(c)是合法的。 6.以下代码能否编译通过? 假如能编译通过,运行时将得到什么打印结果? for(inta=0,b=0;a<2;b=++a,System.out.println("b="+b)) { System.out.println("a="+a); } 答: 可以通过编译,打印结果: a=0 b=1 a=1 b=2 7.以下代码能否编译通过? 假如能编译通过,运行时将得到什么打印结果? intx=0; one: while(x<10) { two: System.out.println(++x); if(x>3) breaktwo; } 答: 不能通过编译。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面向 对象 编程 习题 总结