JavaTM 程序设计语言 基础: 第 1 部分
第 2 课:创建应用程序

[<<返回] [目录] [下一个>>]

采用 JavaTM 语言(Java 程序)编写的所 有程序都是由类组成的。由于所有的类都具有相同的结构并共享通用的组成部分, 所以所有的 Java 程序都非常类似。

本课阐述通过一个类创建的简单应用程序的结构和组成部分。下一课将讨论 applet 程序的类似内容。

应用程序的结构和组成部分

域和方法

构造函数

更多信息


应用程序的结构和组成部分

应用程序是采用类创建的。一个 class (类)类似于 Pascal 程序设计语言中的一条 RECORD(记录)或 C 程序设计语言中的一 个 struct(结构),用于把相关数据存放到 fields(域) 中, 其中域有不同的类型。例如,您可以把文本串存放到一个域中、把整数存放 到另一个域中、把浮点数存放到第三个域中。类与 RECORD(记录) 或 struct(结构)之间的区别是,类还定义了数据的操作方法。

例如, 一个非常简单的类可存放一串文本并定义一种置串方法、一种取串并 打印输出到控制台的方法。数据操作方法称为 accessor 方法(存取方法)。

每个应用程序都需要一个带有一种 main 方法(主方法) 的类。该 类为程序的输入点,也是用于传递给运行该应用程序的 java解释 器命令的类名。

main(主)方法中的代码在程序开始时首先执行, 是 controller类 accessor 方法被调用来操作数据的控制点。

以下为第 1 课中 示例程序 的再次举例。它没有域或 accessor 方法,但由于它是示例程序中 唯一的类,所以它有 main 方法(主方法)。

   class ExampleProgram {
      public static void main(String[] args){
        System.out.println("I'm a Simple Program");
      }
   }

关键字 public static void 的含义表示:Java1 虚拟机(JVM)可调用程序的 main 方法来开始执行程序(public <公用的>),而无需创建类的实例(static<静态的>),而且该程序也不会在结 束时向 Java VM 解释器返回数据(void<无返回值的>)。

类实例是类的可执行备份,而类则描述了数据和动作,您需要通过类实例收集和处 理数据。左图列出了 ExampleProgram 类的三种实例,分别名为: FirstInstanceSecondInstanceThirdInstance

main方法是一个静态方法,用于为 Java VM 解释器提供一种开 始运行类而无需首先创建主控类的实例的方法。主控类的实例在程序启动后在 main 方法中创建。

简单示例程序的 main 程序并不创建 ExampleProgram 类的实例,因为没有这个需要。ExampleProgram 类没有其他方法 或域,因此也就没有来自 main 方法的类实例需要访问它们。在 Java 平台中,只要某个类的静态方法没有调用非静态方法或域,您就可以在不创 建该类实例情况下实现该类。

ExampleProgram 类只调用 System.out.println。 其中 java.lang.System 类有一个类型为PrintStream 的静态 out 域。

类的静态域和静态方法可被其他程序调用,而无需创建该类的实例。所以,正 如 Java VM 解释器命令可以调用 ExampleProgram 类中的 static main 方法而无需创建 ExampleProgram 类 的实例一样,ExampleProgram 类可以调用 System 类中的 static println 方法而无需创建 System 类的实例。

不过,程序必须创建一个类实例来访问其非静态域和程序。有关访问静态和非 静态域和方法的说明,将在以下章节通过多个示例作进一步的讨论。

域和方法

LessonTwoA.java 程序通过修改简单程序后,把文本串存放到称作 text的静态域中。 text 域是一个静态域,所以其数据可被静态调用程序直接存取到 out.println中而无需创建 LessonTwoA 类的实例。

class LessonTwoA {
   static String text = "I'm a Simple Program";
   public static void main(String[] args){
        System.out.println(text);
   }
}

程序LessonTwoB.javaLessonTwoC.java 在程序中添加了一个 getText 方法,以检索和打印文本数据。

程序LessonTwoB.java 通过非静态 getText 方法访问静态 text 域。非静 态方法和域被称为实例方法和域。这种方法要求在 main 方法中创 建 LessonTwoB 类的实例。为使示例有趣,本例程序包括一个静态 文本域和一个用于检索该域的非静态实例方法(getStaticText)。


注意:域和方法的返回值均为 String(字符串 型)。
class LessonTwoB {

   String text = "I'm a Simple Program";
   static String text2 = "I'm static text";

   String getText(){
        return text;
   }

   String getStaticText(){
        return text2; 
   }

   public static void main(String[] args){
        LessonTwoB progInstance = new LessonTwoB();
        String retrievedText = progInstance.getText();
        String retrievedStaticText = 
                 progInstance.getStaticText(); 
        System.out.println(retrievedText);
        System.out.println(retrievedStaticText);
   }
}

程序 LessonTwoC.java 通过静态 getText 方法访问静态 text 域。该静态 方法和域被称为类方法和类域。利用这种方法,程序就可以直接调用 getText 方法而无需创建 LessonTwoC 类的实例。

class LessonTwoC {

   static String text = "I'm a Simple Program";

//Accessor method
   static String getText(){
        return text;
   }

   public static void main(String[] args){
        String retrievedText = getText();
        System.out.println(retrievedText);
   }
}

这样,类方法就能够只操作类域,而实例方法则可以对类和实例域进行操作。

也许,您可能希望知道二者之间有什么区别。简言之,在类域中存放或设定的 数据只有一个备份,而每个实例在实例域中存放或设定的数据则各有自己的备份。

上图为含有一个静态域和一个实例域的三个类实例。运行时,静态域 A 中的数 据有一个备份,而每个实例都指向这个备份。在第一个实例上调用 setFieldA(50) 时,域A备份的值在36到50之间变化而所有三个实例都指向新的值。但是,当在第 一个实例上调用setFieldB (25)时,域 B 的值在 0 到 25 之间变化,原因是每 一个实例都有自己的域 B 备份。

有关这一主题的详细讨论见 Java 教程中的 了解实例和类成员 一课。/P>

构造函数

类都有一个叫做 构造函数 的、在类实例创建时调用的特殊方法。这个类构造 函数始终与类同名,且为无返回值类型。程序 LessonTwoD 使 LessonTwoB 程序转换为采用构造函数来初始化 文本串。


注意:


class LessonTwoD {

   String text;

//Constructor
   LessonTwoD(){
     text = "I'm a Simple Program";
   }

//Accessor method
   String getText(){
        return text;
   }

   public static void main(String[] args){
        LessonTwoD progInst = new LessonTwoD();
        String retrievedText = progInst.getText();
        System.out.println(retrievedText);
   }
}

总结

用于把一个短文本串打印输出到控制台的简短程序可能能够实现 main 方法中的任何操作,并取消构造函数、text 域和 getText 方法。但是,本课采用了一个非常简短程序来为您显示基本 Java 程序中的结 构和组成部分。

更多信息

这方面的详细讨论见 Java 教程 了解实例和类成员 一课。


1本网站中所使用的术语“Java virtual machine (Java 虚拟机)”或“JVM”是指适用于 Java 平台虚拟机。

[TOP]

 

常见问答
下载中心
产品简介
 
 
Solaris论坛
 
   
 
null