- 练习1:创建一个类,它包含一个int域和一个char域,它们都没有被初始化,将他们的值打印出来,以验证Java执行了默认初始化。
class Initialization {
int a;
char b;
}
public class testInitialization {
public static void main(String[] args) {
Initialization ini = new Initialization();
System.out.println("1." + ini.a);
System.out.println("2." + ini.b);
}
}
- 练习2:参照本章的HelloDate.java这个例子,创建一个“Hello, World”程序,该程序只要输出这句话即可,你所编写的类里只需一个方法(即“main”方法,在程序启动时被执行)。只要记住把它设为static形式,并指定参数列表-即使根本不会用到这个列表。用javac进行编译,再用java运行它。如果你使用的是不同于JDK的开发环境,请了解如何在你的环境中进行编译和运行。
/**The first Thinking in Java example program.
* Display a string and today's date.
*@author zhangjian
*@author Bruce Eckel
*@version 4.0
*/
/**
* Entrv point to class & application.
*
* @param args
* array of string arguments
* @throws exceptions
* No exceptions thrown
*
* <pre>
* System.out.println(new Date());
* </pre>
*/
public class testHello {
public static void main(String[] args) {
System.out.println("Hello wrold! It is:");
System.out.println(new Date());
}
}
- 练习3:找出含有ATypeName的代码段,将其改写成完整的程序,然后编译、运行。
public class testATypeName {
public static void main(String[] args) {
testATypeName atn = new testATypeName();
atn.getClass();
}
}
- 练习4:将DataOnly代码段改写成一个程序,然后编译、运行。
class DataOnly {
int i;
double d;
boolean b;
}
public class testDataOnly {
public static void main(String[] args) {
DataOnly d = new DataOnly();
System.out.println(d.i);
System.out.println(d.d);
System.out.println(d.b);
}
}
- 练习5:修改前一个练习,将DataOnly中的数据在main()方法中赋值并打印出来。
class DataOnly {
int i;
float f;
boolean b;
}
public class testDataOnly2 {
public static void main(String[] args) {
DataOnly d1 = new DataOnly();
d1.i = 12;
System.out.println(d1.i);
d1.f = 12.0f;
System.out.println(d1.f);
d1.b = true;
System.out.println(d1.b);
}
}
- 练习6:编写一个程序,让它含有本章所定义的storage()方法的代码段,并调用之。
class testStorage {
String s = "Hello world !";
private int storage(String s) {
return s.length() * 2;
}
public void print() {
System.out.println("storage(s) is:" + storage(s));
}
}
public class testStorageMethod {
public static void main(String[] args) {
testStorage ts = new testStorage();
ts.print();
}
}
- 练习7:将Incrementable的代码段改写成一个完整的可运行程序。
class StaticTest{
static int i = 47;
}
class Incrementable{
static void incrementable(){
StaticTest.i++;
}
}
public class testIncrementable {
public static void main(String[] args) {
Incrementable.incrementable();
System.out.println(StaticTest.i);
}
}
- 练习8:编写一个程序,展示无论你创建了某个特定类的多少个对象,这个类中的某个特定的static域只有一个实例。
class TestStatic1 {
static int i = 12;
static void addi() {
i++;
}
}
public class testStatic {
public static void main(String[] args) {
TestStatic1 ts0 = new TestStatic1();
System.out.println(ts0.i);
TestStatic1 ts1 = new TestStatic1();
System.out.println(ts1.i);
ts0.addi();
ts1.addi();
TestStatic1 ts2 = new TestStatic1();
System.out.println(ts2.i);
}
}
- 练习9:编写一个程序,展示自动包装功能对所有的基本类型和包装器类型都起作用。
public class AutoboxingTest {
public static void main(String[] args) {
boolean bn = true;
byte bt = 8;
char c = 'c';
short s = 16;
int i = 32;
long l = 64;
float f = 32.32f;
double d = 64.64;
Boolean BN = bn;
Byte BT = bt;
Character C = c;
Short S = s;
Integer I = i;
Long L = l;
Float F = f;
Double D = d;
System.out.println("boolean bn = " + bn);
System.out.println("Boolean BN = " + BN);
System.out.println();
System.out.println("byte bt = " + bt);
System.out.println("Byte BT = " + BT);
System.out.println();
System.out.println("char c = " + c);
System.out.println("Character C = " + C);
System.out.println();
System.out.println("short s = " + s);
System.out.println("Short S = " + S);
System.out.println();
System.out.println("int i = " + i);
System.out.println("Integer I = " + I);
System.out.println();
System.out.println("long l = " + l);
System.out.println("Long L = " + L);
System.out.println();
System.out.println("float f = " + f);
System.out.println("Float F = " + F);
System.out.println();
System.out.println("double d = " + d);
System.out.println("Double D = " + D);
System.out.println();
System.out.println("--------------------");
/* 装箱 */
Integer a = new Integer(12);
Character ch = new Character('a');
System.out.println(ch + " = " + a);
System.out.println("--------------------");
/* 拆箱 */
int b = new Integer(12);
char chr = new Character('b');
System.out.println(chr + " = " + b);
}
}
- 练习10:编写一个程序,打印从命令行获取的三个参数。为此,需要确定命令行数组中String的下标。
public class ArgsTest {
public static void main(String[] args) {
if (args.length < 3) {
System.out.println("No 3 arguments.");
System.exit(1);
}
System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);
}
}
- 练习11:将AllTheColorsOfTheRainbow这个示例改写成一个程序,然后编译、运行。
public class AllTheColorsOfTheRainbow {
int anIntegerRepresentingColors;
void changeTheHueOfTheColor(int newHue) {
anIntegerRepresentingColors = newHue;
}
public static void main(String[] args) {
AllTheColorsOfTheRainbow all = new AllTheColorsOfTheRainbow();
all.changeTheHueOfTheColor(12);
System.out.println(all.anIntegerRepresentingColors);
}
}
- 练习12:找出HelloDate.java的第二版本,也就是那个简单注释文档的示例。对该文件执行javadoc,然后通过Web浏览器观看运行结果。
import java.util.*;
/**
* The first Thinking in java example program. Displays a string and today's
* date.
*
* @author Bruce Eckel
* @author www.MindView.net
* @version 4.0
*/
public class javadocHelloDate {
/**
* Entrv point to class & application.
*
* @param args
* array of string arguments
* @throws exceptions
* No exceptions thrown
*/
public static void main(String[] args) {
System.out.println("Hello, it's: ");
System.out.println(new Date());
}
}
/* 可以用命令行形式实现 javadoc -help
* javadoc -d [输出文件保存目录] nameOfPackage
* 可以用Eclipse实现
* Project->Generate javadoc...
*/
- 练习13:通过Javadoc运行Documentation1.java,Documentation2.java和Documentation3.java,然后通过Web浏览器验证所产生的文档。
/** A class comment */
public class Documentation1 {
/** A field comment */
public int i;
/** A method comment */
public void f() {
}
}
/**
* <pre>
* System.out.println(new Date());
* </pre>
*/
public class Documentation2 {
}
/* 生成javadoc文档,必须有可以文档化的公共或受保护的类 */
/**
* You can <em>even</em> insert a list:
* <ol>
* <li>Item one</li>
* <li>Item two</li>
* <li>Item three</li>
* </ol>
*/
public class Documentation3 {
}
/* 生成javadoc文档,必须有可以文档化的公共或受保护的类 */
- 练习14:在前一个练习的文档中加入各项的HTML列表。
/* javadoc只能为public和protected成员进行文档注释。
* 但是在测试过程中,只有public成员可以进行文档注释。WHY?
* Eclipse中有权限选择,选择private则会显示所有类型成员。默认public。
* 命令行形式可以在要进行文档注释的类名前加 -private ,则显示所拥有类型成员。默认public和protected。
*/
/**
* Menu <menu>
* <li>class one
* <ul>
* <li>method one</li>
* <li>method two</li>
* <li>method three</li>
* </ul>
* </li>
* <li>class two</li>
* <li>class three</li></menu>
*/
public class HtmlListTest {
/** MethodOne */
public void f1() {
}
/** MethodTwo */
public void f2() {
}
/** MethodThree */
void f3() {
}
}
/** ClassOne */
class One {
}
/** ClassTwo */
class Two {
}
/**
* List1(ol):
* <ol>
* <li>filed one</li>
* <li>filed two</li>
* <li>filed three</li>
* </ol>
*/
public class List1 {
/** FiledOne */
public int i;
/** FiledTwo */
protected int j;
/** FiledThree */
private int k;
}
/**
* List2(ul):
* <ul>
* <li>bananas</li>
* <li>apples</li>
* <li>plums</li>
* </ul>
*/
public class List2 {
}
/**
* List3(dl)
* <dl>
* <dt>Apple</dt>
* <dd>The apple is the pomaceous fruit of the apple tree</dd>
* <dd><i>Musa domestica</i></dd>
* <dt>Banana</dt>
* <dd>The banana is the parthenocarpic fruit of the banana tree</dd>
* <dd><i>Musa acuminata</i></dd>
* <dt>Cherry</dt>
* <dd>The cherry is the stone fruit of the genus <i>Prunus</i></dd>
* </dl>
*/
public class List3 {
}
- 练习15:使用练习2的程序,加入注释文档。用javadoc提取此注释文档,并产生一个HTML文件,然后通过Web浏览器查看结果。
import java.util.Date;
/**
* 这是一个显示系统时间的类。
*
* @author Bruce Eckel
* @author 这是一个链接<a>http://www.MindView.net</a>
* @version 4.0
*/
public class JavadocExercise2HelloDate {
/**
* 主函数
*
* @param args
* 字符串型数组参数
* @return 返回一个整数0
*/
public static int main(String[] args) {
System.out.println("Hello, it's: ");
System.out.println(new Date());
return 0;
}
}
- 练习16:找到第5章中的Overloading.java示例,并为它加入javadoc文档。然后用javadoc提取此注释文档,并产生一个HTML文件,最后,通过Web浏览器查看结果。
//Demonstration of both constructor
//and ordinary method overloading
/** 方法重载示例类 */
class Tree {
/** A filed comment */
int height;
/** 默认构造器:用标准方式初始化 */
Tree() {
System.out.println("Planting a seedling");
height = 0;
}
/**
* 方法重载后的构造器:读取信来初始化
*
* @param initialHeight
* 取int型initialHeight作为形式参数,该整型数表示height的初始值
*/
Tree(int initialHeight) {
height = initialHeight;
System.out.println("Creating new Tree that is " + height + " feet tall");
}
/** 信息显示方法 */
void info() {
System.out.println("Tree is " + height + " feet tall");
}
/**
* 信息显示方法重载
*
* @param s
* 取字符串s作为形式参数,该字符串表示重载后的方法进行的信息显示
*/
void info(String s) {
System.out.println(s + ": Tree is " + height + " feet tall");
}
}
/**
* 方法重载
*
* @author Bruce Eckel
* @author www.MindView.net
* @version 4.0
*/
public class Overloading {
/**
* The <code>main()</code> function which is called when the program is
* executed by saying <code>java Overloading</code>.
*
* @param args
* array passed from the command-line
*/
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
Tree t = new Tree(i);
t.info();
t.info("overloaded method");
}
}
}