import java.time.*;
/**
* This program tests Employee class.(这个程序测试Employee类)
* @version 11.27 2021-08-16
* @author Cay Horstman
*/
public class EmployeeTest
{
public static void main(String[] args)
{
//fill the staff array with three Employee objects(用三个Employee对象填充staff数组)
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("TonyTester",40000,1990,3,15);
//raise everyone's salary bu 5%(提高每个员工5%的工资)
for (Employee e : staff)
e.raiseSalary(5);
//print out information about all Employee objects(打印所有Employee对象的相关信息)
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;
}
}
既然在上面已经对n、s、year、month、day等已经进行了定义,为什么后面还要使用return,return的具体作用是干嘛的(并不仅限与本篇代码)
return是返回的意思,在Java中定义的方法如果有返回值,比如public String getName(),需要返回String类型,那么getName方法里需要return一个String类型的值。
你问的其实是两个问题
1.return是和函数绑定的,只有在函数定义中才能使用,在函数中使用return来作为该函数被调用时的返回值
2.为什么要写一个函数返回已经定义的对象,这是面向对象的特性——封装
首先注意到变量的访问权限是private,说明只能通过定义的函数来对变量进行修改,这也是我们在java中实现封装的手段,因为如果你salary不是private,别人直接tom.salary=-100
,直接把tom的工资设置为负数了,这显然不合理,所以封装提供了一种更加安全的变量访问方式,你不能直接修改变量,而是通过我提供的函数操作,这样我就可以限制你的非法操作。
当然这只是封装的一个优点,事实上封装的目的是为了解耦合,这是面向对象设计的主要思想,就不展开说了
(1)返回方法指定类型的值(这个值总是确定的),也可以是对象 例如定义一个方法 具有返回值 return i代表方法执行结束 把这个值吐出去
(2)方法的结束 例如main方法直接return 代表直接结束
两种形式:(1)有返回类型 例如:return i;
(2)无返回类型 return;
一般方法前有void代表无返回值,没有void有返回值。
//这几个属性都是私有的
private String name;
private double salary;
private LocalDate hireDay;
//new 新建对象时,通过构造方法给私有属性赋值了
public Employee(String n,double s,int year,int month,int day)
{
name = n;
salary = s;
hireDay = LocalDate.of(year,month,day);
}
//定义几个get方法,给外部访问私有的属性
//name是String类型的, 所以get方法前要用String
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public LocalDate getHireDay()
{
return hireDay;
}
//外部需要访问Employee类的对象e的私有属性,需要通过定义的get方法访问
//程序运行并不能像我们看到的一样,上面定义了,这里也不能直接用,要通过对象去访问
for (Employee e : staff)
System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ".hireDay=" + e.getHireDay());
// 举个例子,把学生的姓名各种信息,成绩打印在一张纸上(学生的属性),然后装入档案袋(学生对象),再放到书架上(程序分配的内存);
//需要查询学生的信息,就要从书架(内存)找到对应的档案袋(对象)