习题三一、问答题1.面向对象语言有哪三个特性?答:封装性,继承性,多态性。
2.类体内容中声明成员变量是为了体现对象的属性还是行为?答:属性。
3.类体内容中定义的非构造方法是为了体现对象的属性还是行为?答:行为。
4.什么时候使用构造方法?构造方法有类型吗?答:用类创建对象时使用构造方法。
没有类型。
5.类中的实例变量在什么时候会被分配内存空间?答:用类创建对象时会被分配内存空间。
6.什么叫方法的重载?构造方法可以重载吗?答:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即是参数的个数不同,或者是参数的类型不同。
可以。
7.类中的实例方法可以操作类变量(static变量)吗?类方法(static方法)可以操作实例变量吗?答:可以。
不可以。
8.类中的实例方法可以用类名直接调用吗?答:不可以。
9.简述类变量和实例变量的区别。
答:一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间。
所有对象的类变量都分配给相同的一处内存,对象共享类变量。
二、选择题1.下列哪个叙述是正确的?BA.Java应用程序由若干个类所构成,这些类必须在一个源文件中。
B.Java应用程序由若干个类所构成,这些类可以在一个源文件中,也可以分布在若干个源文件中,其中必须有一个源文件含有主类。
C.Java源文件必须含有主类。
D.Java源文件如果含有主类,主类必须是public类。
2.下列哪个叙述是正确的?DA.成员变量的名字不可以和局部变量的相同。
B.方法的参数的名字可以和方法中声明的局部变量的名字相同。
C.成员变量没有默认值。
D.局部变量没有默认值。
3.对于下列Hello类,哪个叙述是正确的?DA.Hello类有2个构造方法。
B.Hello类的int Hello()方法是错误的方法。
C.Hello类没有构造方法。
D.Hello无法通过编译,因为其中的hello方法的方法头是错误的(没有类型)。
class Hello {Hello(int m){}int Hello() {return 20;}hello() {}}4.对于下列Dog类,哪个叙述是错误的?DA.Dog(int m)与Dog(double m)互为重载的构造方法。
B.int Dog(int m)与void Dog(double m)互为重载的非构造方法。
C.Dog类只有两个构造方法,而且没有无参数的构造方法。
D.Dog类有3个构造方法。
class Dog {Dog(int m){}Dog(double m){}int Dog(int m){return 23;}void Dog(double m){}}5.下列哪些类声明是错误的?CDA)class AB)public class AC)protected class AD)private class A6.下列A类中【代码1】~【代码5】哪些是错误的?代码1,代码4 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类的类体中哪些【代码】是错误的。
代码4 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】输出1Lake lake = new Lake();lake.setFish(redFish);lake.foodFish(120);System.out.println(redFish.weight); //【代码2】输出121System.out.println(lake.fish.weight); //【代码3】输出121 }}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()); 输出sum=-100 }}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); 输出27}}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】 输出100System.out.println(a.f(10,10.0)); //【代码2】 输出20.0}}四、编程题用类描述计算机中CPU 的速度和硬盘的容量。
要求Java 应用程序有4个类,名字分别是PC ,CPU 和HardDisk 和Test ,其中Test 是主类。
PC 类与CPU 和HardDisk 类关联的UML 图如下图所示。
其中,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 的速度和硬盘的容量。
主类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()方法。
源程序:public class CPU{int speed;int getSpeed(){return speed;}public void setSpeed(int m){this.speed = m;}PC 与CPU 和HardDisk 关联UML 图 PCcpu:CPUHD:HardDisksetCPU(CPU):voidsetHardDisk(HardDisk):voidshow():voidCPUspeed:int setSpeed(int):void getSpeed():int HardDisk amount:intsetAmount(int):voidgetAmount():int}public class HardDisk{int amount;int getAmount(){return amount;}public void setAmount(int amount){this.amount = amount;}}public class PC{CPU cpu;HardDisk disk;void setCPU(CPU c){this.cpu = c;}void setHardDisk(HardDisk h){this.disk = h;}void show(){System.out.println("CPU速度:"+cpu.getSpeed());System.out.println("硬盘容量:"+disk.getAmount());}}public class Test{public static void main(String args[]){CPU cpu = new CPU();HardDisk disk = new HardDisk();cpu.setSpeed(2200);disk.setAmount(200);PC pc = new PC();pc.setCPU(cpu);pc.setHardDisk(disk);pc.show();}}运行结果:。