zoukankan      html  css  js  c++  java
  • 【TIJ4】第五章全部习题

    第五章习题

    5.1

     1 package ex0501;
     2 //[5.1]创建一个类,它包含一个未初始化的String引用.验证该引用被Java初始化成null
     3 
     4 class TestDefaultNull
     5 {
     6     public String string;
     7 }
     8 
     9 public class DefaultNull 
    10 {
    11     public static void main(String[] args)
    12     {
    13         TestDefaultNull test = new TestDefaultNull();
    14         System.out.println((test.string == null));
    15     }
    16 }
    5.1

    5.2

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

    5.3-5.4

     1 package ex050304;
     2 //[5.3]创建一个带默认构造器的类,在构造器中打印一条消息,为这个类创建一个对象.
     3 //[5.4]为前一个练习中的类添加一个重载构造器,令其接受一个字符串参数,并在构造器中把你自己的消息和接收的参数一起打印出来.
     4 public class TestConstructor 
     5 {
     6     //[5.3]
     7     public TestConstructor() { System.out.println("Success!"); }
     8     //[5.4]
     9     public TestConstructor(String s)
    10     {
    11         System.out.println(s);
    12         System.out.println("Success!");
    13     }
    14     
    15     public static void main(String[] args)
    16     {
    17         TestConstructor test1 = new TestConstructor();
    18         TestConstructor test2 = new TestConstructor("another");
    19         
    20     }
    21 }
    5.3-5.4

    5.5-5.6

     1 package ex050506;
     2 //[5.5]创建一个名为Dog的类,它具有重载的bark()方法.
     3 //此方法根据不同的基本数据进行重载,并根据被调用的版本,打印出不同类型的狗吠(barking)咆哮(howling)等信息.
     4 //[5.6]修改前一个练习的程序,让两个重载方法各自接受两个类型不同的参数,但两者顺序相反,验证其是否工作
     5 
     6 class Dog
     7 {
     8     //[5.5]
     9     public void bark(double temp){ System.out.println("barking"); }
    10     public void bark(int temp){ System.out.println("howling"); }
    11     
    12     //[5.6]
    13     public void bark(double temp, int temp2){ System.out.println("barking barking"); }
    14     public void bark(int temp, double temp2){ System.out.println("howling howling"); }
    15 }
    16 
    17 public class FunctionReload 
    18 {
    19     public static void main(String[] args)
    20     {
    21         Dog dog = new Dog();
    22         //[5.5]
    23         dog.bark(1.0);
    24         dog.bark(1);
    25         //[5.6]
    26         dog.bark(1.0 , 1);
    27         dog.bark(1 , 1.0);
    28     }
    29 }
    5.5-5.6

    5.7

     1 package ex0507;
     2 //[5.7]穿件一个没有构造器的类,并在main()中创建其对象,用以验证编译器是否真正加入了构造器
     3 
     4 class LooksNoConstructor
     5 {
     6     public int integer;
     7     public double decimal;
     8     public String string;
     9 }
    10 
    11 public class TestDefaultConstrutor 
    12 {
    13     public static void main(String[] args)
    14     {
    15         LooksNoConstructor test = new LooksNoConstructor();
    16     }
    17 }
    5.7

    5.8

     1 package ex0508;
     2 //[5.8]编写具有两个方法的类,在第一个方法内调用第二个方法两次.
     3 //第一次调用时不使用this关键字,第二次调用时使用this关键字——这里只是为了验证它是起作用的。
     4 
     5 class TestThisByMethod
     6 {
     7     public void firstMethod()
     8     {
     9         System.out.println("Good day!");
    10     }
    11     public void secondMethod()
    12     {
    13         firstMethod();
    14         this.firstMethod();
    15     }
    16 }
    17 
    18 
    19 public class TestThis 
    20 {
    21     public static void main(String[] args)
    22     {
    23         TestThisByMethod justtry = new TestThisByMethod();
    24         justtry.secondMethod();
    25     }
    26 }
    5.8

    5.9

     1 package ex0509;
     2 
     3 //[5.9]编写具有两个(重载)构造器的类,并在第一个构造器中通过this调用第二个构造器.
     4 
     5 public class ConstructorInConstructor 
     6 {
     7     //[5.3]
     8     public ConstructorInConstructor() { System.out.println("Success!"); }
     9     //[5.4]
    10     public ConstructorInConstructor(String s)
    11     {
    12         this();
    13         System.out.println(s);
    14     }
    15     
    16     public static void main(String[] args)
    17     {
    18         ConstructorInConstructor test1 = new ConstructorInConstructor();
    19         ConstructorInConstructor test2 = new ConstructorInConstructor("another");
    20         
    21     }
    22 }
    5.9

    5.10-5.11

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

    5.12

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

    5.13

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

    5.14

     1 package ex0514;
     2 //[5.14]编写一个类,拥有两个静态字符串域,其中一个在定义处初始化,另一个在静态块中初始化.
     3 //现在,加入一个静态方法用以打印出两个字段值,请证明它们都会再被使用之前完成初始化动作.
     4 
     5 class ProveStaticInitializeEarlier
     6 {
     7     public static String s1 = "Good";
     8     public static String s2;
     9     
    10     ProveStaticInitializeEarlier(int number)
    11     {
    12         System.out.println(s1 + s2 + number);
    13     }
    14     public static void printInfo()
    15     {
    16         System.out.println(s1 + s2);
    17     }
    18     public void notStaticMethod()
    19     {
    20         System.out.println("meow!");
    21     }
    22     static
    23     {
    24         s2 = "bye";
    25     }
    26 }
    27 
    28 public class StaticInitializeEarlier 
    29 {
    30     public static void main(String[] args)
    31     {
    32         ProveStaticInitializeEarlier test2 = new ProveStaticInitializeEarlier(1);
    33         test2.notStaticMethod();
    34     }
    35     static ProveStaticInitializeEarlier test1 = new ProveStaticInitializeEarlier(2);
    36 }
    5.14

    5.15

     1 package ex0515;
     2 //[5.15]编写一个含字符串域的类,并采用实例初始化方式进行初始化
     3 
     4 class TestInstanceInitialize
     5 {
     6     String string;
     7     {
     8         string = new String("finish");
     9         System.out.println("The object has been initialized");
    10     }
    11 }
    12 
    13 public class InstanceInitialize 
    14 {
    15     public static void main(String[] args)
    16     {
    17         TestInstanceInitialize test = new TestInstanceInitialize();
    18     }
    19 }
    5.15

    5.16

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

    5.17-5.18

     1 package ex051718;
     2 //[5.17]创建一个类,它有一个接收一个String参数的构造器.在构造阶段,打印该参数
     3 //创建一个该类的对象的数组,但是不实际去创建对象赋值给数组.当运行程序时,注意来自对该构造器的调用总的初始化消息是否打印了出来
     4 //[5.18]通过创建对象赋值给引用数组,从而完成前一个练习
     5 class GetMessage
     6 {
     7     public GetMessage(String s)
     8     {
     9         System.out.println(s);
    10     }
    11 }
    12 public class ObjectArray 
    13 {
    14     public static void main(String[] args)
    15     {
    16         //[5.17]如果没有[5.18]则不会打印任何信息
    17         GetMessage[] group;
    18         //[5.18]
    19         group = new GetMessage[]
    20         {
    21             new GetMessage("the"),
    22             new GetMessage("Great"),
    23             new GetMessage("Wall"),
    24         };
    25     }
    26 }
    5.17-5.18

    5.19

     1 package ex0519;
     2 //[5.19]写一个雷,它接受一个可变参数的String数组.验证你可以向该方法传递一个用逗号分隔的String列表,或是一个String[].
     3 
     4 class GetStringArgs
     5 {
     6     public GetStringArgs(String...strings)
     7     {
     8         for(String s : strings)
     9             System.out.println(s);
    10     }
    11 }
    12 
    13 public class VariableArguements 
    14 {
    15     public static void main(String[] args)
    16     {
    17         String[] sarray = {"Monday", "Tuesday", "Wenesday"};
    18         GetStringArgs test = new GetStringArgs(sarray);
    19         GetStringArgs test2 = new GetStringArgs("Thursday", "Friday", "Saturday", "Sunday");
    20     }
    21 }
    5.19

    5.20

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

    5.21-5.22

     1 package ex052122;
     2 //[5.21]创建一个enum,它包含纸币中最小面值的6种类型.通过values()循环并打印每一个值及其ordinal().
     3 //[5.22]在前面的例子中,为enum写一个switch语句,对于每一个case,输出该特定货币的描述
     4 
     5 enum Money
     6 {
     7     ONEDIME, FIVEDIME, ONEYUAN, FIVEYUAN, TENYUAN, TWENTYYUAN;
     8     //[5.22]
     9     public void discribe()
    10     {
    11         switch(this)
    12         {
    13         case ONEDIME:
    14             System.out.println("一毛钱");break;
    15         case FIVEDIME:
    16             System.out.println("五毛!");break;
    17         case ONEYUAN:
    18             System.out.println("一块钱");break;
    19         case FIVEYUAN:
    20             System.out.println("五块");break;
    21         case TENYUAN:
    22             System.out.println("十块");break;
    23         case TWENTYYUAN:
    24             System.out.println("二十块");break;
    25         }
    26     }
    27 }
    28 public class TestEnumeration
    29 {
    30     public static void main(String[] args)
    31     {
    32         //[5.21]
    33         for(Money s : Money.values())
    34             System.out.println(s);
    35         //[5.22]
    36         Money test = Money.ONEDIME;
    37         test.discribe();
    38     }
    39 }
    5.21-5.22
  • 相关阅读:
    营销型站点的建设流程是什么?
    MAC 通过brew安装软件
    Android实现分享内容到微信朋友圈
    C++设计模式之适配器模式(三)
    JEECG平台权限设计
    .Net修改网站项目调试时的虚拟目录(未验证)
    .Net修改网站项目调试时的虚拟目录
    ECharts.js学习动态数据绑定
    百度ECharts
    asp.net loading 动画
  • 原文地址:https://www.cnblogs.com/catnip/p/4345096.html
Copyright © 2011-2022 走看看