《Java语言程序设计》答案.docx
- 文档编号:8675859
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:20
- 大小:24.21KB
《Java语言程序设计》答案.docx
《《Java语言程序设计》答案.docx》由会员分享,可在线阅读,更多相关《《Java语言程序设计》答案.docx(20页珍藏版)》请在冰豆网上搜索。
《Java语言程序设计》答案
中国石油大学(北京)远程教育学院
期末考试
《Java语言程序设计》
学习中心:
___姓名:
___学号:
__
关于课程考试违规作弊的说明
1、提交文件中涉嫌抄袭内容(包括抄袭网上、书籍、报刊杂志及其他已有论文),带有明显外校标记,不符合学院要求或学生本人情况,或存在查明出处的内容或其他可疑字样者,判为抄袭,成绩为“0”。
2、两人或两人以上答题内容或用语有50%以上相同者判为雷同,成绩为“0”。
3、所提交试卷或材料没有对老师题目进行作答或提交内容与该课程要求完全不
一、题型
简答题,4题,每题15分,共60分;编程题,2题,每题20分,共40分
二、题目
共两套题,学号末尾数单号学生做第一套,学号末尾数双号学生做第二套题
第一套题
一、简答题
1什么是多态性?
方法的重载和覆盖有何区别?
阅读下列代码,指出其中存在的重载和覆盖,写出输出结果是什么?
解释为什么这样输出?
(15分)
classC1
{
publicvoidf(){
System.out.println("C1.f");
}
}
classC2extendsC1
{
publicvoidf(){
System.out.println("C2.f");
}
}
classC3{
publicvoidg(C1one){
System.out.println("g(C1)");
one.f();
}
publicvoidg(C2two){
System.out.println("g(C2)");
two.f();
}
}
publicclassMain1
{
publicstaticvoidmain(String[]args){
C1one=newC2();
C3three=newC3();
three.g(one);
}
}
答:
1.多态性是指允许不同类的对象对统一消息做出响应。
多态包括参数化多态和包含多态。
多态性语言具有灵活、抽象、行为共享、代码共享等优势,很好地解决了应用程序函数同名问题。
重载是指同一个类中有多个同名的方法,但这些方法有着不同的参数,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。
覆盖是指子类可以覆盖父类的方法,同样的方法会在子类和父类中有着不同的变现形式。
即重载是一个类的多态性表现,而覆盖是子类和父类的一种多态性表现。
class C1
{
publicvoid f(){
System.out.println("C1.f");
}
}
class C2 extends C1
{
publicvoid f(){
System.out.println("C2.f");//覆盖,子类C2重写了父类C1中的f()方法
}
}
class C3{
publicvoid g(C1 one){
System.out.println("g(C1)");
one.f();
}
publicvoid g(C2 two){//重载,根据传入参数不同,C3实现不同的g()方法
System.out.println("g(C2)");
two.f();
}
}
publicclass Main1
{
publicstaticvoid main(String[] args){
C1 one = new C2();
C3 three = new C3();
three.g(one);
}
}
输出:
g(C1)
原因:
由于子类C2的f()方法与父类C1的方法同名,因此C2的方法会覆盖C1的方法。
在执行C1one=newC2()语句时,会调用C1类的构造函数,因此three.g(one)语句会调用传入参数为C1的g()方法,输出g(C1)。
而由于实际创建的是C2类的方法,后面的方法调用都会调用子类C2的方法,因此输出C2.f。
2、请用自己的语言介绍throw/throws有什么联系和区别?
在程序中应如何使用?
另外谈谈final、finally的区别和作用,必须举例说明用法。
(15分)
答:
若某个方法可能会发生异常,但不想在当前方法中处理这个异常,则可以使用throws、throw关键字在方法中抛出异常。
throw关键字通常用于方法体中,并且抛出一个异常对象,程序在执行到throw语句时立即终止,它后面的语句都不执行。
throws关键字通常被应用在声明方法时,用来指定方法可能抛出的异常,多个异常可以使用逗号分隔,使用throws关键字将异常抛给上一级后,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。
/*
* 在类Main中创建pop()方法,在该方法中抛出Exception异常,在主方法中调用该方法,并实现异常处理
*/
publicclass Main{ //创建类
staticvoid pop() throws Exception{
//定义方法并抛出异常
inta=1/0;//除数为0
}
publicstaticvoid main(String[] args){//主方法
try {
pop(); //调用pop()方法
} catch (Exception e){
System.out.println("pop()方法抛出的异常");//输出异常信息
}
}
}
/*
* 使用throw关键字直接在程序中抛出异常
*/
publicclass Main{
publicstaticvoid main(String[] args){
inta =1;
if(a==1){
thrownew NumberFormatException();
} else {
System.out.println(a);
}
}
}
final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖和类不可被继承。
Finally作为异常处理的一部分,只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定被执行。
/*
* 类Main被声明为final,所以不能被继承,所有方法都不能被重写。
*finally中的代码一定会被执行,即使程序被return中。
*/
publicfinalclass Main{
publicstaticvoid main(String[] args){
Main m = new Main();
try {
thrownew NullPointerException();
} catch (NullPointerException e){
System.out.println("程序抛出了异常");
} finally {
System.out.println("执行了finally语句块");
}
}
}
3、编写一个描述学生基本情况的类,属性包括姓名,学号,语文成绩,数学成绩和英语成绩,方法包括信息输出,设置姓名和学号,设置三门课程成绩,计算总成绩和平均成绩。
在main方法中对方法进行测试(15分)
答:
publicclass Main{
private String number,name;
privatedoubleChinese,Math,English;
public Main(String a,String b,doublec,doubled,doublee){//有参构造函数
number=a;
name=b;
Chinese=c;
Math=d;
English=e;
}
publicvoid setName(String name){//设置姓名
this.name=name;
}
publicvoid setNumber(String num){//设置学号
this.number=num;
}
publicvoid setChinese(doublescore){//设置语文成绩
this.Chinese=score;
}
publicvoid setMath(doublescore){//设置数学成绩
this.Math=score;
}
publicvoid setEnglish(doublescore){//设置英语成绩
this.English=score;
}
public StringgetNumber(){//获取学号
returnnumber;
}
public StringgetName(){
returnname;
}
publicdouble getChinese(){
returnChinese;
}
publicdouble getMath(){
returnMath;
}
publicdouble getEnglish(){
returnEnglish;
}
publicdouble getSum(){//计算总成绩
return getChinese()+getMath()+getEnglish();
}
publicdouble getAverage(){//计算平均成绩
return getSum()/3;
}
publicvoid show(){//信息输出
System.out.println("姓名:
"+getName());
System.out.println("学号:
"+getNumber());
System.out.println("语文成绩:
"+getChinese());
System.out.println("语文成绩:
"+getMath());
System.out.println("语文成绩:
"+getEnglish());
}
publicstaticvoid main(String[] args){
Main s1 = new Main("12213","sname",85,82,98);//调用有参构造函数初始化
s1.setChinese(95);//设置语文成绩
s1.show();//输出所有信息
System.out.println("总成绩:
"+s1.getSum()+" 平均分:
"+String.format("%.2f", s1.getAverage()));//平均分结果保留两位小数
}
}
4、Java中实现多线程有几种方式?
这几种方式有什么区别?
然后采取其中一种方式设计一个线程例子,在例子中构造4个线程对象实现对同一数据类对象进行操作(数据初始值为0),其中线程对象1对数据执行+10的操作,线程对象2对数据执行+20的操作,对象3对数据执行乘以3的操作,线程对象4对数据执行除以4的操作,,要求考虑线程同步,保证数据操作的正确性。
要求提供程序代码以及运行结果截图(15分)
答:
四种方式:
继承Thread类,重写其中的run方法,最后调用其start方法,开启新的线程来执行重写的run方法。
实现Runnable接口实现里面的run方法,将该实现类的对象传入Thread中,调用Thread的start方法,开启新的线程来执行Runnable接口实现类的run方法。
实现Callable接口实现里面的call方法,将该实现类的对象传入FutureTask对象中,再将FutureTask对象传入Thread中,调用Thread的start方法,开启新的线程来执行Callable接口实现类的call方法。
Future接口实现类对象=ExecutorService接口实现类对象即线程池对象.submit(Callable接口实现类对象),以上使用线程池来实现多线程。
四种方式的区别:
相比于继承Thread类,实现Runnable接口,Callable可以避免Java单继承带来的局限性;Runnable,Callable接口的实现类可以被多个线程共享,实现了代码的复用。
继承Thread类和实现Runnable方法都是实现run方法,没有返回值,而另外两种都要实现Callable接口的call方法,有返回值。
二、编程题
1、编写一个图形用户界面程序,包含两个按钮,一个信息标签(label)和一个显示面板,两个按钮分别为“掷色子”和“移动”,在显示面板中显示一个小人(用小圆以及线绘制),随机设定小人的初始位置,当点击“掷色子”按钮,随机产生移动信息(上移,下移,左移,右移,移动几步),并显示在信息标签中,点击移动,按照产生的移动信息,让小人进行移动。
要求提供完整程序代码以及运行结果截图(20分)
答:
importjava.awt.*;
importjavax.swing.*;
publicclassJxxkextendsJFrame
{
privateJTabbedPanetabbedPane;
privateJLabellabel1,label2,label3;
privateJPanelpanel1,panel2,panel3;
publicJxxk()
{
super("选项卡窗口");setSize(400,300);
Containerc=getContentPane();
tabbedPane=newJTabbedPane();//创建选项卡面板对象
//创建标签
label1=newJLabel("第一个标签的面板",SwingConstants.CENTER);
label2=newJLabel("第二个标签的面板",SwingConstants.CENTER);
label3=newJLabel("第三个标签的面板",SwingConstants.CENTER);
//创建面板
panel1=newJPanel();
panel2=newJPanel();
panel3=newJPanel();
panel1.add(label1);
panel2.add(label2);
panel3.add(label3);
panel1.setBackground(Color.yellow);
panel2.setBackground(Color.blue);
panel3.setBackground(Color.green);
//将标签面板加入到选项卡面板对象上
tabbedPane.addTab("标签1",null,panel1,"Firstpanel");
tabbedPane.addTab("标签2",null,panel2,"Secondpanel");
tabbedPane.addTab("标签3",null,panel3,"Thirdpanel");
c.add(tabbedPane);
c.setBackground(Color.white);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicstaticvoidmain(Stringargs[])
{
Jxxkd=newJxxk();
}
2、编写一个班级推优(优秀学生干部)投票管理程序。
列出参与推优的学生名单(6名),可以勾选进行投票,要求每个参选学生前面有图标表示候选人的职务,每人可以投3票,每次投票后能够显示当前投票人数以及每名候选者得票数,图形化柱状图显示得票数,可以保存投票结果到文本文件。
要求提供完整程序代码以及运行结果截图(20分)
答:
publicclassVoteOperate{
privatePerson[]per={newPerson("小张",001,0),newPerson("小王",002,0),newPerson("小夏",003,0),
newPerson("丁丁",004,0),newPerson("刘强",005,0),newPerson("小赵",006,0)};
privateInputDatainput;
privatebooleanflag=true;
privateintsum;
privateinterrorVote;
publicVoteOperate()
{
this.input=newInputData();
while(flag)
{
++sum;
this.voteForCandidate();
}
this.printInfo();
this.getResulet();
}
publicclassVoteOperate{
privatePerson[]per={newPerson("小张",001,0),newPerson("小王",002,0),newPerson("小夏",003,0),
newPerson("丁丁",004,0),newPerson("刘强",005,0),newPerson("小赵",006,0)};
privateInputDatainput;
privatebooleanflag=true;
privateintsum;
privateinterrorVote;
publicVoteOperate()
{
this.input=newInputData();
while(flag)
{
++sum;
this.voteForCandidate();
}
this.printInfo();
this.getResulet();
}
《JAVA语言程序设计》试题6
一、填空题
1.定义类的保留字是(),定义接口的保留字是()。
2.线程的优先级在()至()之间,数值越大()。
3.构造方法是一种特殊的成员方法,构造方法名与()相同。
4.Java语言只允许单继承,指每个类只能有一个()。
5.Java源程序的扩展名是(),经过编译后的程序的扩展名是()。
二、选择题
1.关于选择结构下列哪个说法正确?
( )
A.if语句和else语句必须成对出现
B.if语句可以没有else语句对应
C.switch结构中每个case语句中必须用break语句
D.switch结构中必须有default语句
2.while循环和do…while循环的区别是:
( )
A.没有区别,这两个结构任何情况下效果一样
B.while循环比do…while循环执行效率高
C.while循环是先循环后判断,所以循环体至少被执行一次
D.do…while循环是先循环后判断,所以循环体至少被执行一次
3.关于for循环和while循环的说法哪个正确?
( )
A.while循环先判断后执行,for循环先执行后判断。
B.while循环判断条件一般是程序结果,for循环的判断条件一般是非程序结果
C.两种循环任何时候都不可以替换
D.两种循环结构中都必须有循环体,循环体不能为空
4.下列修饰符中与访问控制无关的是 ( )
A.private B.public
C.protectedD.final
5.void的含义:
( )
A.方法没有返回值 B.方法体为空
C.没有意义 D. 定义方法时必须使用
6.return语句:
( )
A.只能让方法返回数值 B.方法都必须含有
C.方法中可以有多句return D.不能用来返回对象
7.关于对象成员占用内存的说法哪个正确?
( )
A.同一个类的对象共用同一段内存
B、同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间
C.对象的方法不占用内存
D.以上都不对
8.下列说法哪个正确?
A.不需要定义类,就能创建对象
B.对象中必须有属性和方法
C.属性可以是简单变量,也可以是一个对象
D、属性必须是简单变量
9.下列说法哪个正确?
( )
A、一个程序可以包含多个源文件
B、一个源文件中只能有一个类
C、一个源文件中可以有多个公共类
D、一个源文件只能供一个程序使用
10.关于方法main()的说法哪个正确?
( )
A.方法main()只能放在公共类中
Bmain()的头定义可以根据情况任意更改
C.一个类中可以没有main()方法
D.所有对象的创建都必须放在main()方法中
11.构造函数何时被调用?
( )
A、创建对象时 B、类定义时
C、使用对象的方法时 D、使用对象的属性时
12. 抽象方法:
( )
A、可以有方法体
B、可以出现在非抽象类中
C、是没有方法体的方法
D、抽象类中的方法都是抽象方法
13.关于继承的说法正确的是:
( )
A、子类将继承父类所有的属性和方法。
B、子类将继承父类的非私有属性和方法。
C、子类只继承父类public方法和属性
D、子类只继承父类的方法,而不继承属性
14.关于构造函数的说法哪个正确?
( )
A、一个类只能有一个构造函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java语言程序设计 Java 语言程序设计 答案