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[0]=new Employee("Harry Hacker",50000,1989,10,1);
staff[0]=new Employee("Tony Tester",40000,1990,3,15);
for(Employee e : staff)
e.raiseSalary(5);
for(Employee e : staff)
System.out.println("name="+e.getName()+",salary="+e.getSalary()+",hireDay="+e.getHireDay());
}
}
class Employee
{
private String name;
private double salary;
private LocalDate hireDay;
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;
}
}
在上述实例程序中包含两个类:EmployeeTest Employeel类和带有public访问修饰符的EmployeeTest。EmployeeTest类包含了main方法。源文件名是EmployeeTest.java,这是因为文件名必须与public类的名字相匹配。在一个文件中,只能有一个公有类,但可以有任意数目的非共有类。
接下来,当编译这段代码的时候,编译器将在目录下创建两个类文件:EmployeeTest.class 和Employee.class
将程序中包含main方法的类名提供给字节码解释器,以便启动这个程序: java EmployeeTest
字节码解释器开始运行Test1类的main方法中的代码。在这段代码中,先后构造了三个新的Employee对象,并显示它们的状态
刨析Employee类
下面对Employee类进行刨析。首先从这个类的方法开始。通过查看原代码会发现,这个类包含一个构造器和四个方法
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)
这个类的方法所有都被标记public。关键字public意味着任何类的任何方法都乐意调用这个方法
接下来,需要注意Emplouee类的实例中有三个实例域用来存放将要操作的数据:(实例域就是一个对象的成员变量,或者说是一个对象的属性)
private String name;
private double salary;
private LocalDate hireDay;
关键字private确保只有Employee类自身的方法能够访问这些实例域,而其他类的方法不能读写这些域。
public(不推荐,因为不安全,任何方法都能够读写这些域)
从构造器开始
下面看看Employ类的构造器:
public Employee(String n,double s,int year,int month,int day)
{
name=n;
salary=s;
hireDay=LocalDate.of(year, month, day);
}
可以看出构造器与类同名。在构造Employee类的对象时,构造器会运行以便将实例域初始化所希望的状态。
例如,在使用下条代码创建Employee类实例时:
new Employee("Carl Cracker",75000,1987,12,15);
会将实例域设置为:
name = "Carl Cracker";
salary = 75000;
hireDay = LocalDate.of1987,12,15();
构造器与其他的方法有一个重要的不同。构造器总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。
构造器与类名相同
每个类可以有一个以上的构造器
构造器可以有0个、1个或者多个参数
构造器没有返回值
构造器总有伴随new操作一起调用