在一些简单的Java程序中,都含有一个main方法,现在开始学习设计复杂应用所需要的各种主力类(workclass class)。通常,这些类没有main方法,却有自己的实例域和方法。要想创建一个完整的程序,应该将若干类组合在一起,其中只有一个类有main方法。
1、在Java中,最简单的类定义形式为:
class ClassName{
field1
field2
...
constructor1
constructor2
...
method1
method2
...
}
下面看一个简单的实例Employee类。在编写薪金管理系统时可能会用到。
class Employee
{
//instance fields
private String name;
private double salary;
private LocalDate hireDay;
//constructor
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
hireDay = LocalDate.of(year, month, day);
}//构造器
//a method
public String getName()
{
return name;
}
//more methods
...
}
Employee类的实际使用如下:
public class EmployeeTest
{
public static void main(String[] args)
{
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);
for(Employee : e staff)
e.raiseSalary(5);//将薪水提高5%·
for(Employee e: staff)
System.out.println("name="+e.getName()+", salary="+e.getSalary()+", hireDay="+e.getHierDay());
}
}
Class Employee
{
private String name;
private double salary;
private LocalDate hireDay;
//关键字private确保直邮Employee类自身的方法能够访问这些实例域,而其他方法不能。
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意味着任何类的人和方法都可以调用这歌方法
public double getSalary()
{
return salay;
}
public LocalDate getHireDay()
{
return hireDay;
}
public void raiseSalary(double byPercent)
{
double raise = salay*byPercent/100;
salary += raise;
}//提高薪水
}
在以上程序运行时,字节码解释器开始运行EmployeeTest类的main方法中的代码。在这段代码中,先后构造了三个新Employee对象,并显示它们的状态。
2、构造器
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
hireDay = LocalDate.of(year, month, day);
}
可以看到,构造器与类同名。在构造Employee类的对象时,构造器会运行,以便将实例域初始化为所希望的状态。
注:不要在构造器中定义与实例域重名的局部变量。
在每一个方法中,关键字this表示隐式参数
3、在有些时候,需要获得或设置实例域的值。因此,应该提供下面三项内容:
一个私有的实例域
一个公有的域访问器方法
一个公有的域更改器方法
4、final实例域
可以将定义域定义为final。构建对象时必须初始化这样的域。
final修饰符大都应用于基本类型域,或不可变类的域。
对于可变的类,使用final修饰符可能会对读者造成混乱。