如何设计主力类,通常这些类没有main方法,却有自己的实践域和实例方法。要想创建一个完整的程序,应该将若干类组合在一起,其中只有一个类有main方法。
在Java中,最简单的类定义形式为:
class ClassName
{
field1
field2
...
constructor1
constructor2
...
method1
method2
...
}
薪金管理系统的实际应用:
import java.time.*;
/**
* @author YeSuX
*/
public class EmployeeTest
{
public static void main(String[] args)
{
Employee[] staff = new Employee[3]; //创建一个可以存储3个Employee对象的staff数组
staff[0] = new Employee("Carl Cracker",75000,1987,12,15);
staff[1] = new Employee("Harry Hacker",50000,1987,10,1);
staff[2] = new Employee("Ton Tester",40000,1990,3,15);
//数组初始化
for (Employee e : staff) {
e.raiseSalary(5);
}
//每个人工资提高5%
for (Employee e : staff) {
System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay="
+ e.getHireDay());
}
}
}
/**
* Employee
*/
class Employee {
private String name;
private double salary;
private LocalDate hireDay; //定义LocalDate对象变量hirDay
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
hireDay = LocalDate.of(year, month, day);
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public LocalDate getHireDay()
{
return hireDay;
}
public void raiseSalary(double byPercent)
{
double raise = salary *byPercent/100;
salary += raise;
}
}
许多程序员习惯于将每一个类存在一个单独的源文件中。例如,将Employee类存放在文件Employee.java中,将EmployeeTest类存放在文件EmployeeTest.java中。
若喜欢这样组织文件,将可以有两种编译源程序的方法。javac Employee*.java
或者javac EmployeeTest.java
该类包含一个构造器和4个方法
public Employee(String n, double s, int year, int month, int day)
public String getName()
public double getSalary()
public LocalDate getHireDay()
public void raiseSalary(double byPercent)
该类中有三个实例域用来存放将要操作的数据
private String name;
private double salary;
private LocalDate hireDay;
可以用public标记实例域,但是这一做法完全破环了封装。因此,这里强烈建议将实例域标记为private。
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
hireDay = LocalDate.of(year, month, day);
}
构造器与类同名。在构造Employee类的对象时,构造器会运行,以便将实例域初始化为所希望的状态。构造器总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。
一个方法可以访问所属类的所有对象的私有数据。
final修饰符大都应用于不可变类的域:如果类中的每个方法都不会改变其对象。必须确保在每个构造器执行之后,这个域的值被设置,并且在后面的操作中,不能够再对它进行修改。
class Employee
{
private final String name;
...
}