您的第一个 Java 类
目标
- 使用 Eclipse Package Explorer 创建包和声明类
- 向类添加变量和方法
- 了解 Logger 类如何帮助您关注应用程序的行为
- 使用 Eclipse 代码生成器
- 创建一个 JUnit 测试案例并在 Eclipse 内运行它
您的 Person 类
第 1 步:创建一个包
不使用默认包(几乎始终是一种不好的做法),而专门为您编写的代码创建一个包。单击 File > New > Package 启动 Java Package 向导。将 com.makotojava.intro
键入到 Name 文本框中,然后单击 Finish。
第 2 步:声明类
现在可以在 Package Explorer 中看到您的新包。从这里创建类的最简单方式是,右键单击该包并选择 New > Class...。在 New Class 对话框的 Name 文本框中,键入 Person,然后单击 Finish。
Eclipse 为您生成了一个 shell 类并在编辑窗口中显示了源代码:
package com.makotojava.intro;
public class Person {
}
可选地,可以整理一下工作区,关闭不需要的视图。
第 3 步:添加内置记录功能
在进行进一步编码之前,您需要知道程序如何告诉您它们在做什么。
Java 平台包含 java.util.logging 包,这是一种以可读形式收集程序信息的内置记录机制。Loggers 是您通过对 Logger 类的静态方法调用所创建的指定实体:
import java.util.logging.Logger;
//...
Logger l = Logger.getLogger(getClass().getName());
调用 getLogger() 方法时,您向它传递一个 String。就现在而言,只需要养成传递您编写的代码所在类的名称的习惯即可。对于任何普通(也即非静态)方法,前面的代码始终引用该类名并将它传递给 Logger。
如果您在一个静态方法内调用 Logger,可引用您所在的类的名称:
Logger l = Logger.getLogger(Person.class.getName());
您所在的代码是 Person 类,所以您引用一个名为 class 的特殊字面常量,该常量检索 Class 对象(后面将更详细介绍)并获取其 Name 属性。添加记录代码,使 Person 现在看起来类似于:
package com.makotojava.intro;
import java.util.logging.Logger;
public class Person {
Logger l = Logger.getLogger(Person.class.getName());
}
第 4 步:添加类变量
在上一节课程中,您已看到如何开始扩充 Person 类,但我没有过多地解释语法。现在我将更正式地介绍如何添加类变量。
清单 1. 包含构造方法的 Person 类定义
package com.makotojava.intro;
public class Person {
private String name;
private int age;
private int height;
private int weight;
private String eyeColor;
private String gender;
public Person() {
// Nothing to do...
}
public Person(String name, int age, int height, int weight String eyeColor, String gender) {
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
this.eyeColor = eyeColor;
this.gender = gender;
}
}
回想一下,一个变量有一个 accessSpecifier、一个 dataType、一个 variableName 和一个可选的 initialValue。在第 4 单元中,您简要了解了如何定义 accessSpecifier 和 variableName。
dataType 可以是原语类型或对另一个对象的引用。例如,在 清单 1 中可以注意到,age 是一个 int(原语类型),name 是一个 String(对象)。JDK 带来了大量有用的类,比如 java.lang.String,而且 java.lang 包中的类不需要导入(Java 编译器提供的一种速记形式)。但无论 dataType 是 JDK 类(比如 String)还是用户定义的类,语法都基本相同。
表 1 给出了您可能经常使用的 8 种原语数据类型,包括在您没有显式初始化一个成员变量的值时,采用的原语的默认值。
表 1. 原语数据类型
类型 | 大小 | 默认值 | 值范围 |
---|---|---|---|
boolean | 不适用 | false | true 或 false |
byte | 8 位 | 0 | -128 到 127 |
char | 16 位 | (无符号) | \u0000' \u0000' 到 \uffff' 或 0 到 65535 |
short | 16 位 | 0 | -32768 到 32767 |
int | 32 位 | 0 | -2147483648 到 2147483647 |
long | 64 位 | 0 | -9223372036854775808 到 9223372036854775807 |
float | 32 位 | 0.0 | 1.17549435e-38 到 3.4028235e+38 |
double | 64 位 | 0.0 | 4.9e-324 到 1.7976931348623157e+308 |
第 5 步:添加 getter、setter、构造方法和 main 方法
返回到 Person 的 Eclipse 源代码编辑器,添加以下代码中的第 3 到 7 行,以便您的类现在类似于:
package com.makotojava.intro;
import java.util.logging.Logger;
public class Person {
Logger l = Logger.getLogger(Person.class.getName());
private String name;
private int age;
private int height;
private int weight;
private String eyeColor;
private String gender;
}
Eclipse 拥有一个方便的代码生成器来生成 getter 和 setter(以及其他方法)。右键单击 Package Explorer 中的 Person 类并选择 Source > Generate Getters and Setters...。在 Generate Getters and Setters 对话框中,选择除 l(它表示记录器)的所有属性并单击 OK。
现在将清单 2 中的代码输入源代码窗口中,放在类定义的顶部部分(public class Person () 下面一行)之下,从而向 Person 添加一个构造方法。
清单 2. Person 构造方法
public Person(String name, int age, int height, int weight, String eyeColor, String gender) {
this.name = name;
this.age = age;
this.height = height;
this.weight = weight;
this.eyeColor = eyeColor;
this.gender = gender;
}
确保没有看到表明编译错误的波浪线。
第 6 步:生成一个 JUnit 测试案例
现在可以生成一个 JUnit 测试案例,在其中使用清单 2 中的构造方法实例化一个 Person,然后将该对象的状态打印到控制台。从这种意义上讲,“测试” 可确保调用的构造方法上的属性顺序是正确的(也即它们的设置为了正确的属性)。
使用 main() 作为测试工具 main() 是一个特殊方法,您可将它包含在任何类中,以便 JRE 可执行它的代码。类不是必须拥有 main() 方法 — 事实上,大部分类从来没有— 而且类最多只能有一个 main() 方法。main() 是一种值得拥有的方便方法,因为它为类提供了一个快速测试平台。在企业开发中,可以使用测试库,比如 JUnit,但使用 main() 可能是一种创建测试平台的应急方式。
在 Package Explorer 中,右键单击您的 Person 类,然后选择 New > JUnit Test Case。在 New JUnit Test Case 向导的第一页,单击 Next 接受默认设置。在 Test Methods 对话框中 — 您在这里选择您希望向导为其构建测试的方法 — 仅选择构造方法并单击 Finish。Eclipse 然后将生成 JUnit 测试案例。
打开 PersonTest,进入 testPerson() 方法,使它看起来类似于清单 3。
清单 3. testPerson() 方法
@Test
public void testPerson() {
Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
Logger l = Logger.getLogger(Person.class.getName());
l.info("Name: " + p.getName());
l.info("Age:" + p.getAge());
l.info("Height (cm):" + p.getHeight());
l.info("Weight (kg):" + p.getWeight());
l.info("Eye Color:" + p.getEyeColor());
l.info("Gender:" + p.getGender());
assertEquals("Joe Q Author", p.getName());
assertEquals(42, p.getAge());
assertEquals(173, p.getHeight());
assertEquals(82, p.getWeight());
assertEquals("Brown", p.getEyeColor());
assertEquals("MALE", p.getGender());
}
第 7 步:在 Eclipse 中运行单元测试
在 Eclipse 中,右键单击 Package Explore 中的 PersonTest.java 并选择 Run As > JUnit Test。控制台视图将自动打开以显示 Logger 输出,JUnit 视图表明测试运行正常。