《Java经典入门指南》课后习题Chapter4

《Java经典入门指南》课后习题Chapter4

1.至少列出类中可以包含的3种元素类型。

answer:属性、方法、构造方法、块以及内部类。

2.方法和构造方法之间有什么区别?

answer:方法(method) 定义一个类的对象(或实例)可以执行的动作。方法包括声明部分和主体部分。声明部分由返回值、方法名和参数列表组成,主体包含操作执行的代码。方法的返回类型可以是基本类型、对象或void(为空)。返回类型为void意味着该方法不返回任何东西。方法的声明部分也称方法签名(signature)。如果一个方法有多个参数,两个参数之间需要用逗号分隔。

每个类必须至少有一个构造方法(constructor),否则,将无法用类创建任何对象,它将毫无用处。因此,如果类没有明确定义构造方法,编译器将添加一个构造方法。构造方法用于创建对象,它虽然看起来像一个方法,但是与方法不同,构造方法没有返回值,甚至没有void。此外,构造方法必须与类名相同。构造方法没有参数时,叫无参构造。

3.类图中的类是否显示其构造方法?

answer:在UML类图中,类由一个矩形表示,矩形包含3部分:最上面的部分是类名,中间部分是字段列表,底部是方法列表,如果字段和方法不那么重要,也可以不列出。通常UML类图中的类不用显示其构造方法。

4.null是什么意思?

answer:空值。引用变量指向一个对象,但是有时引用变量没有值(它没有引用一个对象),这样的引用变量被称为具有null值。

5.关键字this有什么作用?

answer:可以在任何方法或构造方法中使用this关键字来引用当前对象。例如,如果有一个类级字段,它的名称与局部变量相同,就可以使用下面的语法来引用字段:this.field。一个常见的用法是在构造方法中接收用于初始化字段的值。例如:

public class Box {
    int length;
    int width;
    int height;
    public Box(int length, int width, int height) {
        this.length = length;
        this.width = width;
        this.height = height;
    }

6.当用“==”操作符比较个对象引用时,真正比较的是对象的内容吗?为什么?

answer:不是。因为基本类型变量按值传递,引用变量按引用传递。如果变量都是对象引用,==运算比较的不是值而是引用。【涉及自动装箱与拆箱知识,推荐阅读博主骆昊,java面试题全集上。】

7.什么是变量的作用域?

answer:变量作用域(scope)是指变量的可访问性。 第一条规则是:在块中定义的变量只能从块中访问。第二条规则是:在一个嵌套的块内部可以访问外部块中声明的变量(如下代码是有效的)。

for (int x = 0; x < 5; x++) {
    for (int y = 0; y < 3; y++) {
        System.out.println(x);
        System.out.println(y);
    }
}

8.请解释“超出作用域”的含义。

answer:指超出了作用域的范围,无法访问。

9.垃圾回收器如何确定要销毁哪些对象?

answer:Java提供了几个垃圾回收器(garbage collector),以此来销毁无用对象并释放内存。无用对象是指不再被引用的对象或其引用已经超出作用域的对象

10.什么是方法重载?【什么是方法覆盖】

answer:在Java类中允许多个方法具有相同的名称,只要每个方法接收不同的参数类型集即可。这个特性叫做方法重载 换句话说,将下面两个方法放在同一个类中是合法的:

public String printString(String string)
public String printString(String string, int offset)

11.创建一个完全限定名为com.example.Tablet的类来模拟Android平板电脑。该类须包含3个私有字段:weight(int)、screenSize(float)和wifiOnly(boolean)。要访问这些字段,必须使用一对公共的访问方法和修改方法,即getWeight/setWeight、getScreenSize/setScreenSize和getWifiOnly/setWifiOnly。该类还必须有一个构造方法,即无参数的构造方法。

answer:

package com.example;//包名

public class Tablet {//类名
    public Tablet(){
    }//无参构造方法
    private int weight=2;
    private float screenSize=6f;
    private boolean wifiOnly=false;//设置三个私有字段
    public void setWeight(int weight) {
        this.weight = weight;
    }//公共的修改方法
    public int getWeight() {
        return weight;
    }//公共的访问方法
    public void setScreenSize(float screenSize) {
        this.screenSize = screenSize;
    }
    public float getScreenSize() {
        return screenSize;
    }
    public void setWifiOnly(boolean wifiOnly){
        this.wifiOnly = wifiOnly;
}
    public boolean getWifiOnly() {
        return wifiOnly;
    }
}

备注:完全限定名 = 包名 + 类型名。

12.在com.example.test包中定义一个TabletTest类并实例化Tablet类,实例化之后立即打印字段的值(通过调用它的get方法),然后重新设置字段值并再次打印它们。

answer:

代码1:在com.example.test包中定义一个TabletTest类并实例化Tablet类,实例化之后立即打印字段的值(通过调用它的get方法)

package com.example.test;

import com.example.Tablet;

public class TabletTest {
    public static void main(String[] args) {
        //实例化后立即打印值
        Tablet ta=new Tablet();
        System.out.println("重量为:"+ta.getWeight()+"屏幕尺寸为:"+ta.getScreenSize()+"wifi设置为:"+ta.getWifiOnly());
    }
}

代码1运行结果为:重量为:2屏幕尺寸为:6.0wifi设置为:false

代码2:重新设置字段值并再次打印它们。

package com.example.test;

import com.example.Tablet;

public class TabletTest {
    public static void main(String[] args) {
        //实例化后立即打印值
        Tablet ta=new Tablet();
        ta.setWeight(6);//重新设置变量的值
        ta.setScreenSize(18f);
        ta.setWifiOnly(true);
        System.out.println("重量为:"+ta.getWeight()+"屏幕尺寸为:"+ta.getScreenSize()+"wifi设置为:"+ta.getWifiOnly());//取出值并打印
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值