阅读以下说明和JAVA 2代码,将应填入(n)处的字句写在对应栏内。[说明]以下程序为类类型的变量应用实例,通过异常处理检验了类CCircle的变量的合法性,即参数半径应为非负值。仔细阅读代码和相关注释,将程序补充完整。[JAVA代码]//定义自己的异常类class CCircleException extends Exception{}// 定义类 CCircleclass CCircle{private double radius;public void setRadius ( double r )

题目

阅读以下说明和JAVA 2代码,将应填入(n)处的字句写在对应栏内。

[说明]

以下程序为类类型的变量应用实例,通过异常处理检验了类CCircle的变量的合法性,即参数半径应为非负值。仔细阅读代码和相关注释,将程序补充完整。

[JAVA代码]

//定义自己的异常类

class CCircleException extends Exception

{

}

// 定义类 CCircle

class CCircle

{

private double radius;

public void setRadius ( double r ) (1)

{

if ( r<0 ) {

(2)

}

else

(3)

}

Public void show ( ) {

System. out. println ( "area="+3.14*radius*radius );

}

}

public class ciusample

{

public static void main ( String args[] )

{

CCircle cir=new CCircle( );

(4) {

cir. setRadius ( -2.0 )

}

(5)

{

System. out. println ( e+" throwed" ) ;

}

cir. show( ) ;

}

}


相似考题

2.阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。【说明】下面的Java程序演示了程序竞争资源(Mutex的实例对象)而引起程序死锁的一种例子。【Java程序】import java.applet.*;import java.awt.*;//此处声明一个互斥类class Mutex { }class A extends (1){private Mutex first,second;public A(Mutex f,Mutex s){first = f;second = s;}public void run(){//锁定first变量(2) (first){try{ //本线程挂起,等待重新调度Thread.sleep(1); //注意此处(1)不是小题序号}catch(InterruptedException e){}System. out. println("threadA got first mutex");(2) (second) //锁定second变量{ //do somethingSystem. out. println("threadA got second mutex");} //释放second变量} //释放first变量}}class B extends (1){private Mutex first,second;public B(Mutex f,Mutex s){(3) ;second = s;}public void run(){(2) (second) //锁定second变量{//do somethingtry{Thread.sleep(((int)(3*Math.random()))*1000);//本线程挂起,等待重新调度}catch(InterruptedException e){}System.out.println("threadB got second mutex");(2) (first) //锁定first变量{//do somethingSystem.out.println("threadB got first mutex");} //释放first变量} //释放second变量}}public class DeadlockExample{public static void main(String arg[]){Mutex mutexX = new Mutex();Mutex mutexY = new Mutex();AthreadA = new A(mutexX,mutexY);B threadB = new B (4);threadA.(5);threadB.start();}}

更多“阅读以下说明和JAVA 2代码,将应填入(n)处的字句写在对应栏内。[说明]以下程序为类类型的变量应用实例,通过异常处理检验了类CCircle的变量的合法性,即参数半径应为非负值。仔细阅读代码和相关注释,将程序补充完整。[JAVA代码]//定义自己的异常类class CCircleException extends Exception{}// 定义类 CCircleclass CCircle{private double radius;public void setRadius ( double r ) ”相关问题
  • 第1题:

    阅读下列Java程序和程序说明,将应填入(n)处的字句写在对应栏内。

    【说明】下面的程序先构造Point类,再顺序构造Ball类。由于在类Ball中不能直接存取类Point中的xCoordinate及yCoordinate属性值,Ball中的toString方法调用Point类中的toString方法输出中心点的值。在MovingBall类的toString方法中,super.toString调用父类Ball的toString方法输出类Ball中声明的属性值。

    public class Point

    {

    private double xCoordinate;

    private double yCoordinate;

    public Point 0 }

    public Point(ouble x, double y)

    {

    xCoordinate = x;

    yCoordinate = y;

    }

    public String toString()

    {

    return "( + Double.toString(Coordinate)+ ","

    + Double.toString(Coordinate) + ");

    }

    //other methods

    }

    public class Ball

    {

    (1); //中心点

    private double radius; //半径

    private String colour; ///颜色

    public Ball() { }

    public Ball(double xValue, double yValue, double r)// 具有中心点及半径的构造方法

    {

    center=(2);//调用类Point 中的构造方法

    radius = r;

    }

    public Ball(double xValue, double yValue, double r, String c)

    // 具有中心点、半径及颜色的构造方法

    {

    (3);//调用3个参数的构造方法

    colour = c;

    }

    public String toString()

    {

    return "A ball with center" + center, toString() + ", radius"

    + Double.toString(radius) + ", colour" + colour;

    }

    //other methods

    }

    public class MovingBall. (4)

    {

    private double speed;

    public MovingBall() { }

    public MovingBall(double xValue, double yValue, double r, String e, double s)

    {

    (5);// 调用父类Ball中具有4个参数的构造方法

    speed = s;

    }

    public String toString( )

    { return super, toString( ) + ", speed "+ Double.toString(speed); }

    //other methods

    }

    public class Tester{

    public static void main(String args[]){

    MovingBall mb = new MovingBall(10,20,40,"green",25);

    System.out.println(mb);

    }

    }


    正确答案:(1)private Point center (2)new Point (xValueyValue) (3)this(xValueyValuer) (4)extends Ball (5)super(xValueyValuerc)
    (1)private Point center (2)new Point (xValue,yValue) (3)this(xValue,yValue,r) (4)extends Ball (5)super(xValue,yValue,r,c) 解析:(1)private Point center
    Ball类以Point类的center对象作为私有成员。
    (2)new Point (xValue,yValue)
    用类Point中的构造方法Point构造Point类的center对象。
    (3)this(xValue,yValue,r)
    利用this指针调用本类的3个参数的重载构造方法。
    (4)extends Ball
    MovingBall类由Ball类扩展而来。
    (5)super(xValue,yValue,r,c)
    调用父类Ball中具有4个参数的构造方法:
    Ball(double xValue, double yValue, double r,String c)

  • 第2题:

    试题八(共15分)

    阅读以下说明和Java程序代码,将应填入(n) 处的字句写在答题纸的对应栏内。

    [说明]

    在下面的 Java 程序代码中,类SalesTicket 能够完成打印票据正文的功能,类HeadDecorator 与FootDecorator 分别完成打印票据的台头和脚注的功能。已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。这是票据的台头!这是票据正文!这是票据的脚注!------------------------这是票据的台头!

    这是票据的脚注!

    [Java程序代码]

    public class SalesTicket {

    public void printTicket() {

    System.out.println("这是票据正文!");

    }

    }

    public class Decorator extends SalesTicket{

    SalesTicket ticket;

    }

    }

    public class FootDecorator extends Decorator{

    public FootDecorator(SalesTicket t) {

    (2) ;

    }

    public void printTicket() {

    super.printTicket();

    System.out.println("这是票据的脚注!");

    }

    }

    public class Main {

    public static void main(String[] args) {

    T = new HeadDecorator( (3) );

    T. (4) ;

    System.out.println("------------------------");

    T = new FootDecorator( (5) );

    T.printTicket();

    }

    }

    public Decorator(SalesTicket t){

    ticket = t;

    }

    public void printTicket(){

    if(ticket != null)

    ticket.printTicket();

    }

    }

    public class HeadDecorator extends Decorator{

    public HeadDecorator(SalesTicket t) {

    (1) ;

    }

    public void printTicket() {

    System.out.println("这是票据的台头!");

    super.printTicket();


    正确答案:

     

  • 第3题:

    阅读以下说明、Java代码和HTML文档,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    当用户启动html浏览器并首次打开下面的HTML文档时,Java Applet小程序在显示面板上显示字符串“Welcome!”;当html页面被其他窗口

    遮挡后再次显示时,小程序在显示面板上显示“Welcome back!”。

    【Java代码】

    import javA.awt.*;

    import javA.applet;

    public class HelloApplet extends (1) {

    public void paim((2)){

    g.drawString(message,10,20);

    message="welcome back!”;

    }

    public void (3) (){

    message="Welcome!”;

    }

    private (4) message;

    }

    【HTML文档】

    <html>

    <head>

    <title>HTML Test HelloApplet Page</title>

    </head>

    <body>

    Test HelloApplet小程序<br>

    <applet

    codebase="."

    code="(5) "

    name="TestApplet"

    width="400"

    height="300"

    </applet>

    </body>

    </html>


    正确答案:(1)Applet (2)Graphics g (3)init (4)String (5)HelloApplet.Class
    (1)Applet (2)Graphics g (3)init (4)String (5)HelloApplet.Class 解析:本题考的是Java的小应用程序的基础知识,当使用网页浏览器打开题目中给出的 html文件时,应该加载Java源代码编译后生成的字节码,

    即java源文件对应的.class文件,题目中给出的可调用的公共类的类名为HelloApplet,因此,其对应的源文件和编译后的类文件应该为

    HelloApplet.java和HelloApplet.class,空(5)应该填写上HelloApplet. class;
    由于HelloApplet是一个小应用程序,所以应该继承小应用程序类Applet,第1空应填上Applet,根据私有变量message存储的数据是字符串

    ,所以其对应的类型应为String。题目中指明了当第一次显示页面时,显示的信息为“Welcome尸,而当首次调用小应用程序时,对小应用程序

    方法调用的顺序为先init(),后paint(),当html页面被其他窗口遮挡后再次显示时,小程序将再次调用paint()。所以空(3)为init(),空2应

    为paint方法填上参数,根据小应用程序接口的定义,空(2)应填上Graphics g。

  • 第4题:

    阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用DP1还是DP2。

    为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图9-6显示了各个类间的关系。

    这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是 Java语言实现,能够正确编译通过。

    【Java代码】

    //DP1.java文件

    public class DP1{

    static public void draw_a line(double x1,double y1,

    double x2,double y2){

    //省略具体实现

    }

    }

    //DP2.java文件

    public class DP2{

    static public void drawline(double x1,double y1,

    double x2,double y2){

    //省略具体实现

    }

    }

    //Drawing.java文件

    (1) public class Drawing{

    abstract public void drawLine(double x1, double y1, double x2, double y2);

    }

    //V1Drawing.java文件

    public class V1Drawing extends Drawing{

    public void drawLine(double x1, double y1, double x2, double y2){

    DP1.draw_a_line(x1,y1,x2,y2);

    }

    }

    //V2Drawing.java文件

    public class V2Drawing extends Drawing{

    public void drawLine(double x1,double y1,

    double x2, double y2)(//画一条直线

    (2);

    }

    }

    //Shape.java文件

    abstract public class Shape{

    abstract public void draw();

    private (3) _dp;

    Shape(Drawing dp){

    _dp=dp;

    }

    protected void drawLine(double x1,double y1,

    double x2, double y2){

    (4);

    }

    }

    //Rectangle.java文件

    public class Rectangle extends Shape{

    private double_x1,_x2,_y1,_y2;

    public Rectangle(Drawing dp,

    double x1,double y1,

    double x2,double y2){

    (5);

    _x1=x1;_x2=x2;

    _y1=y1;_y2=y2;

    }

    public void draw(){

    //省略具体实现

    }

    }


    正确答案:(1) abstract (2) DP2.drawline(x1x2y1y2) (3) Drawing (4) _dp.drawLine(x1y1x2y2)
    (1) abstract (2) DP2.drawline(x1,x2,y1,y2) (3) Drawing (4) _dp.drawLine(x1,y1,x2,y2) 解析:由类Drawing的drawLine()方法是abstract的,因此Drawing要么是接口,要么是抽象类,在此为抽象类,故空(1)应填abstract。
    空(2)是调用DP2系统的相应方法,可参照DP1的对应函数的函数体,但要注意参数不完全相同,应填DP2.drawline(x1,x2,y1,y2)。
    _dP属性是用来存储Drawing对象的,参照Shape的构造函数可确认这一点,空(3)应填 Drawing。
    Shape类的drawLine方法是通过调用Drawing对应的方法来实现所需要的功能,因此空(4)应填_dp.drawLine(x1,y1,x2,y2)。
    空(5)显然是基类构造函数,应填super(dp)。
    (5) super(dp)

  • 第5题:

    阅读以下说明、Java代码和HTML文档,将应填入(n)处的字句写在对应栏内。

    【说明】

    当用户启动html浏览器并首次打开下面的html文档时,Java Applet小程序在显示面板上显示字符串“欢迎您!”;当html页面被其他窗口遮挡后再次显示时,小程序在显示面板上显示“欢迎您回来!”

    [Java代码]

    import java.awt.*;

    import java.applet.*;

    public class HelloApplet extends (1) {

    public void paint( (2) ){

    g.drawString(message,10,20);

    message="欢迎您回来!";

    }

    public void (3) (){

    message="欢迎您!";

    }

    private (4) message;

    }

    [HTML文档]

    <html>

    <head>

    <title>HTML Test HelloApplet Page</title>

    </head>

    <body>

    Test HenoApplet 小程序<br>

    <applet

    codebase="."

    code="(5)"

    name="TestApplet"

    width="400"

    height="300"

    </applet>

    </body>

    </html>


    正确答案:(1)Applet
    (1)Applet 解析:Java语言规定所有的Applet程序的主类必须继承自类Applet。

  • 第6题:

    阅读以下说明和Java源程序,将应填入(n)处的字句写在答题纸的对应栏内。

    说明

    以下程序的功能是计算三角形、矩形和正方形的面积并输出。

    程序由5个类组成:AreaTest是主类,类Triangle、Rectangle和Square分别表示三角形、矩形和正方形,抽象类Figure提供了一个计算面积的抽象方法。

    程序

    public class AreaTest{

    public static void main(String args[]){

    Figure[]figures={

    new Triangle(2,3,3),new Rectangle(5,8), new Square(5)

    };

    for(int i=0;i<figures.1ength;i++){

    System.out.println(figures[i]+"area="+figures[i].getArea());

    }

    }

    }

    public abstract class Figure{

    public abstract double SetAJea();

    public class Rectangle extends (1) {

    double height;

    double width;

    public Rectangle(double height,double width){

    this.height=height;

    this.width=width;

    }

    public String toString(){

    return "Rectangle:height="+height+",width="+width+":";

    }

    public double getArea() { return (2);

    } } public class Square extends (3) {

    public Square(double width) {

    (4);

    }

    public String toString() {

    return "Square:width="+width+":";

    } } public class Triangle extends (5). {

    double la;

    double lb;

    double lc;

    public Triangle(double la,double lb,double lc) {

    this.la=la; this.lb=lb; this.lc=lc;

    public String toString(){

    return "Triangle: sides="+la+","+lb+","+lc+":";

    public double getArea() {

    double s=(la+lb+lc)/2.0;

    return Math.sqrt(s*(s-la)*(s-lb)*(s?1c));

    }

    }


    正确答案:(1)Figure (2)height*width (3)Rectangle (4)super(widthwidth) (5)FiguTe
    (1)Figure (2)height*width (3)Rectangle (4)super(width,width) (5)FiguTe 解析:本题以Java语言为载体,考查面向对象程序设计中的三个重要机制——继承、抽象类和动态绑定的应用。本题所解决的问题与试题6一样,有关的详细描述可参见试题6的分析。
    在Java语言中通过在类中定义抽象方法来创建一个抽象类,或者直接将一个类声明为抽象类。
    由于继承关系已经确定,所以第(1)、(3)、(5)空已经确定,分别为Figure、Rectangle和Figure。第(2)空应填height*widthn
    Java中有一个特殊的函数super,用于在派生类中调用其基类的构造函数。利用 super,我们可以借助Rectangle的带有2个参数的构造函数将正方形的边长width传递到Rectangle的height和width中,所以第(4)空应填super(width,width)。

  • 第7题:

    阅读以下说明和JAVA 2代码,填入(n)处的。

    [说明]

    以下JAVA程序实现了在接口interface iShape2D的定义和应用,仔细阅读代码和相关注释,将程序补充完整。

    [代码6-1]

    interface iShape2D //定义接口

    {

    (1)

    (2)

    }

    (3)//实现CRectangle类

    {

    int width, height;

    (4) CRectangle (int w,int h) {

    width=w;

    height=h;

    }

    public void area ( ){ //定义area( )的处理方式

    System. out.println ("area="+width*height);

    }

    }

    (5)//实现CCircle类

    {

    double radius;

    (6) CCircle (double r) {

    radius=r;

    }

    public void area ( ) { //定义area( )的处理方式

    System.out.println ("area="+pi*radius*radius);

    }

    }

    [代码6-2]

    public class app10_4

    {

    public static void main(String args[])

    {

    CRectangle rect=new CRectangle (5,10);

    rect.area ( ); //调用CRectangle类里的area ( ) method

    CCircle cir=new CCircle (2.0);

    cir.area ( ); //调用CCircl类里的area ( ) method

    }

    }


    正确答案:(1)final double pi=3.14; (2)abstract void area(); (3)class CRectangle implements iShape2D (4)public (5)class CCircle implements iShape2D (6)public
    (1)final double pi=3.14; (2)abstract void area(); (3)class CRectangle implements iShape2D (4)public (5)class CCircle implements iShape2D (6)public 解析:本题JAVA程序实现了接口interface iShape2D的定义和应用。(1)和(2)定义pi和面积函数area(),可从下文得到,它们位置可以互换。(3)定义Crectangle,继承iShape2D。(4)应该为public关键字。(5)定义CCircle,继承iShape2D。(6)应该为public关键字。

  • 第8题:

    阅读以下说明和Java以及HTML代码,将应填入(n)处的字句写在对应栏内。

    [说明]

    编写一个Applet程序,接受HTML文件传递的整数参数,根据该参数指定Applet中文本框的长度。编写对应的HTML文件运行这个Applet。

    [Java 代码]

    import java. applet.*;

    import java. awt.*;

    public class chuangdics extends (1)

    {

    TextField tf=new TextField ();

    int tfLength=0;

    public void init()

    {

    try

    {

    tfLength=Integer. parseInt( (2) ("length"));

    tf. setColumns (tfLength);

    add (tf);

    }

    catch (NumberFormatException nfe)

    {

    tf. (3) ("HTML 文件传人的参数格式错误。");

    add(tf);

    }

    }

    }

    [HTML 代码]

    <html>

    <head>

    <title>(4)</title>

    </head>

    <body>

    <hr>

    <applet code=chuangdics width=700 height=150>

    <param name=length value=20>

    (5)

    <hr>

    </body>

    </htmI>


    正确答案:(1)Applet (2)getParameter (3)setText (4)chuangdics (5)/applet>
    (1)Applet (2)getParameter (3)setText (4)chuangdics (5)/applet>

  • 第9题:

    阅读以下说明和Visual Basic代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    某绘图系统定义了一个抽象类IShape,现有三个类CPoint、CLine和CCircle,它们都具有IShape界面。相应的类图关系如图7-1所示。

    已知某第三方库已经提供了XCircle类,且完全满足CCircle图元显示时所需的功能。代码7-1是抽象类IShape的类模块内容,代码7-2实现了类CCircle的IShape界面,并使用了XCircle提供的显示功能。

    XCimle提供的显示功能方法接口为displayIt。

    【代码7-1】

    Public Color As Long

    Sub draw()

    '方法体不包括可执行语句

    End Sub

    Sub move(stepx As Single,stepy As Smgle)

    '方法体不包括可执行语句

    End Sub

    【代码7-2】

    (1)

    Private color As Long

    … ‘其他定义省略

    Private bridged As (2)

    Private Sub Class_Initialize ( )

    Set bridged=(3)

    End Sub

    Private Property (4) ( )As Long

    IShape_Color = color

    End Property

    Private Property (5) (ByVal newColor As Long)

    color=newColor

    End Property

    Private Sub IShape_draw ( ) '使用XCirele提供的显示功能

    (6)

    End Sub

    Private Sub IShape_move (stepx As Single, stepy As Single)

    … '省略描述

    End Sub


    正确答案:(1)Implemellts IShape (2)XCirc1e (3)New XCircle (4)Get IShspe_Co1or (5)Let IShspe_Co1or (6)bridSed.displayIt
    (1)Implemellts IShape (2)XCirc1e (3)New XCircle (4)Get IShspe_Co1or (5)Let IShspe_Co1or (6)bridSed.displayIt 解析:在VB中,抽象类模块只包含属性和方法的定义,而不包括任何可执行代码。本题目中定义的抽象类Ishape中定义了一个属性color、两个方法draw和move。
    在实现界面时,需要在有Ishape界面的类模块的说明段中添加一个Implements关键字,因此空(1)处应填入“Implemems IShape"。根据试题中的说明部分可知,类CCircle中要使用XCircle提供的显示功能,需声明XCircle的实例变量并生成和引用实例对象,因此空(2)处应填入“XCircle”,空(3)处填入“New XCircle”,空(6)处填入“bridged.displaylt”。
    由“color=newColor”可知,空(5)处所在的Property过程使CCircle的私有数据成员color取得外部设置的newColor值,因此空(5)填入“Let IShape Color"。
    同理由“IShape_Color=color”可知,空(4)处所在的Property过程使IShape_Color取得CCircle的私有数据成员color的值,因此空(4)填入“Get IShape Color”。

  • 第10题:

    第五题 阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
    【说明】
    以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物件 (Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。设计如图5-1所示类图。

    问题:5.1 【Java代码】
    interface Item{
    public void accept(Visitor visitor);
    public double getPrice();
    }

    class Book (1){
    private double price;
    public Book(double price){(2);}
    public void accept(Visitor visitor){ //访问本元素
    (3);
    }
    public double getPrice() {
    return price;
    }
    }
    //其它物品类略
    interface Visitor {
    public void visit(Book book);
    //其它物品的visit方法
    }

    class Cashier(4){
    private double totalForCart;
    //访问Book类型对象的价格并累加
    (5){
    //假设Book类型的物品价格超过10元打8折
    if(book.getPrice()<10.0){
    totalForCart+=book.getPrice();
    } else
    totalForCart+=book.getPrice()*0.8;
    }
    //其它visit方法和折扣策略类似,此处略

    public double getTotal() {
    return totalForCart;
    }
    }

    class ShoppingCart {
    //normal shopping cart stuff
    private java.util.ArrayListitems=new java.util.ArrayList<>();
    public double calculatePrice() {
    Cashier visitor=new Cashier();

    for(Item item:items) {
    (6);
    }
    double total=visitor.getTotal();
    return total;
    }
    public void add(Item e) {
    this.items.add(e);
    }
    }


    答案:
    解析:
    implements Item
    (2)this.price=price
    (3)visitor.visit(this)
    (4)implements Visitor
    (5)public void visit(Book book)
    (6)item.accept(visitor)

    【解析】

    这里考察的是访问者模式。其定义如下:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
    第一、四空为接口与实现,接口使用Interface,实现使用implements。第二空this表示类实例本身。第三空为访问本元素。第五空实现接口里面的方法。第六空调用accept方法。

  • 第11题:

    阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
    【说明】
    以下Java代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物件 (Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。设计如图5-1所示类图。



    【Java代码】
    interface Item{ public void accept(Visitor visitor); public double getPrice();}class Book (1){ private double price; public Book(double price){(2);} public void accept(Visitor visitor){ //访问本元素 (3); } public double getPrice() { return price; }}//其它物品类略 interface Visitor { public void visit(Book book); //其它物品的visit方法 } class Cashier(4){ private double totalForCart; //访问Book类型对象的价格并累加 (5){ //假设Book类型的物品价格超过10元打8折 if(book.getPrice()<10.0){ totalForCart+=book.getPrice(); } else totalForCart+=book.getPrice()*0.8; } //其它visit方法和折扣策略类似,此处略 public double getTotal() { return totalForCart; }} class ShoppingCart { //normal shopping cart stuff private java.util.ArrayListitems=newjava.util.ArrayList<>(); public double calculatePrice() { Cashier visitor=newCashier(); for(Item item:items) { (6); } doubletotal=visitor.getTotal(); return total; } public void add(Item e) { this.items.add(e); }}



    答案:
    解析:
    (1)implements Item
    (2)this.price=price
    (3)visitor.visit(this)
    (4)implements Visitor
    (5)public void visit(Book book)
    (6)item.accept(visitor)【解析】
    这里考察的是访问者模式。其定义如下:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作
    第一、四空为接口与实现,接口使用Interface,实现使用implements。第二空this表示类实例本身。第三空为访问本元素。第五空实现接口里面的方法。第六空调用accept方法

  • 第12题:

    阅读下列说明和 Java 代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    生成器( Builder)模式的意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。图 6-1 所示为其类图。



    阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    ???? 生成器(Builder)模式的意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。图5-1所示为其类图。

    ?

    【C++代码】

    #include

    #include

    using namespace std;
    class Product {
    private:?
    string partA, partB;
    public:?
    Product() {?? }? ?
    void setPartA(const string& s) { PartA = s;}
    ???? void setPartB(const string& s) { PartB
    = s;}? ?
    //? 其余代码省略
    };
    class Builder {
    public:? ? ??
    (1)??
    ;?
    virtual void buildPartB()=0;? ? ?
    (2)??
    ;
    };
    class ConcreteBuilder1 : public Builder {
    private:?
    Product*?? product;
    public:
    ConcreteBuilder1() {product = new Product();???? }
    void buildPartA() {????? (3)???? ("Component
    A"); }?
    void buildPartB() {????? (4)???? ("Component
    B"); }??
    Product* getResult() { return product; }
    //? 其余代码省略
    };
    class ConcreteBuilder2 : public Builder {? ??? ? ? ?
    /*??? 代码省略??? */
    };
    class Director {
    private:? ??
    Builder* builder;
    public:??
    Director(Builder* pBuilder) { builder= pBuilder;}? ??
    void construct() {
    ????????????????? (5)???? ;
    ?????????????? //? 其余代码省略? ?
    }??
    //? 其余代码省略
    };
    int main() {? ? ??
    Director* director1 = new Director(new ConcreteBuilder1());? ?
    director1->construct();? ? ??
    delete director1;? ? ?
    return 0;
    【Java代码】
    import jav(6)A.util.*;
    class Product {? ? ? ?
    private String partA;? ? ? ?
    private String partB;? ? ? ??
    public Product() {}? ? ??
    public void setPartA(String s) { partA = s; }? ? ? ?
    public void setPartB(String s) { partB = s; }
    }
    interface Builder {? ?
    public?????? (1)???? ;? ??
    public void buildPartB();? ? ??
    public?????? (2)???? ;
    }
    class ConcreteBuilder1 implements Builder {? ? ? ?
    private Product product;? ? ? ?
    public ConcreteBuilder1() { product = new Product();?? }? ? ? ??
    public void buildPartA() {????????
    (3)??
    ("Component A"); }
    public void buildPartB() {???? ????(4)?? ("Component B"); }? ? ??
    public Product getResult() { return product;}
    }
    class ConcreteBuilder2 implements Builder {?? ? ? ? ?
    //? 代码省略
    }
    class Director {? ? ? ?
    private Builder builder;? ? ? ?
    public Director(Builder builder) {this.builder = builder; }
    public void construct() {
    ? ? ? ? ? ? ? ? ? (5)???? ;
    ? ? ? ? ? ? ? //? 代码省略? ? ??
    }
    }
    class Test {? ? ??
    public static void main(String[] args) {
    ???????????????? Director director1 = new
    Director(new ConcreteBuilder1());
    ???????????????? director1.construct();? ? ? ??
    }


    答案:
    解析:
    (1)void buildPart A()
    (2) Product getResult()
    (3)product.setPartA
    (4)product.setPartB
    (5)builder.buildPartA();
    builder.buildPartB();
    Product p=builder.getResult();

  • 第13题:

    阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    下面代码里,instr是一个抽象类,它被两个子类wind和rain分别实现,而brass又继承了wind类,并覆盖了play方法。

    【程序】

    (1) class instr{

    (2) Void play();

    }

    class wind (3) instr{

    void play(){System.out.println("wind play!");}

    }

    class rain extends instr {

    void play(){System.out.println("rain play!");}

    }

    class brass extends (4) {

    void play(){System.out.println("brass play!"));}

    }

    public class music{

    static void tuneAll(instr e[]){

    for(int i=0;i<e.length;i++)

    e[i].play();

    }

    public (5) void main(String[]args){

    instr orch[]=new instr[3];

    int i=0;

    orch[i++]=new wind();

    orch[i++]=new rain();

    orch[i++]=new brass();

    tuneAll(orch);

    }

    }


    正确答案:(1)abstract (2)abstract (3)extends (4)wind (5)static
    (1)abstract (2)abstract (3)extends (4)wind (5)static 解析:本题考查了Java抽象类的定义、继承,以及主函数定义的一些相关知识。
    定义抽象类时只需在类标识符前加上关键字abstract即可,在Java语言中,抽象类中的方法也为抽象方法。因此,第(1)空与第(2)空的答案是abstract。
    题目要求类wind和rain是抽象类instr的子类,即类wind和rain都继承抽象类instr,在Java语言中,对抽象类的继承用关键字extends,如果不能确定,还可以往下看程序,就清楚了。因此,第(3)空应该填extends。
    又由于题目要求类brass继承类wind,第(4)空的答案也变得非常明显了,填写 wind。
    第(5)空所在的位置是对Java语言的主函数的定义,Java语言中主函数也和其他一些高级语言一样,是入口函数,它的声明规定用public static void main(String[]args){}这种结构。因此,第(5)空答案是static。

  • 第14题:

    阅读以下说明和JAVA2代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    以下程序实现了利用鼠标任意移动该圆形的位置,仔细阅读代码和相关注释,将程序补充完整。

    【代码6】

    import java.awt.*;

    import java.awt.event.*;

    public class CIUSAMPLE extends Frame. implements MouseMotionListener, MouseListener

    {

    static CIUSAMPLE frm=new CIUSAMPLE ();

    int x=70,y=60,posX=70,posY=60,dx,dy;

    public static void main ( String args[])

    {

    frm.setTitle ("Dragging a circle");

    frm.setSize ( 200,150 );

    (1)

    frm.addMouseMotionListener ( frm );

    frm. setVisible ( true );

    }

    public void mousePressed ( MouseEvent e )

    {

    (2)

    dy=e.getY () -posY;

    }

    public void mouseDragged ( MouseEvent e )

    {

    (3)

    y=e.getY () -dy;

    if ( dx>0 && dx<50 && dy>0 && dy<50 ) //如果指我落在正方形区域内

    {

    Graphics g=getGraphics ();

    (4)

    }

    }

    public void paint ( Graphics g )

    {

    g.setColor ( Color. pink ); // 设置绘图颜色为粉红

    g.fillOval ( x,y,50,50 ); //以基准点为图形的左上角绘出圆形

    (5)

    posY=y;

    }

    public void mouseMoved ( MouseEvent e ) { }

    public void mouseReleased ( MouseEvent e ) { }

    public void mouseEntered ( MouseEvent e ) { }

    public void mouseExited ( MouseEvent e ) { }

    public void mouseClicked ( MouseEvent e ) { }

    }


    正确答案:题目中的程序实现了利用鼠标任意移动该圆形的位置。分析代码可知:(1)实现了对鼠标位置的检测; (2)取得鼠标按下的点与基准点X方向的距离;(3)取得拖曳时的基准点的X坐标;(4)清空画面为背景颜色;(5)更新基准点的X坐标。 (1) frm.addMouseListener(frm); (2) dx=e.getX()-posX; (3) x=e.getX()-dx; (4) update(g); (5) posX=x;
    题目中的程序实现了利用鼠标任意移动该圆形的位置。分析代码可知:(1)实现了对鼠标位置的检测; (2)取得鼠标按下的点与基准点X方向的距离;(3)取得拖曳时的基准点的X坐标;(4)清空画面为背景颜色;(5)更新基准点的X坐标。 (1) frm.addMouseListener(frm); (2) dx=e.getX()-posX; (3) x=e.getX()-dx; (4) update(g); (5) posX=x;

  • 第15题:

    阅读以下说明和C++代码,填入(n)处。

    [说明]

    以下C++代码使用虚函数实现了同一基类shape派生出来的Class rectangle、Class triangle、Class circle实现了计算矩形、圆形面积的计算。仔细阅读以下代码,将(n)处语句补充完整。

    [代码5-1]

    include<iostream.h>

    define PI 3.14159

    class shape {//基类

    protected:

    (1);

    public:

    (2);

    (3);

    };

    [代码5-2]

    class rectangle: public shape {

    public:

    rectangle (int x2,int y2,int r2): (4) {};

    double area ( ) {return x*y; };

    };

    class circle: public shape {

    public:

    circle (int x3,int y3,int r3):(5){};

    double area ( ) {return r*r*PI; };

    };

    [代码5-3]

    void main ( )

    {

    rectangle r (10,20,0);

    circle c (0,0,30);

    shape (6);

    cout<<"长方形面积="<<s1->area ( ) <<endl;

    cout<<"圆形面积="<<s2->area ( ) <<endl;

    }

    [运行结果]

    长方形面积=200

    圆形面积=2827.43


    正确答案:(1)intxyr; (2)shape(int x1int y1int r1): x(x1)y(y1)r(r1){}; (3)double virtual area()=0; (4)shape(x2y2r2) (5)shape(x3y3r3) (6)*s1=&r*s2=&c;
    (1)intx,y,r; (2)shape(int x1,int y1,int r1): x(x1),y(y1),r(r1){}; (3)double virtual area()=0; (4)shape(x2,y2,r2) (5)shape(x3,y3,r3) (6)*s1=&r,*s2=&c; 解析:本题C++代码使用虚函数用同一基类shape派生出来的Class rectangle、Class triangle、Class circle实现了计算矩形、圆形面积的计算。各空实现的功能是:(1)x,y存储长与宽,r存储半径;(2)构造函数;(3)面积虚函数,旨在定义不同面积公式;(4)构造函数;(5)构造函数;(6)类变量定义,根据下文用到的变量可推知。

  • 第16题:

    阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    下面的程序先构造Point类,再顺序构造Ball类。由于在类Ball中不能直接存取类Point中的xCoordinate及yCoordinate属性值,Ball中的toString方法调用Point类中的toStrinS方法输出中心点的值。在MovingBsll类的toString方法中,super.toString调用父类Ball的toString方法输出类Ball中声明的属性值。

    【Java代码】

    //Point.java文件

    public class Point{

    private double xCoordinate;

    private double yCoordinate;

    public Point(){}

    public Point(double x,double y){

    xCoordinate=x;

    yCoordinate=y;

    }

    public String toStrthg(){

    return"("+Double.toString(xCoordinate)+","

    +Double.toString(yCoordinate)+")";

    }

    //other methods

    }

    //Ball.java文件

    public class Ball{

    private (1);//中心点

    private double radius;//半径

    private String color;//颜色

    public Ball(){}

    public Ball(double xValue, double yValue, double r){

    //具有中心点及其半径的构造方法

    center=(2);//调用类Point中的构造方法

    radius=r;

    }

    public Ball(double xValue, double yValue, double r, String c){

    //具有中心点、半径和颜色的构造方法

    (3);//调用3个参数的构造方法

    color=c;

    }

    public String toString(){

    return "A ball with center"+center.toString()

    +",radius "+Double.toString(radius)+",color"+color;

    }

    //other methods

    }

    class MovingBall (4) {

    private double speed;

    public MovingBall(){}

    public MoyingBall(double xValue, double yValue, double r, String c, double s){

    (5);//调用父类Ball中具有4个参数的构造方法

    speed=s;

    }

    public String toString(){

    return super.toString()+",speed"+Double.toString(speed);

    }

    //other methods

    }

    public class test{

    public static void main(String args[]){

    MovingBall mb=new MovingBall(10,20,40,"green",25);

    System.out.println(mb);

    }

    }


    正确答案:(1) Point center (2) new Point(xValueyValue) (3) this(xValueyValuer) (4) extends Ball (5) super(xValueyValuerc)
    (1) Point center (2) new Point(xValue,yValue) (3) this(xValue,yValue,r) (4) extends Ball (5) super(xValue,yValue,r,c) 解析:在类Ball的有参数构造函数中,对成员变量center通过调用Point类的构造方法初始化,而center在类Ball中尚未声明。结合注释可得空(1)是将center变量声明为Point对象引用,故空(1)应填Point。空(2)是调用Point类的构造函数,根据题意,此处应将xValue和yValue作为参数调用类Point的有参数构造函数,故空(2)应填new Point(xValue,yValue)。
    根据注释,空(3)是调用类Ball的有3个参数的构造方法,而其所在方法本身就是类Ball的一个构造方法,因此可用this来调用自身的构造方法,故空(3)应填this(xValue,yValue,r)。
    根据题述“在MovingBall类的toString方法中,super.toString调用父类Ball的toString方法输出类Ball中声明的属性值”,可知类MovingBall是类Ball的子类,因此空(4)应填extends Ball。
    根据注释,空(5)是调用父类Ball中具有4个参数的构造方法,通过super关键字实现,故空(5)应填super(xValue,yValue,r,c)。

  • 第17题:

    阅读以下说明和Java代码,回答问题1和问题2,将解答填写在对应栏内。

    【Java代码】

    class usethread implements (1) {

    int num

    usethread(int n){

    num=n;

    }

    public void (2) {

    for(int i=0;i<3;i++)

    System.out.println("running:"+num);

    System.out.println("finished:"+num);

    }

    public class multhread{

    public static void main(String args[]) (3) InterruptedException{

    Thread m1=new Thread(new usethread(1));

    Thread m2=new Thread(new usethread(2));

    m1.start();

    m2.start();

    m1.join();

    m2.join();

    }

    }

    【问题1】

    补充完整上面Java代码中(n)处。

    【问题2】

    写出上面Java代码运行的结果。


    正确答案:(1)Runnable (2)run() (3)throws 程序输出结果: running:1 running:2 running:1 running:2 running:1 running:2 finished:1 finished:2
    (1)Runnable (2)run() (3)throws 程序输出结果: running:1 running:2 running:1 running:2 running:1 running:2 finished:1 finished:2 解析:本题考查Java中线程的相关知识。
    题目要求按照程序给出的内容来完成填空和输出程序的运行结果。本题的关键是考查我们对线程的了解程度。线程的创建方法有两种,即通过类Thread和接口Runnable创建的方法。刚刚创建的线程还不能与其他的线程并发运行,当调用了方法start后,线程进入就绪态,在被Java虚拟机调度后才进入运行态。进入运行态的线程自动执行成员方法run(),在执行完这个成员方法后线程就又自动进入死亡态。下面来具体分析程序。
    第(1)空在定义类usethread语句中,从后面的关键字implements可以推断出类继承了一个接口,而在Java中,接口一般只有成员变量和成员方法的定义而没有成员方法的具体实现。根据后面的程序new Thread(new usethread(1))可以知道创建了线程对象,而这种创建线程对象的方法是通过接口Runnable来实现的,因此类usethread肯定是继承了接口Runnable,所以此空答案为Runnable。
    第(2)空是一个函数体的函数名,而函数体的作用是循环进行输出,从上面对线程的分析可以知道,此函数一定是run()函数,因此此空答案为run()。
    第(3)空是入口函数后面的语句,结合Java程序的特点,再从此空后面的内容不难推断出,此处是要显式生成异常来处理程序中的异常。而在Java中,一般用关键字throws来显式生成异常,因此此空答案为throws。
    对于问题2,我们可以根据程序来分析,程序中创建了两个线程,根据上面的分析我们可以知道,这两个线程都自动调用了函数run(),因此程序输出结果为:
    running:1
    running:2
    running:1
    running:2
    running:1
    running:2
    finished:1
    finished:2

  • 第18题:

    阅读以下说明和Jrdva代码,将应填入(n)处的字句写在对应栏内。

    [说明]

    在销售系统中常常需要打印销售票据,有时需要在一般的票据基础上打印脚注。这样就需要动态地添加一些额外的职责。如下展示了Decorator(修饰)模式。SalesOrder对象使用一个SalesTicket对象打印销售票据。图6-1显示了各个类间的关系。以下是Java语言实现,能够正确编译通过。

    [图6-1]

    [Java代码]

    //Component.java文件

    public (1) class Component {

    abstract publ ic void prtTicket();

    }

    //salesTicket.java文件

    public class SalesTicket extends Component{

    public void prtTicket(){

    //Sales ticket printing code here

    System.out.printin("SalesTicket");

    }

    }

    //Decorator.java文件

    publ ic abstract class Decorator extends Component{

    public void prtTicket(){

    if(myComp!=null)myComp.prtTicket();

    }

    private (2) myComp;

    public Decorator(Component myC){

    myComp=myC;

    }

    }

    //Footer.java文件

    public class Footer extends Decorator {

    public Footer(Component myC){

    (3);

    }

    public void prtTicket(){

    (4);

    prtFooter();

    }

    publ ic void prtFooter(){

    //place printing footer code here

    System.out.println("Footer");

    }

    }

    //salesorder.java文件

    public class SalesOrder{

    void prtTicket(){

    Component myST;

    myST=new Footer( (5) );

    //Print Ticket with footers as needed

    myST.prtTicket();

    }

    }

    (1)


    正确答案:abstract
    abstract

  • 第19题:

    阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。

    【说明】

    以下程序的功能是计算正方体、球体和圆柱体的表面积和体积并输出。

    程序由4个类组成:类cube、sphere和cylinder分别表示正方体、球体和圆柱体;抽象类 container为抽象类,提供了两个纯虚拟函数surface_area()和volum(),作为通用接口。

    【C++程序】

    include<iostream.h>

    define pi 3.1416

    class container{

    protected:

    double radius;

    public:

    container(double radius) {container::radius=radius;}

    virtual double surface_area()=0;

    virtual double velum()=0;

    };

    class cube:(1){ //定义正方体类

    public:

    cube(double radius):container(radius){};

    double surface_area () {return 6 * radius * radius;}

    double volum() {return radius * radius * radius;}

    };

    class sphere:(2){ //定义球体类

    public:

    sphere(double radius): container(radius){};

    double surface_area() { return (3);}

    double volum() {return pi * radius * radius * radius * 4/3;}

    };

    class cylinder:(4){ //定义圆柱体类

    double height;

    public:

    cylinder(double radius,double height):container(radius)

    {

    container::height=height;

    }

    double surface_are a () { return 2 * pi * radius * (height+radius); }

    double volum () {return (5);}

    };

    void main()

    {

    container * p;

    cube obj1 (5);

    sphere obj2(5);

    cylinder obj3(5,5);

    p=&obj1;

    cout<<“正方体表面积”(<<p->surface_area()<<end1;

    cont<<“正方体体积”<<p->volume()<<end1;

    p=&obj2;

    cout<<“球体表面积”<<p->surface_area()<<end1;

    cout<<“球体体积”<<p->volume()<<end1;

    p=&obj3;

    cout<<“球体表面积”<<p->surface_area()<<end1;

    cout<<“球体体积”<<p->volume()<<end1;

    }


    正确答案:(1)public container (2)public container (3) 4 * pi * radius * radius (4) public container (5)pi * radius * radius * height
    (1)public container (2)public container (3) 4 * pi * radius * radius (4) public container (5)pi * radius * radius * height 解析:类cube、sphere和cylinder分别表示正方体、球体和圆柱体,它们都需要求各自的表面积和体积,而抽象类container提供纯虚拟函数 surface_area()和velum(),所以类cube、sphere和cylinder都以类contain为基类,公有继承,所以(1)、(2)和(4)空应填入“public container”。
    (3)空处为类sphere中求表面积函数的返回值,所以根据球体表面积公式应填入“4*pi*radius*radius”。
    (5)空处为类cylinder中求圆柱体体积函数的返回值,所以根据圆柱体体积公式应填入“pi*radius*radius*height”。

  • 第20题:

    阅读以下说明和JAVA 2代码,将应填入(n)处的字句写在对应栏内。

    [说明]

    以下程序实现了在applet里移动图形文件,仔细阅读代码和相关注释,将程序补充完整。

    [代码6-1]

    import j ava. awt. *;

    import j ava.awt.event.*;

    import java.applet. Applet;

    public class AppCIU extends Applet implements MouseMotionListener, MouseListener

    {

    Image IMG nClick=over(this) title=放大; // 声明 Image 类类型的变量 IMG nClick=over(this) title=放大

    int x=70,y=60,posX=70,posY=60,dx,dy;

    public void init ( )

    {

    IMG nClick=over(this) title=放大=getImage ( getCodeBase ( ) ,"mouse.gif" ); //载入影像

    addMouseListener ( this );

    addMouseMotionListener ( this );

    }

    public void mousePressed ( MouseEvent e )

    {

    dx=e.getX()-posX; //取得按下之点与基准点X方向的距离

    dy=e.getY()-posY; //取得按下之点与基准点Y方向的距离

    }

    public void mouseDragged ( MouseEvent e )

    {

    (1)

    (2)

    if ( dx>0 && dx<120 && dy>0 && dy<60 ) //如果指针落在图形上方

    {

    Graphics g=getGraphics ( );

    (3)

    }

    }

    public void paint ( Graphics g )

    {

    (4)

    (5)

    (6)

    }

    public void mouseMoved ( MouseEvent e ) {};

    public void mouseReleased ( MouseEvent e ) {};

    public void mouseEntered ( MouseEvent e ) {};

    public void mouseExited ( MouseEvent e ) {};

    public void mouseClicked ( MouseEvent e ) {};

    }


    正确答案:(1)x=e.getX()-dx; (2)y=e.getY()-dy; (3)update(g); (4)g.drawImage(IMG onClick=over(this) title=放大xy12060this); (5)posX=x; (6)posY=y; 注:其中(1)和(2)可互换。(5)和(6)可互换。
    (1)x=e.getX()-dx; (2)y=e.getY()-dy; (3)update(g); (4)g.drawImage(IMG nClick=over(this) title=放大x,y,120,60,this); (5)posX=x; (6)posY=y; 注:其中(1)和(2)可互换。(5)和(6)可互换。 解析:本题程序实现了在applet里移动图形文件。对于(1)为取得拖曳时基准点的X坐标[x=e.getX()-dx]; (2)取得拖曳时基准点的Y坐标[y=e.getY()-dy];(3)清空画面为背景颜色,再调用paint()[update(g)]; (4)将IMG nClick=over(this) title=放大画在applet上[g.drawImage(IMG nClick=over(this) title=放大,x,y,120,60,this);];(5)更新基准点的X坐标[posX=x;];(6)更新基准点的Y坐标[posY=y;]。

  • 第21题:

    阅读以下说明和Java程序代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    在下面的Java程序代码中,类SalesTicket能够完成打印票据正文的功能,类 HeadDecorator与FootDecorator分别能够完成打印票据的台头和脚注的功能。

    已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。

    这是票据的台头!

    这是票据正文!

    -------------------

    这是票据的脚注!

    这是票据的台头!

    这是票据的脚注!

    【tava程序代码】

    public class SalesTicket {

    public void printTicket() {

    System. out. println ( "这是票据正文 ! ");

    }

    }

    public class Decorator extends SalesTicket{

    SalesTicket ticket;

    public Decorator(SalesTicket t) {

    ticket = t;

    }

    public void printTicket(){

    if(ticket != null)

    ticket.printTicket();

    }

    public class HeadDecorator extends Decorator{

    public HeadDecorator(SalesTicket t) {

    (1)

    }

    public void printTicket() {

    System. out.println("这是票据的台头! ");

    super.printTicket();

    }

    }

    public class FootDecorator extends Decorator{

    public FootDecorator(SalesTicket t) {

    (2);

    }

    public void printTicket() {

    super, printTicket ();

    System. out.println ("这是票据的脚注!");

    }

    }

    public class Main {

    public static void main(String[] args) {

    T = new HeadDecorator( (3));

    T=(4);

    System.out.println("------------------------------------");

    T = new FootDecorator((5));

    T.printTicket ();

    }

    }


    正确答案:(1)super(t) (2)super(t) (3)new FootDecorator(new SalesTicket()) (4)printTicket() (5)new HeadDecorator(null)
    (1)super(t) (2)super(t) (3)new FootDecorator(new SalesTicket()) (4)printTicket() (5)new HeadDecorator(null) 解析:本题中的类HeadDecorator和FootDecorator都继承了Decortator类,因此在构造函数中需要对Decorator类进行初始化,所以空(1)和(2)处应该为super(t)。类Main中空(3)和(4)处程序代码的输出为“这是票据的台头!这是票据正文!这是票据的脚注!”,由于T是一个headDecorator类的实例,因此空(4)处一定是printTicket方法的调用,类headDecorator将输出“这是票据的台头!”后调用其父类的printTicket方法,而仅仅只有FootDecorator类可以输出“这是票据的脚注!”,因此,当前父类的具体实例对象应该为FootDecorator的实例,所以空(3)处应该为new(FootDecorator(new SalesTicket))。空(5)同空(3)原理相同,但由于不需要输出票据的正文,因此在构造HeadDecorator对象的时候其参数为null即可。

  • 第22题:

    阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某软件公司欲开发一款汽车竞速类游戏,需要模拟长轮胎和短轮胎急刹车时在路面上留 下的不同痕迹,并考虑后续能模拟更多种轮胎急刹车时的痕迹。现采用策略(Strategy)设计模式来实现该需求,所设计的类图如图 5-1 所示。

    【Java代码】import java.util.*; interface BrakeBehavior{public (1) ;/*其余代码省略*/}class LongWheelBrake implements BrakeBehavior{public void stop(){System.out.println("模拟长轮胎刹车痕迹! ");}/*其余代码省略*/}class ShortWheelBrake implements BrakeBehavior {public void stop(){System.out.println("模拟短轮胎刹车痕迹! ");}/*其余代码省略 */}abstract class Car{protected (2) wheel;public void brake(){ (3) ;}/*其余代码省略*/}class ShortWheelCar extends Car {public ShortWheelCar(BrakeBehavior behavior){(4) ; } /*其余代码省略*/}class StrategyTest{public static void main(String[]args){BrakeBehaviorbrake =new ShortWheelBrake();ShortWheelCar car1= new ShortWheelCar(brake);car1. (5) ;}}


    答案:
    解析:
    1. void stop()2. BrakeBehavior3. wheel.stop()4. wheel=behavior5. brake()

  • 第23题:

    阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】 某文件管理系统中定义了类OfficeDoc和DocExplorer,当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态,现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。



    答案:
    解析:
    1: void update()2: Observer3: obs.update()4: Subject5: Attach(this)