【JAVA2实用教程】第4章:类与对象

第四题:阅读程序题

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();
    }
}

结果:

 

这题没什么难度,照着题目编程即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
红鱼X提供的FCKeditor RedFishX配置版1.1。<br><br>主要是纠正了1.0版本的插入代码错误。因为插入代码部分使用的不是本人的代码,因此在插入代码的时候有一点BUG,这一个版本已经解决了这个问题。<br><br>除具有csdn.net博客中的功能外,还支持最新的Opera(9.22)浏览器,是一个很好的FCKeditor配置。<br><br>作者:FCKeidtor开发组。<br>配置:红鱼X (http://blog.csdn.net/redfishx)<br>功能:大部分在线Web编辑器功能,精简了工具栏,另外加上了代码插入功能。<br><br>使用方法如下(示例):<br>首先把下载的文件解压到某文件夹,然后在页面中加入脚本即可。<br><br>如,我把文件夹放到D:\Websites下,而要使用的页面也在d:\websites下,那么该页面源码可以为:<br><br><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><br><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh"><br><br><head><br><script type="text/javascript" src="FCKeditor.net/fckeditor.js"></script><br><script type="text/javascript"><br>window.onload = function()<br>{<br>var oFCKeditor = new FCKeditor("Content",600,400,"redfishx" ) ;<br>oFCKeditor.BasePath = "FCKeditor.net/" ;<br>oFCKeditor.ReplaceTextarea() ;<br>}<br></script><br></head><br><body><br><form id="dataform" method="post" action="target.aspx"><br><textarea id="content"></textarea><br></form><br></body><br></html><br><br>说明:<br><br><script type="text/javascript" src="FCKeditor.net/fckeditor.js"></script><br>把相对目录下的脚本导入页面。<br><br><script type="text/javascript"><br>window.onload = function()<br>{<br>var oFCKeditor = new FCKeditor("Content",600,400,"redfishx" ) ;<br>oFCKeditor.BasePath = "FCKeditor.net/" ;<br>oFCKeditor.ReplaceTextarea() ;<br>}<br></script><br>页面载入的时候建立FCKeditor对象,并设置该对象的BasePath(很重要),然后运行该对象的ReplaceTextarea()方法。<br><br>建立对象的时候,传入的参数为<br>“Content”为ReplaceTextarea()方法对应的Textarea控件的id或name。<br>600为宽度<br>400为高度<br>“redfishx”为自定义的工具栏集合名称。<br><br>redfishx是一个精简的工具栏,包含大部分常用功能,建议您直接使用。<br><br>为了让FCKEditor更好地为我们所用,以后我会亲自编写部分代码,增强功能和执行效率。我的动力来自您的关注。<br><br>2007-8-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值