自定义用户类
import java.time.*;
/**
* 用户自定义类
* @version 2022-01-15
* @author zengzhicheng
*
*/
public class EmployeeTest {
public static void main(String[] args) {
//构造Employee数组
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);
//利用Employee类的raiseSalary方法将每个雇员的薪水提高百分之五
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;
}
}
一个源文件只能有一个公共类,但可以有任意数目的非公有类。
剖析Employee类
这个类包含一个构造器和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)
在Employee类的实例域用来存放要操作的数据:
private String name;
private double salary;
private LocalDate hireDay;
private确保只有Eeployee类自身的方法能够访问这些实例域,而其他类的方法不能读写这些域;
强烈建议将实例域标记为private;
从构造器开始
先看看Employee类的构造器
public Employee(String n,double s,int year,int month,int day)
{
name = n;
salary = s;
hireDay = LocalDate.of(year, month, day);
}
可以看见,构造器与类同名。在构造Employee类对象时,构造器会运行,以便将实例域初始化为所希望的状态。
构造器与其他的方法有一个重要的不同。构造器总是伴随着New操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的;
构造器的特点
- 构造器与类同名
- 每个类可以有一个以上的构造器
- 构造器可以有0个、1个或多个参数
- 构造器没有返回值
- 构造器总是伴随着new操作一起被调用
隐式参数以显式参数
方法用于操作对象以及存取它们的实例域。例如:
public void raiseSalary(double byPercent)
{
double raise = salary * byPercent /100;
salary +=raise;
}
将调用这个方法的对象的salary实例域设置为新值。
看看下面这个调用:
number007.raiseSalary(5);
他的结果将number007.salary域的值增加5%。具体执行以下语句:
double raise = number.salary * 5 /100;
number007.salary +=raise;
raiseSalary方法有两个参数。第一个参数称为隐式参数,是出现在方法名前Employee类对象。第二个参数位于方法名后面包括号中的数值,这是一个显示参数。
在每一个方法中,关键字 this表示隐式参数
如果需要的化可以用以下方式编写raiseSalary方法
public void raiseSalary(double byPercent)
{
double raise = this.salary * byPercent /100;
this.salary +=raise;
}