在Java中,最简单的类定义形式为:

 
  
  1. class ClassName  
  2. {  
  3.     constructor1  
  4.     constructor2  
  5.     ...  
  6.     method1  
  7.     method2  
  8.     ...  
  9.     field1  
  10.     field2  
  11.     ...  
  12. }  

 

注释:这里编写类所采用的风格是类的方法在前面,域在后面。这种风格有易于促使人们更加关注接口的概念,消减对实现的注意。

下面看一个非常简单的Employee类。在编写薪金管理系统时可能会用到。

 

 
  
  1. class Employee 
  2.     //constructor 
  3.     public Employee(String n, double s, int year, int month, int day) 
  4.     { 
  5.     name = n; 
  6.     salary = s; 
  7.     GregorianCalendar calendar = new GregorianCalendar(year,     month - 1, day); 
  8.     hireDay = calendar.getTime(); 
  9.     } 
  10.     //a method 
  11.     public String getName() 
  12.     { 
  13.     return name; 
  14.     } 
  15.     //more methods 
  16.     ... 
  17.     //instance fields 
  18.     private String name; 
  19.     private double salary; 
  20.     private Date hireDay; 

这里将这个类的实现细节分成以下几个部分,并分别在稍后的几节中给予介绍。下面先看看例4-2,它显示了一个使用Employee类的程序代码。

在这个程序中,构造了一个Employee数组,并填入了三个雇员对象:

 

 
  
  1. Employee staff = new Employee[3]; 
  2. staff[0] = new Employee("Carl Cracker", ...); 
  3. staff[1] = new Employee("Harry Hacker", ...); 
  4. staff[2] = new Employee("Tony Tester", ...); 

接下来,利用Employee类的raiseSalary方法将每个雇员的薪水提高5%:

 

 
  
  1. for(Employee e : staff) 
  2.     System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay=" + e.getHireDay()); 

注意,在这个示例程序中包含两个类:一个Employee类;一个带有public访问修饰符的EmployeeTest类。EmployeeTest类包含了main方法,其中使用了前面介绍的指令。

源文件名是EmployeeTest.java,这是因为文件名必须与public类的名字相匹配。在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类。

接下来,当编译这段源代码的时候,编译器将在目录下创建两个类文件:EmployeeTest.class和Employee.class。

将程序中包含main方法的类名字提供给字节码解释器,以便启动这个程序:

java EmployeeTest

字节码解释器开始运行EmployeeTest类的main方法中的代码。在这段代码中,先后构造了三个心Employee对象,并显示他们的状态。

 

 
  
  1. improt java.util.*; 
  2. /** 
  3.  * This program tests the Employee class. 
  4.  * @Version 4.2 2012-11-06 
  5.  * @author Wcg 
  6. */ 
  7. public class EmployeeTest 
  8.     public static void main(String[] args) 
  9.     { 
  10.         //fill the staff array with three Employee objects 
  11.         Employee[] staff = new Employee[3]; 
  12.         staff[0] = new Employee("Carl Cracker"7500019871215); 
  13.         staff[1] = new Employee("Harry Hacker"500001989101); 
  14.         staff[2] = new Employee("Tony Tester"400001990315); 
  15.         //raise everyone's salary by 5% 
  16.         for(Employee e : staff) 
  17.         { 
  18.             e.raiseSalary(5); 
  19.         } 
  20.         //print out information about all Employee objects 
  21.         for(Employee e : staff) 
  22.         { 
  23.             System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay=" + e.getHireDay()); 
  24.         } 
  25.     } 
  26.  
  27. class Employee 
  28.     public Employee(String n, double s, int year, int month, int day) 
  29.     { 
  30.         name = n; 
  31.         salary = s; 
  32.         GregorianCalendar calendar = new GregorianCalendar(year, month, day); 
  33.         //GregorianCalendar uses 0 for January 
  34.         hireDay = calendar.getTime(); 
  35.     } 
  36.     public String getName() 
  37.     { 
  38.         return name; 
  39.     } 
  40.     public double getSalary() 
  41.     { 
  42.         return salary; 
  43.     } 
  44.     public Date getHireDay() 
  45.     { 
  46.         return hireDay; 
  47.     } 
  48.     public void raiseSalary(double byPercent) 
  49.     { 
  50.         double raise = salary * byPercent / 100
  51.         salary += raise; 
  52.     } 
  53.     private String name; 
  54.     private double salary; 
  55.     private Date hireDay;