Calendar类
被abstract修饰,因此不能直接创建对象。
创建对象方式:Calendar calendar = Calendar.getInstance();
常用方法
get()方法
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));等
注意
获取月份是从0开始的,星期是从星期日算作第一天
set()方法
calendar.set(Calendar.YEAR,2010);
calendar.set(Calendar.MONTH,11);
设置月份时,设置几月份就是几月份,星期也是
LocalDate类
在JDK1.8中,对时间体系进行了新的划分,将日期和时间以及其他的信息进行分割,分出来一个新的代表时间的包。
LocalDate date = LocalDate.now();
获取当前时间,只获取到年月日
LocalDate date1 = LocalDate.of(2018, 11, 30);
获取指定时间
System.out.println(date.plus(3, ChronoUnit.DAYS));
增加时间
System.out.println(date.minus(5, ChronoUnit.YEARS));
减少时间
LocalTime类
和LocalDate类相同
练习
已知上海股市是在每一个月的第三周的周六进行交易,其他时间是无法交易的。输入一个时间
判断这个时间(20210316)是否允许交易并且给用户一个提示:交易未开始,交易已结束,交易进行中
public static void main(String[] args) throws ParseException {
//获取用户输入事件
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:yyyyMMdd");
String str = scanner.nextLine();
//文字转换为日期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
Date date = simpleDateFormat.parse(str);
// System.out.println(date);
//将日期转换为日历类
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int week = calendar.get(Calendar.WEEK_OF_MONTH);
int day = calendar.get(Calendar.DAY_OF_WEEK);
//判断是否为每个月的第三周的周六
if (week < 3 || week == 3 && day < 7){
System.out.println("交易未开始");
}else if (week == 3 && day == 7){
System.out.println("交易正在进行");
}else {
System.out.println("交易结束");
}
}
异常
java.lang.Throwable 是java中所有异常和错误的父类
Error(错误):程序中出现了非常严重的问题,不修改源代码,不能执行
Exception(异常):程序中出现了一般性问题,处理掉,程序可以继续执行
异常分为两大类:
// 编译期异常:除了运行时异常,都是编译期异常
// 运行时异常:RuntimeException和它的子类都是运行时异常
编译期异常在编译期间就会报错,必须处理
// 运行时异常在编译期间不会报错,写代码时候不用处理
// throw 异常的对象; 向外部抛出异常
// throws 异常的类名; 程序中出现异常,不处理,调用方法的调用者处理
//throws 后面可以跟多个异常,使用,隔开
//throws 后面的多个异常如果是有同一个父类,那么可以直接throws这个父类
异常的处理方式
try{
可能出现异常的代码;
}catch(捕获的异常类名 变量名){
出现异常后的处理方案;
}
异常被捕获后,代码可以继续执行
try中如果没有出现异常,catch中代码不会执行
1.如果出现了多个异常,并且每一个异常的处理方式都不一样,可以写多个catch分别进行捕获
2.如果所有的异常的处理方式都一样,可以捕获这些异常的父类,然后进行统一的处理
3.如果有部分异常处理方式相同,那么可以将这些异常进行分组捕获 -->异常和异常之间用|隔开
如果有父子类异常同时需要捕获,那么应该先捕获子类异常,再捕获父类异常
//自定义异常的步骤
// 1.定义一个类继承异常类
// 2.提供无参构造和有参构造
// 3.有参构造中调用父类的有参构造即可
// 自定义异常
//class 异常名 extends 异常
// 异常不影响重载(不抛异常,抛不同异常都不影响)
// 在方法重写的时候,子类抛出的编译时异常不能超过父类对应方法的编译时异常的范围
// 重写不抛异常是可以的 抛相同异常也可以 运行时异常对于重写没有影响
// 总结:重载是指在同一个类中存在方法名一致而参数列表不同的方法。重载和修饰符、返回值以及异常都没有关系。
// 重载本身是一种编译时多态
重写:重写是指在父子类中存在了方法签名一致的非静态方法。
1.在构成重写的时候,要求子类重写的方法的权限修饰符的范围要大于等于父类对应的权限修饰符的范围。
2.如果父类方法的返回值类型是基本数据类型/void,那么要求子类方法的返回值类型要和父类保持一致
3.如果父类方法的返回值类型是引用数据类型,那么要求子类方法的返回值类型要么和父类的返回值类型一致,要么是父类方法返回值类型的子类
4.另外,子类重写的方法抛出的编译时异常不能超过父类对应方法的编译时异常的范围。
重写本身是一种运行时多态