在Java中,最简单的类定义形式为:
- class ClassName
- {
- constructor1
- constructor2
- ...
- method1
- method2
- ...
- field1
- field2
- ...
- }
注释:这里编写类所采用的风格是类的方法在前面,域在后面。这种风格有易于促使人们更加关注接口的概念,消减对实现的注意。
下面看一个非常简单的Employee类。在编写薪金管理系统时可能会用到。
- class Employee
- {
- //constructor
- public Employee(String n, double s, int year, int month, int day)
- {
- name = n;
- salary = s;
- GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
- hireDay = calendar.getTime();
- }
- //a method
- public String getName()
- {
- return name;
- }
- //more methods
- ...
- //instance fields
- private String name;
- private double salary;
- private Date hireDay;
- }
这里将这个类的实现细节分成以下几个部分,并分别在稍后的几节中给予介绍。下面先看看例4-2,它显示了一个使用Employee类的程序代码。
在这个程序中,构造了一个Employee数组,并填入了三个雇员对象:
- Employee staff = new Employee[3];
- staff[0] = new Employee("Carl Cracker", ...);
- staff[1] = new Employee("Harry Hacker", ...);
- staff[2] = new Employee("Tony Tester", ...);
接下来,利用Employee类的raiseSalary方法将每个雇员的薪水提高5%:
- for(Employee e : staff)
- {
- 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对象,并显示他们的状态。
- improt java.util.*;
- /**
- * This program tests the Employee class.
- * @Version 4.2 2012-11-06
- * @author Wcg
- */
- public class EmployeeTest
- {
- public static void main(String[] args)
- {
- //fill the staff array with three Employee objects
- Employee[] staff = new Employee[3];
- staff[0] = new Employee("Carl Cracker", 75000, 1987, 12, 15);
- staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
- staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15);
- //raise everyone's salary by 5%
- for(Employee e : staff)
- {
- e.raiseSalary(5);
- }
- //print out information about all Employee objects
- for(Employee e : staff)
- {
- System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay=" + e.getHireDay());
- }
- }
- }
- class Employee
- {
- public Employee(String n, double s, int year, int month, int day)
- {
- name = n;
- salary = s;
- GregorianCalendar calendar = new GregorianCalendar(year, month, day);
- //GregorianCalendar uses 0 for January
- hireDay = calendar.getTime();
- }
- public String getName()
- {
- return name;
- }
- public double getSalary()
- {
- return salary;
- }
- public Date getHireDay()
- {
- return hireDay;
- }
- public void raiseSalary(double byPercent)
- {
- double raise = salary * byPercent / 100;
- salary += raise;
- }
- private String name;
- private double salary;
- private Date hireDay;
- }
转载于:https://blog.51cto.com/mrwucg/1051586