Thinking in Java 第五章练习题

练习1:创建一个类,它包含一个未初始化的String引用。验证该引用被Java初始化成了null

代码如下:

public class Test5_1_1 {
   public static void main(String[] args) {
      Test t = new Test();
      System.out.println(t.str);
   }
}
class Test{
    String str;
}
Console:
null

练习2:创建一个类,它包含一个在定义时就被初始化了的String域,以及另一个通过构造器初始化的String域。这两种方式有何差异?

代码如下:

public class Test5_1_2 {
    public static void main(String[] args) {
        Test1 t = new Test1();
        System.out.println(t.s1+" "+t.s2);
        t.s2 = "cba";
        System.out.println(t.s1+" "+t.s2);
    }
}
class Test1{
    String s1 = "abc";
    String s2;
} 
Console:
abc null
abc cba

差别在于:
s1初始化了一次,而s2初始化了两次
s1一开始被初始化为”abc”,而s2先被初始化为null,然后再被初始化为”cba”

练习3:创建一个带默认构造器(即无参构造器)的类,在构造器中打印一条消息。为这个类创建一个对象。

代码如下:

public class Test5_3 {
    public static void main(String[] args) {
        new Test3();
    }
}
class Test3{
    public Test3() {
        System.out.println("这是一个无参构造器");
    }
}
console:
这是一个无参构造器

练习4:为前一个练习中的类添加一个重载构造器,令其接受一个字符串参数,并在构造器中把你自己的信息和接受的参数一起打印出来。

代码如下:

public class Test5_4 {
    public static void main(String[] args) {
        new Test4("java");
    }
}
class Test4{
    Test4(String s){
        System.out.println("hello "+s);
    }
}
console:
hello java

练习5:创建一个名为Dog的类,它具有重载的bark()方法。此方法应根据不同的基本数据类型进行重载,并根据被调用的版本,打印出不同类型的狗吠(barking)、咆哮(howling)等信息。编写main()来调用所有不同版本的方法。

代码如下:

public class Test5_5 {
    public static void main(String[] args) {
        Dog d = new Dog();
        d.bark();
        d.bark("毛毛");
    }
}
class Dog{
    public void bark(){
        System.out.println("barking");
    }
    public void bark(String name){
        System.out.println(name+" howling");
    }
}
console:
barking
毛毛 howling

练习6:修改前一个练习的程序,让两个重载方法各自接受两个类型的不同的参数,但二者顺序相反。验证其是否工作。

代码如下:

public class Test5_6 {
    public static void main(String[] args) {
        Dog1 d1 = new Dog1();
        d1.bark(1, "毛毛");
        d1.bark("悠悠", 2);
    }
}
class Dog1{
    public void bark(int age,String name){
        System.out.println("小名:"+name+"  年龄:"+age+"  barking");
    }
    public void bark(String name,int age){
        System.out.println("小名:"+name+"  年龄:"+age+"  barking");
    }
}
console:
小名:毛毛 年龄:1 barking
小名:悠悠 年龄:2 barking

练习7:创建一个没有构造器的类,并在main()中创建其对象,用以验证编译器是否真的自动加入了默认构造器。

代码如下:

public class Test5_7 {
    static String str;
    public static void main(String[] args) {
        System.out.println(str);
    }
}
console:
null

练习8:编写具有两个方法的类,在第一个方法内调用第二个方法两次:第一次调用时不使用this关键字,第二次调用时使用this关键字——这里只是为了验证它是起作用的,你不应该在实践中使用这种方法。

代码如下:

public class Test5_8 {
    /**
     * 如果在方法内部调用同一个类的另一个方法,就不必使用this
     * 人们只期望在必要时用到this
     * 这里只是为了验证它是起作用的
     */
    public static void main(String[] args) {
            Apple apple=new Apple();
            apple.getApple();
        }
    }
    class Apple{

        public void getApple(){
            System.out.print("未使用this调用:");
            createApple();
            System.out.print("使用this调用:");
            this.createApple();
        }

        public void createApple(){
            System.out.println("已创建好……");
        }
}
console:
未使用this调用:已创建好……
使用this调用:已创建好……
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值