Java 2 实用教程(第5版)耿祥义版 习题四

一、问答题

1.面向对象语言有哪三个特性?

2.类名应当遵守怎样的编程风格?

3.变量和方法的名字应当遵守怎样的编程风格?

4.类体内容中声明成员变量是为了体现对象的属性还是行为?

5.类体内容中定义的非构造方法是为了体现对象的属性还是行为?

6.什么时候使用构造方法?构造方法有类型吗?

7.类中的实例变量在什么时候会被分配内存空间?

8.什么叫方法的重载?构造方法可以重载吗?

9.类中的实例方法可以操作类变量(static变量)吗?类方法(static方法)可以操作实例变量吗?

10.类中的实例方法可以用类名直接调用吗?

11.简述类变量和实例变量的区别。

12.this关键字代表什么?this可以出现在类方法中吗?

二、选择题

1.下列哪个叙述是正确的?

  1. Java应用程序由若干个类所构成,这些类必须在一个源文件中。
  2. Java应用程序由若干个类所构成,这些类可以在一个源文件中,也可以分布在若干个源文件中,其中必须有一个源文件含有主类。
  3. Java源文件必须含有主类。
  4. Java源文件如果含有主类,主类必须是public类。

2.下列哪个叙述是正确的?

  1. 成员变量的名字不可以和局部变量的相同。
  2. 方法的参数的名字可以和方法中声明的局部变量的名字相同。
  3. 成员变量没有默认值。
  4. 局部变量没有默认值。

3.对于下列Hello类,哪个叙述是正确的?

  1. Hello类有2个构造方法。
  2. Hello类的int Hello()方法是错误的方法。
  3. Hello类没有构造方法。
  4. Hello无法通过编译,因为其中的hello方法的方法头是错误的(没有类型)。

class Hello {

     Hello(int m){

     }

     int Hello() {

         return 20;

     }

     hello() {

     }

}

4.对于下列Dog类,哪个叙述是错误的?

  1. Dog(int m)与Dog(double m)互为重载的构造方法。
  2. int Dog(int m)与void Dog(double m)互为重载的非构造方法。
  3. Dog类只有两个构造方法,而且没有无参数的构造方法。
  4. Dog类有3个构造方法。

class Dog {

     Dog(int m){

     }

     Dog(double  m){

     }

     int Dog(int m){

        return 23;

     }

     void Dog(double m){

     }

}

5.下列哪些类声明是错误的?

  1. class A
  2. public class A
  3. protected class A
  4. private class A

6.下列A类中【代码1】~【代码5】哪些是错误的?

class Tom {

private int x = 120;

  protected int y = 20;

  int z = 11;

  private void f() {

     x = 200;

     System.out.println(x); 

  }

  void g() {

     x = 200;

     System.out.println(x);

  }

}

public class A {

  public static void main(String args[]) {

       Tom tom = new Tom();

       tom.x = 22;   //【代码1】

       tom.y = 33;   //【代码2】

       tom.z = 55;   //【代码3】

       tom.f();     //【代码4】

       tom.g();     //【代码5】

   }

}

7.下列E类的类体中哪些【代码】是错误的。

class E {

  int x;               //【代码1】

  long y = x;          //【代码2】

  public void f(int n) {

     int m;          //【代码3】

     int t = n+m;     //【代码4】  

  }

}

三、阅读程序

1.说出下列E类中【代码1】~【代码3】的输出结果。

class Fish {

   int weight = 1;

}

class Lake {

   Fish fish;

   void setFish(Fish s){

       fish = s;

   }

   void foodFish(int m) {

      fish.weight=fish.weight+m;

   }

}

public class E {

   public static void main(String args[]) {

       Fish  redFish = new Fish();

       System.out.println(redFish.weight);  //【代码1】

       Lake lake = new Lake();

       lake.setFish(redFish);

       lake.foodFish(120);

       System.out.println(redFish.weight);  //【代码2】

       System.out.println(lake.fish.weight);  //【代码3】

    }

}

2.请说出A类中System.out.println的输出结果。

class B {

  int x = 100,y = 200;

   public void setX(int x) {

      x = x;

   }

   public void setY(int y) {

      this.y = y;

   }

   public int getXYSum() {

      return x+y;

   }

}

public class A {

  public static void main(String args[]) {

 B b = new B();

      b.setX(-100);

      b.setY(-200);

         System.out.println("sum="+b.getXYSum());

   }

}

3.请说出A类中System.out.println的输出结果。

class B {

  int n;

   static int sum=0;

   void setN(int n) {

     this.n=n;

   }

   int getSum() {

     for(int i=1;i<=n;i++)

        sum=sum+i;

      return sum;

   }

}

public class A {

public static void main(String args[]) {

      B b1=new B(),b2=new B();

      b1.setN(3);

      b2.setN(5);

      int s1=b1.getSum();

      int s2=b2.getSum();

         System.out.println(s1+s2);

   }

}

4.请说出E类中【代码1】,【代码2】的输出结果n的输出结果。

class A {

   double f(int x,double y) {

      return x+y;

   }

   int f(int x,int y) {

      return x*y;

   }

}

public class E {

   public static void main(String args[]) {

      A a=new A();

      System.out.println(a.f(10,10)); //【代码1】

      System.out.println(a.f(10,10.0)); //【代码2】

  }

}

5.上机实习下列程序,了解可变参数。

public class E {

   public static void main(String args[]) {

         f(1,2);

         f(-1,-2,-3,-4); //给参数传值时,实参的个数很灵活

         f(9,7,6) ;

   }

   public static void f(int ... x){    //x是可变参数的代表,代表若干个int型参数

        for(int i=0;i<x.length;i++) {  //x.length是x代表的参数的个数

            System.out.println(x[i]);  //x[i]是x代表的第i个参数(类似数组)

        }

   }

}

6.类的字节码进入内存时,类中的静态块会立刻被执行。实习下列程序,了解静态块。

class AAA {

   static { //静态块

      System.out.println("我是AAA中的静态块!");

   }

}

public class E {

   static { //静态块

      System.out.println("我是最先被执行的静态块!");

   }

   public static void main(String args[]) {

      AAA a= new AAA();  //AAA的字节码进入内存

      System.out.println("我在了解静态(static)块"); 

   }

}

四、编程题(参考例子7~9)

用类描述计算机中CPU的速度和硬盘的容量。要求Java应用程序有4个类,名字分别是PC,CPU和HardDisk和Test,其中Test是主类。

  1. PC类与CPU和HardDisk类关联的UML图(图4.33)

其中,CPU类要求getSpeed()返回speed的值;要求setSpeed(int m)方法将参数m的值赋值给speed。HardDisk类要求getAmount()返回amount的值,要求setAmount(int m)方法将参数m的值赋值给amount。PC类要求setCUP(CPU c) 将参数c的值赋值给cpu,要求setHardDisk (HardDisk h)方法将参数h的值赋值给HD,要求show()方法能显示cpu的速度和硬盘的容量。

  1. 主类Test的要求
  • main方法中创建一个CPU对象cpu,cpu将自己的speed设置为2200,
  • main方法中创建一个HardDisk对象disk,disk将自己的amount设置为200,
  • main方法中创建一个PC对象pc,
  • pc调用setCUP(CPU c)方法,调用时实参是cpu,
  • pc调用setHardDisk (HardDisk h)方法,调用时实参是disk,
  • pc调用show()方法。
一、问答题
1. 封装、继承和多态。
2.当类名由几个单词复合而成时,每个单词的首字母使用大写。
3.名字的首单词的首字母使用小写,如果变量的名字由多个单词组成,从第2个单词开始的其它单词的首字母使用大写。
4.属性
5.行为
6.用类创建对象时。没有类型
7.用类创建对象时。
8.一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。可以。
9.可以。不可以。
10.不可以。
11.一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间。所有对象的类变量都分配给相同的一处内存,对象共享类变量。
12.代表调用当前方法的对象。不可以。
二、选择题
1.B。2.D。3.D。4.D。5.CD。6.【代码1】【代码4】。7.【代码4】。
三、阅读程序
1.【代码1】:1,【代码2】:121,【代码3】:121。
2.sum=-100。
3. 27。
4.【代码1】:100,【代码2】:20.0。
5. 上机实习题目,解答略。
6. 上机实习题目,解答略。
四、编程题
CPU.java
public class CPU {
   int speed;  
   int getSpeed() {
      return speed;
   }
   public void setSpeed(int speed) {
      this.speed = speed; 
   }
}
HardDisk.java
public class HardDisk {
   int amount;  
   int getAmount() {
      return amount;
   }
   public void setAmount(int amount) {
      this.amount = amount; 
   }
} 
PC.java
public class PC { 
    CPU cpu;
    HardDisk HD;
    void setCPU(CPU cpu) {
        this.cpu = cpu;
    } 
     void setHardDisk(HardDisk HD) {
        this.HD = HD;
    } 
    void show(){
       System.out.println("CPU速度:"+cpu.getSpeed());
       System.out.println("硬盘容量:"+HD.getAmount());
    }
} 
Test.java
public class Test {
   public static void main(String args[]) {
       CPU cpu = new CPU();
       HardDisk HD=new HardDisk();
       cpu.setSpeed(2200);
       HD.setAmount(200);
       PC pc =new PC();
       pc.setCPU(cpu);
       pc.setHardDisk(HD);
       pc.show();
    }
} 

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值