当前课程知识点:Java语言程序设计 > 第三章 面向对象基础 > 3.6 案例:面向对象之类的设计 > 练一练:阅读Employee相关代码并改进
1.尝试EmployeeTest.java代码。并回答,raiseSalary方法有什么用?
每个对象该方法返回的结果一样吗?为什么?
2.进阶要求:使用Java8中的日期类,替换掉Employee类中的hireDay。参考代码见Java8DateTimeTest.java。
LocalDate的使用详解:见附件。
EmployeeTest.java代码
import java.util.*;
/**
* This program tests the Employee class.
* @version 1.11 2004-02-19
* @author Cay Horstmann
*/
public class EmployeeTest
{
public static void main(String[] args)
{
// fill the staff array with three Employee objects
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);
// raise everyone's salary by 5%
for (Employee e : staff)
e.raiseSalary(5);
// print out information about all Employee objects
for (Employee e : staff)
System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay="
+ e.getHireDay());
}
}
class 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 uses 0 for January
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;
}
private String name;
private double salary;
private Date hireDay;
}
Java8DateTimeTest.java
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class Java8DateTimeTest {
public static boolean isMondayToFriday(){
LocalDateTime now = LocalDateTime.now();
DayOfWeek dayOfWeek = now.getDayOfWeek();
System.out.println(dayOfWeek);
if(dayOfWeek!=DayOfWeek.SATURDAY && dayOfWeek!=DayOfWeek.SUNDAY)
return true;
return false;
}
public static void main(String[] args) {
LocalTime localTime = LocalTime.of(0, 0,0);//无时区概念
System.out.println(localTime);
LocalDate localDate = LocalDate.of(1998, 10, 31);
System.out.println(localDate);
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDate,localTime,ZoneId.of("Asia/Shanghai"));//有时区概念
System.out.println(zonedDateTime);
System.out.println(zonedDateTime.toEpochSecond());////机器观点当前秒数
System.out.println(zonedDateTime.toInstant());
System.out.println(zonedDateTime.toInstant().toEpochMilli());//机器观点当前毫秒数
System.out.println(LocalTime.now());//当前时间,当前系统默认时区
System.out.println(LocalDate.now());//当前日期,当前系统默认时区
System.out.println(LocalDateTime.now());//当前日期与时间,当前系统默认时区
LocalDate nowDate = LocalDate.now();
LocalTime nowTime = LocalTime.now();
System.out.println(OffsetDateTime.of(nowDate, nowTime, ZoneOffset.UTC));//
System.out.println(OffsetDateTime.now().toEpochSecond());
System.out.println("Year, YearMonth, Month, MonthDay");
System.out.println("TemporalAmount");
String pattern = "E MM/dd/yyyy";
System.out.println(LocalDate.of(1989, 9, 22).plusDays(5).plusMonths(6).plusWeeks(3).format(DateTimeFormatter.ofPattern(pattern)));
System.out.println(isMondayToFriday());
Duration thirtyDay = Duration.ofDays(30);
System.out.println(thirtyDay.toString());
}
}
-考核方式
-1.1 Java应用、历史与基本特点
-1.2 第一个Java程序
-1.3 Java虚拟机、JRE、JDK等
-1.4 课程学习目标与方法
-1.5 实验指导:开发环境安装与配置
-1.6 Java常用类
-第1章测验 绪论
-第1章 编程题
- 第1章 课件
-2.1 Java基本语法概述
-2.2 数据类型与变量
--2.2.3 小练习:表达式正误判断
-2.3 运算符
--2.3.1 运算符1:算数运算符、赋值运算符、比较运算符
-2.4 选择结构
-2.5 循环结构
--思考:循环的使用
-2.6 方法
-2.7 数组与数组列表
-2.8 引用数据类型
-第2章测验 Java基本语法
-3.1 面向对象基本概念
-3.2 封装与模块化
-3.3 对象的初始化
-3.4 static与final
-3.5 使用包管理类
--练一练:在Eclipse中查看String等常用类的代码
-3.6 案例:面向对象之类的设计
-第3章测验 面向对象基础
-4.1 面向对象继承
--练一练:设计一个Triangle三角形类与Shape形状类,并用UML类图进行描述
-4.2 继承与覆盖
-4.3 继承与多态
-4.4 访问控制符
-4.5 final关键字
-4.6 抽象类
-4.7 面向对象设计
--思考:阅读Manager与Employee代码并回答问题
-4.8 实验指导:Eclipse的使用(自动代码生成)
-第4章测验 面向对象(继承与多态)
-5.1 接口基本概念
-5.2 常用接口
--思考:使用Comparable接口改造Shape及其子类
--思考:Comparable接口与Comparator接口的区别
-5.3 使用接口还是继承
-5.4 案例:DAO模式
-5.5 总结:接口
-5.6 Java8接口新特性:默认方法
-5.7 嵌套类
-5.8 Lambda表达式
-5.9 案例:购物车改进
-第5章测验 面向对象(接口与嵌套类)
-6.1 集合概述
-6.2 List接口
-6.3 Iterator迭代器
-6.4 Set接口
-6.5 Map接口
-6.6 泛型
--6.6.1 泛型
-6.7 集合应用
-6.8 集合其他常用方法
-可选:6.9 Collections工具类
-可选:6.10 Java8集合新特性
-第6章测验 集合框架
-7.1 基本概念
-7.2 程序处理机制
-7.3 异常继承层次
-7.4 异常处理:try...catch...finally
--练一练:try...catch...finally综合练习
-7.5 异常处理:throws与throw关键字
-7.6 不要滥用异常
-第7章测验 异常处理
-8.1 概述
-8.2 输入流、输出流基本概念
-8.3 File类
-8.4 字节流
-8.5 字符流
-8.6 缓冲流
-第8章测验 文件与流