第五章习题

5.1

 package ex0501;
//[5.1]创建一个类,它包含一个未初始化的String引用.验证该引用被Java初始化成null class TestDefaultNull
{
public String string;
} public class DefaultNull
{
public static void main(String[] args)
{
TestDefaultNull test = new TestDefaultNull();
System.out.println((test.string == null));
}
}

5.1

5.2

 package ex0502;
//[5.2]创建一个雷,它包含一个在定义时就被初始化了的String域,以及一个通过构造器初始化的String域.
//这两种方式有何差异? public class ClassInitialize
{
public String s1 = "defaults1";
public String s2; public ClassInitialize(String _s2) { s2 = _s2; }
public ClassInitialize() { s2 = null; }
}

5.2

5.3-5.4

 package ex050304;
//[5.3]创建一个带默认构造器的类,在构造器中打印一条消息,为这个类创建一个对象.
//[5.4]为前一个练习中的类添加一个重载构造器,令其接受一个字符串参数,并在构造器中把你自己的消息和接收的参数一起打印出来.
public class TestConstructor
{
//[5.3]
public TestConstructor() { System.out.println("Success!"); }
//[5.4]
public TestConstructor(String s)
{
System.out.println(s);
System.out.println("Success!");
} public static void main(String[] args)
{
TestConstructor test1 = new TestConstructor();
TestConstructor test2 = new TestConstructor("another"); }
}

5.3-5.4

5.5-5.6

 package ex050506;
//[5.5]创建一个名为Dog的类,它具有重载的bark()方法.
//此方法根据不同的基本数据进行重载,并根据被调用的版本,打印出不同类型的狗吠(barking)\咆哮(howling)等信息.
//[5.6]修改前一个练习的程序,让两个重载方法各自接受两个类型不同的参数,但两者顺序相反,验证其是否工作 class Dog
{
//[5.5]
public void bark(double temp){ System.out.println("barking"); }
public void bark(int temp){ System.out.println("howling"); } //[5.6]
public void bark(double temp, int temp2){ System.out.println("barking barking"); }
public void bark(int temp, double temp2){ System.out.println("howling howling"); }
} public class FunctionReload
{
public static void main(String[] args)
{
Dog dog = new Dog();
//[5.5]
dog.bark(1.0);
dog.bark(1);
//[5.6]
dog.bark(1.0 , 1);
dog.bark(1 , 1.0);
}
}

5.5-5.6

5.7

 package ex0507;
//[5.7]穿件一个没有构造器的类,并在main()中创建其对象,用以验证编译器是否真正加入了构造器 class LooksNoConstructor
{
public int integer;
public double decimal;
public String string;
} public class TestDefaultConstrutor
{
public static void main(String[] args)
{
LooksNoConstructor test = new LooksNoConstructor();
}
}

5.7

5.8

 package ex0508;
//[5.8]编写具有两个方法的类,在第一个方法内调用第二个方法两次.
//第一次调用时不使用this关键字,第二次调用时使用this关键字——这里只是为了验证它是起作用的。 class TestThisByMethod
{
public void firstMethod()
{
System.out.println("Good day!");
}
public void secondMethod()
{
firstMethod();
this.firstMethod();
}
} public class TestThis
{
public static void main(String[] args)
{
TestThisByMethod justtry = new TestThisByMethod();
justtry.secondMethod();
}
}

5.8

5.9

 package ex0509;

 //[5.9]编写具有两个(重载)构造器的类,并在第一个构造器中通过this调用第二个构造器.

 public class ConstructorInConstructor
{
//[5.3]
public ConstructorInConstructor() { System.out.println("Success!"); }
//[5.4]
public ConstructorInConstructor(String s)
{
this();
System.out.println(s);
} public static void main(String[] args)
{
ConstructorInConstructor test1 = new ConstructorInConstructor();
ConstructorInConstructor test2 = new ConstructorInConstructor("another"); }
}

5.9

5.10-5.11

 package ex051011;
//[5.10]编写具有finalize()方法的类,并在方法中打印信息.在main()中为该类创建一个对象.
//试解释这个程序的行为
//[5.11]修改前一个练习的程序,让你的finalize()总会被调用 class HaveAFinalize
{
protected void finalize()
{
System.out.println("finalize() excecuted");
}
} public class TestFinalize
{
public static void main(String[] args)
{
//[5.10]
//如果只有一次创建对象,finalize(有很大)可能不执行
HaveAFinalize test = new HaveAFinalize();
//[5.11]
//要保证finalize()被调用,则需保证至少有一次垃圾清理过程,通过分配大量内存可以看到这点
for(int i = 0; i < 100000; ++i)
new HaveAFinalize();
}
}

5.10-5.11

5.12

 package ex0512;
//[5.12]编写名为Tank的类,此类的状态可以使"满的"或者"空的".其终结条件是:对象呗清理时必须处于空状态
//请编写finalize()以检验终结条件是是否成立.在main()中测试Tank可能发生的集中调试方式 class Tank
{
private boolean state = false; public Tank() { state = true; }
protected void finalize()
{
if(state == true)
System.out.println("Warning! Still someone in the tank!");
}
} public class KindOfUseFinalize
{ }

5.12

5.13

 package ex0512;
//[5.12]编写名为Tank的类,此类的状态可以使"满的"或者"空的".其终结条件是:对象呗清理时必须处于空状态
//请编写finalize()以检验终结条件是是否成立.在main()中测试Tank可能发生的集中调试方式 class Tank
{
private boolean state = false; public Tank() { state = true; }
protected void finalize()
{
if(state == true)
System.out.println("Warning! Still someone in the tank!");
}
} public class KindOfUseFinalize
{ }

5.13

5.14

 package ex0514;
//[5.14]编写一个类,拥有两个静态字符串域,其中一个在定义处初始化,另一个在静态块中初始化.
//现在,加入一个静态方法用以打印出两个字段值,请证明它们都会再被使用之前完成初始化动作. class ProveStaticInitializeEarlier
{
public static String s1 = "Good";
public static String s2; ProveStaticInitializeEarlier(int number)
{
System.out.println(s1 + s2 + number);
}
public static void printInfo()
{
System.out.println(s1 + s2);
}
public void notStaticMethod()
{
System.out.println("meow!");
}
static
{
s2 = "bye";
}
} public class StaticInitializeEarlier
{
public static void main(String[] args)
{
ProveStaticInitializeEarlier test2 = new ProveStaticInitializeEarlier(1);
test2.notStaticMethod();
}
static ProveStaticInitializeEarlier test1 = new ProveStaticInitializeEarlier(2);
}

5.14

5.15

 package ex0515;
//[5.15]编写一个含字符串域的类,并采用实例初始化方式进行初始化 class TestInstanceInitialize
{
String string;
{
string = new String("finish");
System.out.println("The object has been initialized");
}
} public class InstanceInitialize
{
public static void main(String[] args)
{
TestInstanceInitialize test = new TestInstanceInitialize();
}
}

5.15

5.16

 package ex0516;
//[5.16]创建一个String对象数据,并为每一个元素都赋值一个String
//用for循环来打印该数组 public class StringArray
{
public static void main(String[] args)
{
String[] animals = {"cat", "dog", "bird", "fish", "panda"};
for(String a : animals)
System.out.println(a);
}
}

5.16

5.17-5.18

 package ex051718;
//[5.17]创建一个类,它有一个接收一个String参数的构造器.在构造阶段,打印该参数
//创建一个该类的对象的数组,但是不实际去创建对象赋值给数组.当运行程序时,注意来自对该构造器的调用总的初始化消息是否打印了出来
//[5.18]通过创建对象赋值给引用数组,从而完成前一个练习
class GetMessage
{
public GetMessage(String s)
{
System.out.println(s);
}
}
public class ObjectArray
{
public static void main(String[] args)
{
//[5.17]如果没有[5.18]则不会打印任何信息
GetMessage[] group;
//[5.18]
group = new GetMessage[]
{
new GetMessage("the"),
new GetMessage("Great"),
new GetMessage("Wall"),
};
}
}

5.17-5.18

5.19

 package ex0519;
//[5.19]写一个雷,它接受一个可变参数的String数组.验证你可以向该方法传递一个用逗号分隔的String列表,或是一个String[]. class GetStringArgs
{
public GetStringArgs(String...strings)
{
for(String s : strings)
System.out.println(s);
}
} public class VariableArguements
{
public static void main(String[] args)
{
String[] sarray = {"Monday", "Tuesday", "Wenesday"};
GetStringArgs test = new GetStringArgs(sarray);
GetStringArgs test2 = new GetStringArgs("Thursday", "Friday", "Saturday", "Sunday");
}
}

5.19

5.20

 package ex0520;
//[5.20]创建一个使用可变参数列表而不是普通的main()语法的main()
//打印所产生的args数组的所有元素,并用各种不同数量的命令行参数来测试它 public class MainVariableArguements
{
public static void main(String...args)
{
for(String s : args)
System.out.println(s);
}
}

5.20

5.21-5.22

 package ex052122;
//[5.21]创建一个enum,它包含纸币中最小面值的6种类型.通过values()循环并打印每一个值及其ordinal().
//[5.22]在前面的例子中,为enum写一个switch语句,对于每一个case,输出该特定货币的描述 enum Money
{
ONEDIME, FIVEDIME, ONEYUAN, FIVEYUAN, TENYUAN, TWENTYYUAN;
//[5.22]
public void discribe()
{
switch(this)
{
case ONEDIME:
System.out.println("一毛钱");break;
case FIVEDIME:
System.out.println("五毛!");break;
case ONEYUAN:
System.out.println("一块钱");break;
case FIVEYUAN:
System.out.println("五块");break;
case TENYUAN:
System.out.println("十块");break;
case TWENTYYUAN:
System.out.println("二十块");break;
}
}
}
public class TestEnumeration
{
public static void main(String[] args)
{
//[5.21]
for(Money s : Money.values())
System.out.println(s);
//[5.22]
Money test = Money.ONEDIME;
test.discribe();
}
}

5.21-5.22

【TIJ4】第五章全部习题的更多相关文章

  1. python程序设计基础(嵩天)第五章课后习题部分答案

    第五章p1515.2:实现isodd()函数,参数为整数,如果参数为奇数,返回true,否则返回false.def isodd(s): x=eval(s) if(x%2==0): return Fal ...

  2. 《学习Opencv》第五章 习题6

    这是第五章 习题5.6的结合版,其中实现了摄像头抓拍功能,能够成功运行. #include "stdafx.h" #include "cv.h" #includ ...

  3. 统计学习导论:基于R应用——第五章习题

    第五章习题 1. 我们主要用到下面三个公式: 根据上述公式,我们将式子化简为 对求导即可得到得到公式5-6. 2. (a) 1 - 1/n (b) 自助法是有有放回的,所以第二个的概率还是1 - 1/ ...

  4. 《C++Primer》第五版习题答案--第五章【学习笔记】

    <C++Primer>第五版习题答案--第五章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/15 第五章:语句 ...

  5. 《Django By Example》第五章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:大家好,我是新来的翻译, ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (22) -----第五章 加载实体和导航属性之延迟加载

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第五章 加载实体和导航属性 实体框架提供了非常棒的建模环境,它允许开发人员可视化地使 ...

  7. 精通Web Analytics 2.0 (7) 第五章:荣耀之钥:度量成功

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第五章:荣耀之钥:度量成功 我们的分析师常常得不到我们应得的喜欢,尊重和资金,因为我们没有充分地衡量一个黄金概念:成果.因为我们 ...

  8. 《Linux内核设计与实现》读书笔记 第五章 系统调用

    第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用在用户空间进程和硬件设备间添加了一个中间层, 作用:为用户空间提供了一种 ...

  9. Java语言程序设计(基础篇) 第五章 循环

    第五章 循环 5.2 while循环 1.while循环的语法如下: while(循环继续条件){ //循环体 语句(组); } 2.程序:提示用户为两个个位数相加的问题给出答案 package co ...

随机推荐

  1. 公式化学习requests(第二卷)

    请求浏览器分为两种一种是不需要用户登录验证直接请求 另一种是需要用户登陆验证请求,现在说一下利用COOKIE实现,COOKIE在前端开发时有很多的作用,要熟练使用, 直接上代码了: 第一步:访问页面, ...

  2. Linux和git使用

    一.Linux ​ cd . .. - ~ ls -a h l 通配符 mkdir bouch nano vim cat clear cp -r ./db/ ./lib/ mv -r rm -r wh ...

  3. Mybatis-Plus的分页插件

    使用的是:Mybatis-Plus的分页插件https://baomidou.gitee.io/mybatis-plus-doc/#/?id=%E7%AE%80%E4%BB%8B 1.Mapper.j ...

  4. 如何手动添加jar包到本地maven仓库

    环境 win10    idea工具 1.确认已经安装好 mvn环境   MAVEN_HOME   D:\Tool\apache-maven-3.5.2 Path %MAVEN_HOME%\bin 2 ...

  5. Handler机制中的消息队列

    --> 学习自蘑菇街大佬 Handler机制可以看成是一个消息阻塞队列,当有消息时立即处理消息,没有消息时则阻塞.在Android系统中APP启动后很快进入死循环,不断读取MessageQueu ...

  6. js中的call

    //例1 <script> window.color = 'red'; document.color = 'yellow'; var s1 = {color: 'blue' }; func ...

  7. mybatis参数映射

    转载地址:http://iyiguo.net/blog/2012/09/27/mybatis-param-mapping-rules/ 规则 非注解参数 当参数未使用@Param注解时,可以通过以下方 ...

  8. SWUST OJ 有趣的三位数(0319)

    有趣的三位数(0319) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 158 Accepted: 62   Description ...

  9. mysql视图、事务、触发器、索引

    视图 什么是视图 ? 一个查询语句的结果是一张虚拟表,将这种虚拟表保存下来,它就变成了一个视图. 为什么要用视图? 当频繁需要用到多张表的连表结果,你就可以事先生成好视图,之后直接调用即可,避免了反复 ...

  10. [VUE]关于路由哪些事儿

    什么是路由 之前有个小伙伴面试被问到:面试官:不用vue能不能写单页面应用?答:用angular啊(咳咳,开个玩笑),答案确实是可以的,原生js中有个事件叫做onhashchange,可以在windo ...