第四题:阅读程序题
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 Main_Fish{
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
}
}
输出结果:
1:输出的是Fish.weight,初始值为1
2和3其实是一个东西,地址应是相同的,即2,3是同一地址的不同表达方式
4.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 Print_A{
public static void main(String args[]){
B b=new B();
b.setX(-100);
b.setY(-200);
System.out.println("sum="+b.getXYSum());
}
}
结果:
事实上,第2行中的x和y就是this.x和this.y。这样就可以理解两个函数:setX是不改变this.x的值的,它的作用仅仅是给输入的x赋值为输入的x;setY则是给this.y赋值输入的y。
因此在main函数中的b.x=100,b.y=-200,则sum=-100。
4.3.请说出A类中System.out.println的输出结果
class A{
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 Print_S {
public static void main(String args[]){
A b1=new A(),b2=new A();
b1.setN(3);
b2.setN(5);
int s1=b1.getSum();
int s2=b2.getSum();
// System.out.println(s1);
// System.out.println(s2);
System.out.println(s1+s2);
}
}
报错:java.lang.NoSuchMethodError: 'void B.setN(int)'
原因即解决方案:类名冲突,即在同目录下有两个B类。解决方法就是修改类名。
结果:
b1b2并不是独立的,b2是在b1的基础上运行的。例如b1的sum初始值为0,而b2的sum初始值为b1.sum,在本题中为6。因此最后s2=6+15=21。最终输出结果为27
4.4.请说出E类中【代码1】【代码2】的输出结果。
class Convert{
double f1(int x,double y){
return x+y;
}
int f2(int x,int y){
return x*y;
}
}
public class Print_Convert {
public static void main(String args[]){
Convert a=new Convert();
System.out.println(a.f2(10,10));
System.out.println(a.f1(10,10.0));
}
}
结果:
我将代码修改以后就看的很清楚,当输入值x,y都为int类型时,调用的是f2,输出int类型的10*10。同样的,当输入值y为double类型时,调用的时f1,输出double类型的10+10。
4.5.上级执行下列程序,了解可变参数。
public class Print_x {
public static void main(String args[]){
f(1,2);
f(-1,-2,-3,-4);
f(9,7,6);
}
public static void f(int ... x){
for (int i=0;i<x.length;i++){
System.out.println(x[i]);
}
}
}
结果:
没什么好说的,就是逐个输出数组内的元素。
4.6.当类的字节码进入内存时,类中的静态块会立即被执行。执行下列程序,了解静态块。
class AAA{
static {
System.out.println("我是AAA中的静态块!");
}
}
public class Study_static {
static {
System.out.println("我是最先被执行的静态块!");
}
public static void main(String args[]){
AAA a=new AAA();
System.out.println("我在了解静态(static)块");
}
}
结果:
第五题:编程题
代码:
class CPU{
int speed=0;//防止有弱智不赋值直接调用get函数(比如我)
public void setSpeed (int m){
this.speed = m;
}
public int getSpeed (){
return speed;
}
}
class HardDisk{
int amount=0;
public int getAmount (){
return amount;
}
public void setAmount (int m){
this.amount = m;
}
}
class PC{
CPU cpu;
HardDisk HD;
public void setCPU (CPU c){
this.cpu = c;
}
public void setHardDisk (HardDisk h){
this.HD = h;
}
public void show (){
System.out.println("CPU speed:"+cpu);
System.out.println("HardDisk amount:"+HD);
}
}
public class Test{
public static void main(String args[]){
CPU cpu = new CPU();
cpu.setSpeed(2000);
//cpu将自己的speed设置为2000
HardDisk disk = new HardDisk();
disk.setAmount(200);
//disk将自己的amount设置为200
PC pc = new PC();
//创建PC对象
pc.setCPU(cpu);
//调用setCPU
pc.setHardDisk(disk);
//调用setHardDisk
pc.show();
}
}
结果:
这题没什么难度,照着题目编程即可。