📄 objectfiletest.java
字号:
//ObjectFileTest.java
//程序保存并加载多个员工和经理对象(其中共享同一员工作为秘书)。
//注意重新加载后秘书对象是统一的--当newStaff[1]得到提薪时,秘书对象能够反映出来
import java.io.*;
import java.util.*;
class ObjectFileTest
{
public static void main(String[] args)
{
Manager boss = new Manager("科凯", 80000,
1987, 12, 15);
boss.setBonus(5000);
Employee[] staff = new Employee[3];
staff[0] = boss;
staff[1] = new Employee("何恒", 50000,
1989, 10, 1);
staff[2] = new Employee("童彤", 40000,
1990, 3, 15);
try
{
// 存储所有员工记录到文件 employee.dat
ObjectOutputStream out = new ObjectOutputStream(new
FileOutputStream("employee.dat"));
out.writeObject(staff);
out.close();
// 重新得到所有的记录进入新数组
ObjectInputStream in = new ObjectInputStream(new
FileInputStream("employee.dat"));
Employee[] newStaff = (Employee[])in.readObject();
in.close();
// 打印新读入员工记录
for (int i = 0; i < newStaff.length; i++)
System.out.println(newStaff[i]);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
class Employee implements Serializable
{
public Employee() {}
public Employee(String n, double s,
int year, int month, int day)
{
name = n;
salary = s;
GregorianCalendar calendar
= new GregorianCalendar(year, month - 1, day);
// GregorianCalendar 的一月从0 开始
hireDay = calendar.getTime();
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public Date getHireDay()
{
return hireDay;
}
public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
}
public String toString()
{
return getClass().getName()
+ "姓名=" + name
+ ",工资=" + salary
+ ",工龄=" + hireDay
+ "]";
}
private String name;
private double salary;
private Date hireDay;
}
class Manager extends Employee
{
/**
@param n the employee's name
@param s the salary
@param year the hire year
@param month the hire month
@param day the hire day
*/
public Manager(String n, double s,
int year, int month, int day)
{
super(n, s, year, month, day);
bonus = 0;
}
public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
public void setBonus(double b)
{
bonus = b;
}
public String toString()
{
return super.toString()
+ "[奖金=" + bonus
+ "]";
}
private double bonus;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -