今日内容
JDK7 时间相关类
JDK8 时间相关类
包装类
综合练习
Collection 集合
教学目标
第一章 Date 类 1.1 Date 概述 java.util.Date`类 表示特定的瞬间,精确到毫秒。
继续查阅 Date 类的描述,发现 Date 拥有多个构造函数,只是部分已经过时,我们重点看以下两个构造函数
public Date()
:从运行程序的此时此刻到时间原点经历的毫秒值,转换成 Date 对象,分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
public Date(long date)
:将指定参数的毫秒值 date,转换成 Date 对象,分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
tips: 由于中国处于东八区(GMT+08:00)是比世界协调时间/格林尼治时间(GMT)快 8 小时的时区,当格林尼治标准时间为 0:00 时,东八区的标准时间为 08:00。
简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定 long 类型的构造参数,可以自定义毫秒时刻。例如:
1 2 3 4 5 6 7 8 9 10 import java.util.Date;public class Demo01Date { public static void main (String[] args) { System.out.println(new Date ()); System.out.println(new Date (0L )); } }
tips:在使用 println 方法时,会自动调用 Date 类中的 toString 方法。Date 类对 Object 类中的 toString 方法进行了覆盖重写,所以结果为指定格式的字符串。
1.2 Date 常用方法 Date 类中的多数方法已经过时,常用的方法有:
public long getTime()
把日期对象转换成对应的时间毫秒值。
public void setTime(long time)
把方法参数给定的毫秒值设置给日期对象
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class DateDemo02 { public static void main (String[] args) { Date d = new Date (); long time = System.currentTimeMillis(); d.setTime(time); System.out.println(d); } }
小结:Date 表示特定的时间瞬间,我们可以使用 Date 对象对时间进行操作。
java.text.SimpleDateFormat
是日期/时间格式化类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在 Date 对象与 String 对象之间进行来回转换。
格式化 :按照指定的格式,把 Date 对象转换为 String 对象。
解析 :按照指定的格式,把 String 对象转换为 Date 对象。
2.1 构造方法 由于 DateFormat 为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
public SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。参数 pattern 是一个字符串,代表日期时间的自定义格式。
2.2 格式规则 常用的格式规则为:
标识字母(区分大小写)
含义
y
年
M
月
d
日
H
时
m
分
s
秒
备注:更详细的格式规则,可以参考 SimpleDateFormat 类的 API 文档。
2.3 常用方法 DateFormat 类的常用方法有:
小结:DateFormat 可以将 Date 对象和字符串相互转换。
2.4 练习 1(初恋女友的出生日期) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 String str = "2000-11-11" ;SimpleDateFormat sdf1 = new SimpleDateFormat ("yyyy-MM-dd" );Date date = sdf1.parse(str);SimpleDateFormat sdf2 = new SimpleDateFormat ("yyyy年MM月dd日" );String result = sdf2.format(date);System.out.println(result);
2.5 练习 2(秒杀活动) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 String startstr = "2023年11月11日 0:0:0" ;String endstr = "2023年11月11日 0:10:0" ;String orderstr = "2023年11月11日 0:01:00" ;SimpleDateFormat sdf = new SimpleDateFormat ("yyyy年MM月dd日HH:mm:ss" );Date startDate = sdf.parse(startstr);Date endDate = sdf.parse(endstr);Date orderDate = sdf.parse(orderstr);long startTime = startDate.getTime();long endTime = endDate.getTime();long orderTime = orderDate.getTime();if (orderTime >= startTime && orderTime <= endTime) { System.out.println("参加秒杀活动成功" ); } else { System.out.println("参加秒杀活动失败" ); }
第三章 Calendar 类 3.1 概述
java.util.Calendar 类表示一个“日历类”,可以进行日期运算。它是一个抽象类,不能创建对象,我们可以使用它的子类:java.util.GregorianCalendar 类。
有两种方式可以获取 GregorianCalendar 对象:
直接创建 GregorianCalendar 对象;
通过 Calendar 的静态方法 getInstance()方法获取 GregorianCalendar 对象【本次课使用】
3.2 常用方法
方法名
说明
public static Calendar getInstance()
获取一个它的子类 GregorianCalendar 对象。
public int get(int field)
获取某个字段的值。field 参数表示获取哪个字段的值, 可以使用 Calender 中定义的常量来表示: Calendar.YEAR : 年 Calendar.MONTH :月 Calendar.DAY_OF_MONTH:月中的日期 Calendar.HOUR:小时 Calendar.MINUTE:分钟 Calendar.SECOND:秒 Calendar.DAY_OF_WEEK:星期
public void set(int field,int value)
设置某个字段的值
public void add(int field,int amount)
为某个字段增加/减少指定的值
3.3 get 方法示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 public class Demo { public static void main (String[] args) { Calendar instance = Calendar.getInstance(); System.out.println(instance); int year = instance.get(Calendar.YEAR); int month = instance.get(Calendar.MONTH) + 1 ; int day = instance.get(Calendar.DAY_OF_MONTH); int hour = instance.get(Calendar.HOUR); int minute = instance.get(Calendar.MINUTE); int second = instance.get(Calendar.SECOND); int week = instance.get(Calendar.DAY_OF_WEEK); System.out.println(year + "年" + month + "月" + day + "日" + hour + ":" + minute + ":" + second); System.out.println(getWeek(week)); } public static String getWeek (int w) { String[] weekArray = {"星期日" , "星期一" , "星期二" , "星期三" , "星期四" , "星期五" , "星期六" }; return weekArray[w - 1 ]; } }
3.4 set 方法示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class Demo { public static void main (String[] args) { Calendar c1 = Calendar.getInstance(); c1.set(Calendar.YEAR, 1998 ); c1.set(Calendar.MONTH, 3 - 1 ); c1.set(Calendar.DAY_OF_MONTH, 18 ); int w = c1.get(Calendar.DAY_OF_WEEK); System.out.println("班长出生那天是:" + getWeek(w)); } public static String getWeek (int w) { String[] weekArray = {"星期日" , "星期一" , "星期二" , "星期三" , "星期四" , "星期五" , "星期六" }; return weekArray[w - 1 ]; } }
3.5 add 方法示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public class Demo { public static void main (String[] args) { Calendar c2 = Calendar.getInstance(); c2.add(Calendar.DAY_OF_MONTH, 200 ); int y = c2.get(Calendar.YEAR); int m = c2.get(Calendar.MONTH) + 1 ; int d = c2.get(Calendar.DAY_OF_MONTH); int wk = c2.get(Calendar.DAY_OF_WEEK); System.out.println("200天后是:" + y + "年" + m + "月" + d + "日" + getWeek(wk)); } public static String getWeek (int w) { String[] weekArray = {"星期日" , "星期一" , "星期二" , "星期三" , "星期四" , "星期五" , "星期六" }; return weekArray[w - 1 ]; } }
第四章 JDK8 时间相关类
JDK8 时间类类名
作用
ZoneId
时区
Instant
时间戳
ZoneDateTime
带时区的时间
DateTimeFormatter
用于时间的格式化和解析
LocalDate
年、月、日
LocalTime
时、分、秒
LocalDateTime
年、月、日、时、分、秒
Duration
时间间隔(秒,纳,秒)
Period
时间间隔(年,月,日)
ChronoUnit
时间间隔(所有单位)
4.1 ZoneId 时区 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Set<String> zoneIds = ZoneId.getAvailableZoneIds(); System.out.println(zoneIds.size()); System.out.println(zoneIds); ZoneId zoneId = ZoneId.systemDefault();System.out.println(zoneId); ZoneId zoneId1 = ZoneId.of("Asia/Pontianak" );System.out.println(zoneId1);
4.2 Instant 时间戳 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 Instant now = Instant.now();System.out.println(now); Instant instant1 = Instant.ofEpochMilli(0L );System.out.println(instant1); Instant instant2 = Instant.ofEpochSecond(1L );System.out.println(instant2); Instant instant3 = Instant.ofEpochSecond(1L , 1000000000L );System.out.println(instant3); ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai" ));System.out.println(time); Instant instant4=Instant.ofEpochMilli(0L ); Instant instant5 = Instant.ofEpochMilli(1000L );boolean result1=instant4.isBefore(instant5);System.out.println(result1); boolean result2 = instant4.isAfter(instant5);System.out.println(result2); Instant instant6 = Instant.ofEpochMilli(3000L );System.out.println(instant6); Instant instant7 = instant6.minusSeconds(1 );System.out.println(instant7);
4.3 ZoneDateTime 带时区的时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ZonedDateTime now = ZonedDateTime.now();System.out.println(now); ZonedDateTime time1 = ZonedDateTime.of(2023 , 10 , 1 , 11 , 12 , 12 , 0 , ZoneId.of("Asia/Shanghai" )); System.out.println(time1); Instant instant = Instant.ofEpochMilli(0L );ZoneId zoneId = ZoneId.of("Asia/Shanghai" );ZonedDateTime time2 = ZonedDateTime.ofInstant(instant, zoneId);System.out.println(time2); ZonedDateTime time3 = time2.withYear(2000 );System.out.println(time3); ZonedDateTime time4 = time3.minusYears(1 );System.out.println(time4); ZonedDateTime time5 = time4.plusYears(1 );System.out.println(time5);
1 2 3 4 5 6 7 8 9 10 11 ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai" ));DateTimeFormatter dtf1=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm;ss EE a" ); System.out.println(dtf1.format(time));
4.5LocalDate 年、月、日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 LocalDate nowDate = LocalDate.now();LocalDate ldDate = LocalDate.of(2023 , 1 , 1 );System.out.println("指定日期:" + ldDate); System.out.println("=============================" ); int year = ldDate.getYear();System.out.println("year: " + year); Month m = ldDate.getMonth();System.out.println(m); System.out.println(m.getValue()); int month = ldDate.getMonthValue();System.out.println("month: " + month); int day = ldDate.getDayOfMonth();System.out.println("day:" + day); int dayofYear = ldDate.getDayOfYear();System.out.println("dayOfYear:" + dayofYear); DayOfWeek dayOfWeek = ldDate.getDayOfWeek();System.out.println(dayOfWeek); System.out.println(dayOfWeek.getValue()); System.out.println(ldDate.isBefore(ldDate)); System.out.println(ldDate.isAfter(ldDate)); LocalDate withLocalDate = ldDate.withYear(2000 );System.out.println(withLocalDate); LocalDate minusLocalDate = ldDate.minusYears(1 );System.out.println(minusLocalDate); LocalDate plusLocalDate = ldDate.plusDays(1 );System.out.println(plusLocalDate); LocalDate birDate = LocalDate.of(2000 , 1 , 1 );LocalDate nowDate1 = LocalDate.now();MonthDay birMd = MonthDay.of(birDate.getMonthValue(), birDate.getDayOfMonth());MonthDay nowMd = MonthDay.from(nowDate1);System.out.println("今天是你的生日吗? " + birMd.equals(nowMd));
4.6 LocalTime 时、分、秒 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 LocalTime nowTime = LocalTime.now();System.out.println("今天的时间:" + nowTime); int hour = nowTime.getHour();System.out.println("hour: " + hour); int minute = nowTime.getMinute();System.out.println("minute: " + minute); int second = nowTime.getSecond();System.out.println("second:" + second); int nano = nowTime.getNano();System.out.println("nano:" + nano); System.out.println("------------------------------------" ); System.out.println(LocalTime.of(8 , 20 )); System.out.println(LocalTime.of(8 , 20 , 30 )); System.out.println(LocalTime.of(8 , 20 , 30 , 150 )); LocalTime mTime = LocalTime.of(8 , 20 , 30 , 150 );System.out.println(nowTime.isBefore(mTime)); System.out.println(nowTime.isAfter(mTime)); System.out.println(nowTime.withHour(10 )); System.out.println(nowTime.plusHours(10 ));
4.7 LocalDateTime 年、月、日、时、分、秒 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 LocalDateTime nowDateTime = LocalDateTime.now();System.out.println("今天是:" + nowDateTime); System.out.println(nowDateTime.getYear()); System.out.println(nowDateTime.getMonthValue()); System.out.println(nowDateTime.getDayOfMonth()); System.out.println(nowDateTime.getHour()); System.out.println(nowDateTime.getMinute()); System.out.println(nowDateTime.getSecond()); System.out.println(nowDateTime.getNano()); System.out.println("dayofYear:" + nowDateTime.getDayOfYear()); System.out.println(nowDateTime.getDayOfWeek()); System.out.println(nowDateTime.getDayOfWeek().getValue()); System.out.println(nowDateTime.getMonth()); System.out.println(nowDateTime.getMonth().getValue()); LocalDate ld = nowDateTime.toLocalDate();System.out.println(ld); LocalTime lt = nowDateTime.toLocalTime();System.out.println(lt.getHour()); System.out.println(lt.getMinute()); System.out.println(lt.getSecond());
4.8 Duration 时间间隔(秒,纳,秒) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 LocalDateTime today = LocalDateTime.now();System.out.println(today); LocalDateTime birthDate = LocalDateTime.of(2000 , 1 , 1 , 0 , 0 , 0 );System.out.println(birthDate); Duration duration = Duration.between(birthDate, today);System.out.println("相差的时间间隔对象:" + duration); System.out.println("============================================" ); System.out.println(duration.toDays()); System.out.println(duration.toHours()); System.out.println(duration.toMinutes()); System.out.println(duration.toMillis()); System.out.println(duration.toNanos());
4.9 Period 时间间隔(年,月,日) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 LocalDate today = LocalDate.now();System.out.println(today); LocalDate birthDate = LocalDate.of(2000 , 1 , 1 );System.out.println(birthDate); Period period = Period.between(birthDate, today);System.out.println("相差的时间间隔对象:" + period); System.out.println(period.getYears()); System.out.println(period.getMonths()); System.out.println(period.getDays()); System.out.println(period.toTotalMonths());
4.10 ChronoUnit 时间间隔(所有单位) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 LocalDateTime today = LocalDateTime.now();System.out.println(today); LocalDateTime birthDate = LocalDateTime.of(2000 , 1 , 1 ,0 , 0 , 0 );System.out.println(birthDate); System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today)); System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today)); System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today)); System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today)); System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today)); System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today)); System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today)); System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today)); System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today)); System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today)); System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today)); System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today)); System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today)); System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today)); System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));
第五章 包装类 5.1 概述 Java 提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:
基本类型
对应的包装类(位于 java.lang 包中)
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean
5.2 Integer 类
Integer 类概述
包装一个对象中的原始类型 int 的值
Integer 类构造方法及静态方法
方法名
说明
public Integer(int value)
根据 int 值创建 Integer 对象(过时)
public Integer(String s)
根据 String 值创建 Integer 对象(过时)
public static Integer valueOf(int i)
返回表示指定的 int 值的 Integer 实例
public static Integer valueOf(String s)
返回保存指定 String 值的 Integer 对象
static string tobinarystring(int i)
得到二进制
static string tooctalstring(int i)
得到八进制
static string toHexstring(int i)
得到十六进制
static int parseInt(string s)
将字符串类型的整数转成 int 类型的整数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Integer i1 = new Integer (100 );System.out.println(i1); Integer i2 = new Integer ("100" );System.out.println(i2); System.out.println("--------" ); Integer i3 = Integer.valueOf(100 );System.out.println(i3); Integer i4 = Integer.valueOf("100" );System.out.println(i4);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 String str1 = Integer.toBinaryString(100 );System.out.println(str1); String str2 = Integer.toOctalString(100 );System.out.println(str2); String str3 = Integer.toHexString(100 );System.out.println(str3); int i = Integer.parseInt("123" );System.out.println(i); System.out.println(i + 1 ); String str = "true" ;boolean b = Boolean.parseBoolean(str);System.out.println(b);
5.3 装箱与拆箱 基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
装箱 :从基本类型转换为对应的包装类对象。
拆箱 :从包装类对象转换为对应的基本类型。
用 Integer 与 int 为例:(看懂代码即可)
基本数值—->包装对象
1 2 Integer i = new Integer (4 );Integer iii = Integer.valueOf(4 );
包装对象—->基本数值
5.4 自动装箱与自动拆箱 由于我们经常要做基本类型与包装类之间的转换,从 Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。例如:
1 2 3 Integer i = 4 ;i = i + 5 ;
5.5 基本类型与字符串之间的转换 基本类型转换为 String
转换方式
方式一:直接在数字后加一个空字符串
方式二:通过 String 类静态方法 valueOf()
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class IntegerDemo { public static void main (String[] args) { int number = 100 ; String s1 = number + "" ; System.out.println(s1); String s2 = String.valueOf(number); System.out.println(s2); System.out.println("--------" ); } }
String 转换成基本类型 除了 Character 类之外,其他所有包装类都具有 parseXxx 静态方法可以将字符串参数转换为对应的基本类型:
public static byte parseByte(String s)
:将字符串参数转换为对应的 byte 基本类型。
public static short parseShort(String s)
:将字符串参数转换为对应的 short 基本类型。
public static int parseInt(String s)
:将字符串参数转换为对应的 int 基本类型。
public static long parseLong(String s)
:将字符串参数转换为对应的 long 基本类型。
public static float parseFloat(String s)
:将字符串参数转换为对应的 float 基本类型。
public static double parseDouble(String s)
:将字符串参数转换为对应的 double 基本类型。
public static boolean parseBoolean(String s)
:将字符串参数转换为对应的 boolean 基本类型。
代码使用(仅以 Integer 类的静态方法 parseXxx 为例)如:
转换方式
方式一:先将字符串数字转成 Integer,再调用 valueOf()方法
方式二:通过 Integer 静态方法 parseInt()进行转换
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class IntegerDemo { public static void main (String[] args) { String s = "100" ; Integer i = Integer.valueOf(s); int x = i.intValue(); System.out.println(x); int y = Integer.parseInt(s); System.out.println(y); } }
注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException
异常。
5.6 底层原理 建议:获取 Integer 对象的时候不要自己 new,而是采取直接赋值或者静态方法 valueOf 的方式
因为在实际开发中,-128~127 之间的数据,用的比较多。如果每次使用都是 new 对象,那么太浪费内存了。
所以,提前把这个范围之内的每一个数据都创建好对象,如果要用到了不会创建新的,而是返回已经创建好的对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 Integer i3 = Integer.valueOf(123 );Integer i4 = Integer.valueOf("123" );Integer i5 = Integer.valueOf("123" , 8 );System.out.println(i3); System.out.println(i4); System.out.println(i5); Integer i6 = Integer.valueOf(127 );Integer i7 = Integer.valueOf(127 );System.out.println(i6 == i7); Integer i8 = Integer.valueOf(128 );Integer i9 = Integer.valueOf(128 );System.out.println(i8 == i9);
第六章:算法小题 练习一: 需求:
键盘录入一些 1~10 日之间的整数,并添加到集合中。直到集合中所有数据和超过 200 为止。
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 public class Test1 { public static void main (String[] args) { ArrayList<Integer> list = new ArrayList <>(); Scanner sc = new Scanner (System.in); while (true ) { System.out.println("请输入一个整数" ); String numStr = sc.nextLine(); int num = Integer.parseInt(numStr); if (num < 1 || num > 100 ){ System.out.println("当前数字不在1~100的范围当中,请重新输入" ); continue ; } list.add(num); int sum = getSum(list); if (sum > 200 ){ System.out.println("集合中所有的数据和已经满足要求" ); break ; } } } private static int getSum (ArrayList<Integer> list) { int sum = 0 ; for (int i = 0 ; i < list.size(); i++) { int num = list.get(i); sum = sum + num; } return sum; } }
练习二: 需求:
自己实现 parseInt 方法的效果,将字符串形式的数据转成整数。要求:字符串中只能是数字不能有其他字符最少一位,最多 10 位日不能开头
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public class Test2 { public static void main (String[] args) { String str = "123" ; if (!str.matches("[1-9]\\d{0,9}" )) { System.out.println("数据格式有误" ); } else { System.out.println("数据格式正确" ); int number = 0 ; for (int i = 0 ; i < str.length(); i++) { int c = str.charAt(i) - '0' ; number = number * 10 + c; } System.out.println(number); System.out.println(number + 1 ); } } }
练习三: 需求:
定义一个方法自己实现 toBinaryString 方法的效果,将一个十进制整数转成字符串表示的二进制
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package com.itheima.a04test;public class Test3 { public static void main (String[] args) { } public static String tobinarystring (int number) { StringBuilder sb = new StringBuilder (); while (true ) { if (number == 0 ) { break ; } int remaindar = number % 2 ; sb.insert(0 , remaindar); number = number / 2 ; } return sb.toString(); } }
练习四: 需求:
请使用代码实现计算你活了多少天,用 JDK7 和 JDK8 两种方式完成
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class Test4 { public static void main (String[] args) throws ParseException { String birthday = "2000年1月1日" ; SimpleDateFormat sdf = new SimpleDateFormat ("yyyy年MM月dd日" ); Date date = sdf.parse(birthday); long birthdayTime = date.getTime(); long todayTime = System.currentTimeMillis(); long time = todayTime - birthdayTime; System.out.println(time / 1000 / 60 / 60 / 24 ); LocalDate ld1 = LocalDate.of(2000 , 1 , 1 ); LocalDate ld2 = LocalDate.now(); long days = ChronoUnit.DAYS.between(ld1, ld2); System.out.println(days); } }
练习五: 需求:
判断任意的一个年份是闰年还是平年要求:用 JDK7 和 JDK8 两种方式判断提示:二月有 29 天是闰年一年有 366 天是闰年
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 public class Test5 { public static void main (String[] args) { Calendar c = Calendar.getInstance(); c.set(2000 , 2 , 1 ); c.add(Calendar.DAY_OF_MONTH, -1 ); int day = c.get(Calendar.DAY_OF_MONTH); System.out.println(day); LocalDate ld = LocalDate.of(2001 , 3 , 1 ); LocalDate ld2 = ld.minusDays(1 ); int day2 = ld2.getDayOfMonth(); System.out.println(day2); System.out.println(ld.isLeapYear()); } }