thinking in java test5.3练习(3)(4)(5)(6)(7)

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

public class test5_3_3 {
    public static void main(String[] args){
        wucan wucan = new wucan();
    }
}
class wucan{
    public wucan(){
        System.out.println("无参构造器正在运行。。。");
    }
}

程序很简单。
关于无参构造器,有几个需要注意:
如果程序员没有给一个类写任何构造器,jvm会查找其父类的构造器,若父类没有,再往上找,一直到找到为止。你可能要问,一直找到根类都没有怎么办?我们要记住,java是单根继承,所有类都间接或直接继承自object类。查看object类我们发现它有一个无参构造器。所以一个类若没有写构造器,那么编译器会调用其父类的构造器。
如果程序员给其写了一个构造器,那么jvm就不会给其添加默认构造器。
所以如果此时你需要用到无参构造器,那么需要自己写一个了。当我们编写一个子类并且不想它调用父类的构造器,那么给它一个默认构造器即可。

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

public class test5_3_3 {
    public static void main(String[] args){
        wucan wucan = new wucan();
        wucan wucan1 = new wucan("abcd");
    }
}
class wucan{
    public wucan(){
        System.out.println("无参构造器正在运行。。。");
    }
    public wucan(String args){
        System.out.println("接受到的字符串是:" + args);
    }
}

方法重载就是参数列表不同的同名方法,常应用于编写多种初始化构造器。

练习(5):创建一个名为Dog的类,它具有重载的bark()方法。此方法应根据不同的基本数据类型进行重载,并根据被调用的版本,打印出不同类型的狗吠(barking),咆哮(howling)等信息。编写main()来调用所有不同的版本的方法。这里我们不受限于题目,将所有基本类型都应用起来。
代码如下:

public class test5_3_3 {
    public static void main(String[] args){
        Dog dog = new Dog();
        dog.Bark(0);
        dog.Bark('a');
        dog.Bark(127);
        dog.Bark(1268123);
        dog.Bark(3334322189218973l);
        dog.Bark(2836123.2318293f);
        dog.Bark(21837221.2347332432312);

    }
}
class Dog{
    public void Bark(byte a){
        System.out.println("byte");
    }

    public void Bark(char c){
        System.out.println("char");
    }

    public void Bark(short s){
        System.out.println("short");
    }

    public void Bark(int i){
        System.out.println("int");
    }

    public void Bark(long l){
        System.out.println("long");
    }

    public void Bark(float f){
        System.out.println("float");
    }

    public void Bark(double d){
        System.out.println("double");
    }
}

控制台输出:
int
char
int
int
long
float
double
我们发现byte,short都没有被调用,编译器都默认将它们看成int类型。
不过当我们写成这种形式时,就会调用到byte的重载方法:
Byte b = 0;
dog.Bark(b);
所以当重载方法里有一些编译器难以区分的基本数据类型时,一定要注意。

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

public class test5_3_6 {
    public static void main(String[] args){
        Dog2 dog2 = new Dog2();
        dog2.Bark(1,1.1f);
        dog2.Bark(1.1f,2);
    }
}
class Dog2{
    public void Bark(int a,float f){
        System.out.println("barking");
    }

    public void Bark(float f, int a){
        System.out.println("howling");
    }
}

从控制台输出结果可以看出其可以看出程序按我们所想的顺利运行。即重载方法的参数顺序能作为区分重载方法的依据。不过thinking in java书中不建议我们这么做,因为这会导致代码难于维护。好吧,笔者也不理解为什么难于维护,作为新手我们暂时记住这点即可。

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

public class test5_3_7 {
    public static void main(String[] args){
        moren mo = new moren();
    }
}
class moren{}

运行一遍,没有报错,说明程序没有问题。
以上。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值