Thinking in Java(第四版)习题

练习1/*创建一个类,它包含一个未初始化的String引用。验证该引用被Java初始化成了null。*/class Main {static String s;public static void main (String args[]){System.out.println("s="+s);}}/*Output:s=null*/练习2/*创建一个类,它包含一个在定义时就被初始化了的String域,以及另一个通过构造器初始化的String域,这两种方式有何差异?*/class Main {String s1 = "hello";String s2 ;public Main(String s){s2=s;}public static void main (String args[]){Main s = new Main("world");System.out.println(s.s1);System.out.println(s.s2);}}/*Output:helloworld*/练习3/*创建一个带默认构造器(即无参构造器)的类,在构造器中打印一条消息。为这个类创建一个对象。*/class Main {Main(){System.out.println("无参构造器");}public static void main (String args[]){new Main();}}/*Output:无参构造器*/练习4/*为前一个练习中的类添加一个重载构造器,令其接受一个字符参数,并在构造器中把你自己的信息和接受的参数一起打印出来。*/class Main {Main (String s){System.out.println(s);System.out.println("I’m your fans");}public static void main (String args[]){new Main("Hello Lady");}}/*Output:Hello LadyI’m your fans*/练习5/*创建一个名为Dog的类,它具有重载的bark()方法。此方法应根据不同的基本数据类型进行重载,并根据被调用的版本,打印出不同类型的狗吠(barking)、咆哮(howling)等信息,编写main()来调用所有不同版本的方法。*/class Dog {void bark(){System.out.println("barking");}void bark(int i){System.out.println("howling");}void bark(double i){System.out.println("wangwang");}}public class Main {public static void main (String args[]){Dog dog = new Dog();dog.bark();dog.bark(1);dog.bark(1.0);}}/*Output:barkinghowlingwangwang*/练习6/*修改前一个练习的程序,让两个重载方法各自接受两个类型的不同的参数,但二者顺序相反。验证其是否工作。*/class Dog {public void bark(int i){System.out.println("barking");}public void bark(double i){System.out.println("howling");}}class Main {public static void main (String args[]){Dog dog = new Dog();dog.bark(1.0);dog.bark(1);}}/*Output:howlingbarking*/练习7/*创建一个没有构造器的类,并在main()中创建其对象,用以验证编译器是否真的自动加入了默认构造器。*/class Main {public static void main(String args[]){Main main = new Main();}}练习8/*编写具有两个方法的类,在第一个方法内调用第二个方法两次:第一次调用时不使用this关键字,第二次调用时使用this关键字–* 这里只是为了验证它是起作用的,你不应该在实践中使用这种方法。*/class Main {void test1(){System.out.println("调用了test1()方法");}void test2(){System.out.print("执行test1()方法:");test1();System.out.print("执行test2()方法:");this.test1();}public static void main (String args[]){Main main = new Main();main.test2();}}/*Output:执行test1()方法:调用了test1()方法执行test2()方法:调用了test1()方法*/练习9/*编写两个(重载)构造器的类,并在第一个构造器中,通过this调用第二个构造器。*/class Main {Main(String s){System.out.println("s="+s);}Main(int i){this("i="+i);}public static void main (String args[]){new Main("hello world");new Main(521);}}/*Output:s=hello worlds=i=521*/练习10/*编写具有finalize()方法的类,并在方法中打印消息,在main()中为该类创建一个对象,试解释这个程序的行为。*/class Main {protected void finalize(){System.out.println("finalize()called");}public static void main (String args[]){new Main();}}练习11//修改前一个练习的程序,让你的finalize()总会被调用。class Main {protected void finalize(){System.out.println("finalize()called");}public static void main (String args[]){new Main();System.gc();System.runFinalization();}}/*Output:finalize()called*/练习12/*编写名为Tank的类,此类的状态可以是“满的”或“空的”。其终结条件是:对象被清理时必须处于空状态。 * 请编写finalize()以检验终结条件是否成立,在main()中测试Tank可能发生的几种使用方式。 */练习13//验证前面段落中的语句class Cup{Cup(int marker){System.out.println("Cup()");}void f(int marker){System.out.println("f("+marker+")");}}class Cups{static Cup cup1;static Cup cup2;static {cup1 = new Cup(1);cup2 = new Cup(2);}Cups(){System.out.println("Cups()");}}public class Main {public static void main (String args[]){System.out.println("main()");Cups.cup1.f(99);}static Cups cups1 = new Cups();static Cups cups2 = new Cups();}/*Output:Cup()Cup()Cups()Cups()main()f(99)*/练习14//编写一个类,拥有两个静态字符串域,其中一个在定义处初始化,另一个在静态块中初始化。//现在,加入一个静态方法用以打印出两个字段值。请证明它们都会在被使用之前完成初始化动作。class Main {static String s1 = "dog";static String s2;static {s2 = "kitty";}public static void main (String args[]){System.out.println("s1="+s1);System.out.println("s2="+s2);}}/*Output:s1=dogs2=kitty*/练习15//编写一个含有字符串域的类,并采用实例初始化方式进行初始化。class Main {String s ;{s = "young for you";}public Main(){System.out.println("s="+s);}public static void main (String args[]){new Main();}}/*Output:s=young for you*/练习16/*创建一个String对象数据,并为每一个元素都赋值一个String。用for循环来打印该数组。*/class Main {public static void main(String args[]){String[] a = new String[4];a[0]="these";a[1]="are";a[2]="some";a[3]="String";for (int i=0;i<a.length;i++){System.out.println(a[i]);}}}/*Output:thesearesomeString*/练习17//创建一个类,他有一个接受一个String参数的构造器。在构造阶段,打印该参数。创建一个该类的对象引用数组,//但是不实际去创建对象赋值给该数组。当运行程序时,请注意来自对该构造器的调用中的初始化消息是否打印了出来。class Test {Test(String s){System.out.println("s="+s);}}class Main {public static void main (String args[]){Test[] array1 = new Test[5];}}//不知这样是否符合题意。。练习18//通过创建对象赋值给引用数组,从而完成前一个练习。class Test{Test(String s){System.out.println("s="+s);}}class Main {public static void main (String args[]){Test[] array1 = new Test[5];for (int i=0;i<array1.length;i++){array1[i]=new Test(Integer.toString(i));}}}/*Output:s=0s=1s=2s=3s=4*/练习19//写一个类,,他接受一个可变参数的String数组,验证你可以向该方法传递一个用逗号分隔的String列表,或是一个String[]。class Test{void printString(String… args){for (String s :args)System.out.println(s+" ");}}class Main {public static void main (String args[]){Test test = new Test();test.printString("nice","to","meet","you");}}/*Output:nice to meet you */练习20//创建一个使用可变参数列表而不是普通的main()语法的main()。打印所产生的args数组的所有元素,并用各种不同数量的命令行参数来测试它。class Main{static void printString(String… args){for (String s :args)System.out.print(s+" ");System.out.println();}public static void main (String… args){printString("nice","to","meet","you");printString(new String[] {"there","are","some","strings"});}}/*Output:nice to meet you there are some strings */练习21//创建一个enum,它包含纸币中最小面值的6种类型。通过values()循环并打印每一个值及其ordinal()enum Money{One,Five,Ten,Hun,Tho}class Main {public static void main (String args[]){for (Money s:Money.values())System.out.println(s+",ordinal:"+s.ordinal());}}/*Output:One,ordinal:0Five,ordinal:1Ten,ordinal:2Hun,ordinal:3Tho,ordinal:4*/练习22//在前面的例子中,为enum写一个switch语句,对于每一个case,输出该特定货币的描述。enum Money{One,Five,Ten,Twe,Fif}class Main {Money money;public void describe(){switch(money){case One:System.out.println("1");break;case Five:System.out.println("5");break;case Ten:System.out.println("10");break;case Twe:System.out.println("20");break;case Fif:System.out.println("50");break;default:break;}}public static void main (String args[]){for (Money s : Money.values())System.out.println(s+",ordinal:"+s.ordinal());}}/*Output:One,ordinal:0Five,ordinal:1Ten,ordinal:2Twe,ordinal:3Fif,ordinal:4*/第5章完

世上最累人的事,莫过於虚伪的过日子

Thinking in Java(第四版)习题

相关文章:

你感兴趣的文章:

标签云: