《Java语言程序的设计》答案.docx

上传人:b****6 文档编号:8032415 上传时间:2023-01-28 格式:DOCX 页数:12 大小:19.96KB
下载 相关 举报
《Java语言程序的设计》答案.docx_第1页
第1页 / 共12页
《Java语言程序的设计》答案.docx_第2页
第2页 / 共12页
《Java语言程序的设计》答案.docx_第3页
第3页 / 共12页
《Java语言程序的设计》答案.docx_第4页
第4页 / 共12页
《Java语言程序的设计》答案.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

《Java语言程序的设计》答案.docx

《《Java语言程序的设计》答案.docx》由会员分享,可在线阅读,更多相关《《Java语言程序的设计》答案.docx(12页珍藏版)》请在冰豆网上搜索。

《Java语言程序的设计》答案.docx

《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

原因:

由于子类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();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1