内容


第 5 单元:您的第一个 Java 类

在 Eclipse 中创建和测试类

Comments

开始之前

本单元是 “Java 编程入门” 学习路径的一部分。尽管各单元中讨论的概念具有独立性,但实践组件是在您学习各单元的过程中逐步建立起来的,推荐您在继续学习之前复习 前提条件、设置和单元细节

单元目标

  • 使用 Eclipse Package Explorer 创建包和声明类
  • 向类添加变量和方法
  • 了解 Logger 类如何帮助您关注应用程序的行为
  • 使用 Eclipse 代码生成器
  • 创建一个 JUnit 测试案例并在 Eclipse 内运行它

您的 Person 类

您即将要创建和使用第一个 Java 类了 — 您目前在摘要中了解的同一个 Person 类。下面的视频演示了本单元的所有步骤。首先观看它,然后我将以文字形式简要复述这些步骤,同时更仔细地分析代码。

Java 编程入门,第 5 单元:您的第一个 Java 类

Java 编程入门,第 5 单元:您的第一个 Java 类
Java 编程入门,第 5 单元:您的第一个 Java 类

点击查看视频演示查看抄本

第 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 步:添加类变量

第 4 单元 中,您已看到如何开始扩充 Person 类,但我没有过多地解释语法。现在我将更正式地介绍如何添加类变量。

出于方便,清单 1 复制了您在第 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 单元中,您简要了解了如何定义 accessSpecifiervariableName

dataType 可以是原语类型或对另一个对象的引用。例如,在 清单 1 中可以注意到,age 是一个 int(原语类型),name 是一个 String(对象)。JDK 带来了大量有用的类,比如 java.lang.String,而且 java.lang 包中的类不需要导入(Java 编译器提供的一种速记形式)。但无论 dataType 是 JDK 类(比如 String)还是用户定义的类,语法都基本相同。

表 1 给出了您可能经常使用的 8 种原语数据类型,包括在您没有显式初始化一个成员变量的值时,采用的原语的默认值。

表 1. 原语数据类型
类型大小默认值值范围
boolean不适用falsetrue 或 false
byte8 位0-128 到 127
char16 位(无符号)\u0000' \u0000' 到 \uffff' 或 0 到 65535
short16 位0-32768 到 32767
int32 位0-2147483648 到 2147483647
long64 位0-9223372036854775808 到 9223372036854775807
float32 位0.01.17549435e-38 到 3.4028235e+38
double64 位0.04.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,然后将该对象的状态打印到控制台。从这种意义上讲,“测试” 可确保调用的构造方法上的属性顺序是正确的(也即它们的设置为了正确的属性)。

在 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 视图表明测试运行正常。

进一步探索

课程:类和对象

Dave Thomas、Andy Hunt 和 Jeff Langr 编写的 Java 8 中使用 JUnit 的实用单元测试

Kent Beck 编写的 JUnit 口袋书

Allen B. Downey 和 Chris Mayfield 编写的Java 编程思想(参阅第 11 章 “类”)

Cay Horstman 编写的 Java 核心技术(参阅 “第 4 课:对象和类”)

上一单元:Java 语言入门下一单元:向 Java 类添加行为


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Java technology
ArticleID=1038359
ArticleTitle=第 5 单元:您的第一个 Java 类
publish-date=10112016