一、问答题
1.面向对象语言有哪三个特性?
2.类名应当遵守怎样的编程风格?
3.变量和方法的名字应当遵守怎样的编程风格?
4.类体内容中声明成员变量是为了体现对象的属性还是行为?
5.类体内容中定义的非构造方法是为了体现对象的属性还是行为?
6.什么时候使用构造方法?构造方法有类型吗?
7.类中的实例变量在什么时候会被分配内存空间?
8.什么叫方法的重载?构造方法可以重载吗?
9.类中的实例方法可以操作类变量(static变量)吗?类方法(static方法)可以操作实例变量吗?
10.类中的实例方法可以用类名直接调用吗?
11.简述类变量和实例变量的区别。
12.this关键字代表什么?this可以出现在类方法中吗?
二、选择题
1.下列哪个叙述是正确的?
- Java应用程序由若干个类所构成,这些类必须在一个源文件中。
- Java应用程序由若干个类所构成,这些类可以在一个源文件中,也可以分布在若干个源文件中,其中必须有一个源文件含有主类。
- Java源文件必须含有主类。
- Java源文件如果含有主类,主类必须是public类。
2.下列哪个叙述是正确的?
- 成员变量的名字不可以和局部变量的相同。
- 方法的参数的名字可以和方法中声明的局部变量的名字相同。
- 成员变量没有默认值。
- 局部变量没有默认值。
3.对于下列Hello类,哪个叙述是正确的?
- Hello类有2个构造方法。
- Hello类的int Hello()方法是错误的方法。
- Hello类没有构造方法。
- Hello无法通过编译,因为其中的hello方法的方法头是错误的(没有类型)。
class Hello {
Hello(int m){
}
int Hello() {
return 20;
}
hello() {
}
}
4.对于下列Dog类,哪个叙述是错误的?
- Dog(int m)与Dog(double m)互为重载的构造方法。
- int Dog(int m)与void Dog(double m)互为重载的非构造方法。
- Dog类只有两个构造方法,而且没有无参数的构造方法。
- Dog类有3个构造方法。
class Dog {
Dog(int m){
}
Dog(double m){
}
int Dog(int m){
return 23;
}
void Dog(double m){
}
}
5.下列哪些类声明是错误的?
- class A
- public class A
- protected class A
- 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是主类。
- 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的速度和硬盘的容量。
- 主类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();
}
}