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

原创 2016年08月30日 10:38:30

练习(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{}

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

Python学习笔记(一)

一、基本语法 1、raw_input()取的内容永远以字符串的形式返回 2、“”和’'的一个区别是      “This’s a test!” √      ’This’s a test!’ ×   ...
  • sfh366958228
  • sfh366958228
  • 2015年02月03日 14:38
  • 1371

hdu 1166 敌兵布阵——(区间和)树状数组/线段树

这就是一个区间求和问题,可以用树状数组来做: 在此之前,需要了解一下按位与运算符——&;计算的规则是,仅当两个数都为真,则结果为真。 例如 90&45==8——————因为 在二进制中 0101 1...
  • stffer
  • stffer
  • 2015年08月12日 08:39
  • 615

js正则表达式之$1$2$3$4$5$6$7$8$9属性,返回子匹配的结果

功能:$1-$9存放着正则表达式中最近的9个正则表达式的匹配结果,这些结果按照子匹配的出现顺序依次排列。  基本语法RegExp.$n  注意:这些属性是静态的,除了replace中的第二...
  • ywb201314
  • ywb201314
  • 2015年11月21日 21:18
  • 1508

ccf Z字形扫描

201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述   ...
  • silence401
  • silence401
  • 2016年09月07日 21:52
  • 749

【蓝桥第二周】01背包问题

01背包问题 题目描述 Description     有N件物品和一个容量为V的背包。第i件物品的重量是w[i],价值是v[i]。 求解将哪些物品装入背包可使价值总和最大。 输入描述 Inpu...
  • c18219227162
  • c18219227162
  • 2015年12月19日 23:21
  • 228

用1,2,3,4,5,6,7,8,9这9个数字组成一个九位数。

用1,2,3,4,5,6,7,8,9这9个数字组成一个九位数。
  • fudaxing
  • fudaxing
  • 2014年06月25日 22:31
  • 1846

hdu 2502 月之数(数学)

Problem Description 当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数。 如果一个正整数m表示成二进制,它的位数为n...
  • feizaoSYUACM
  • feizaoSYUACM
  • 2017年02月25日 20:33
  • 182

maven 构建工程

一 项目工程目录二 创建父工程三 创建公共工具类三 创建开发项目四 创建开发项目子模块五 运行项目 鉴于最近学习一个分布式项目的开发,讲一下关于使...
  • AAA1074
  • AAA1074
  • 2018年01月03日 10:39
  • 34

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

剑指offer:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 思路一:用一个multiset存储k个数,后面得到一个数,...
  • u013686654
  • u013686654
  • 2017年07月17日 21:42
  • 1021

欧拉工程第24题 0,1,2,3,4,5,6,7,8,9的第100万个字典排列是什么

题目 排列是一个物体的有序安排。例如3124是1,2,3,4的一种排列。如果所有的排列按照数值或者字母序排序,我们称其为一个字典序。0,1,2的字典排列有: 012,021,102,12...
  • chen595572
  • chen595572
  • 2016年10月25日 00:09
  • 557
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:thinking in java test5.3练习(3)(4)(5)(6)(7)
举报原因:
原因补充:

(最多只允许输入30个字)