一、System
package com.day5_21;
import java.util.Arrays;
/**
* @author alice_huijing
* @version 1.0
*/
public class SystemClass12 {
public static void main(String[] args) {
// 1、exit退出当前程序,exit(0)中0表示当前的一个状态
// System.out.println("ok1");
// System.exit(0); // 0表示程序退出的状态,0是一个状态值,0表示正常状态
// System.out.println("ok2");
// 2、arraycopy
/*
* @param src the source array.
* 源数组
* @param srcPos starting position in the source array.
* 从源数组的哪一个索引进行拷贝
* @param dest the destination array.
* 将源数组的数据拷贝到哪个数组
* @param destPos starting position in the destination data.
* 将数据拷贝到目标数组的哪一个位置
* @param length the number of array elements to be copied.
* 从源数组中拷贝多少个数据到目标数据中
* 看看这五个参数的含义
*/
int[] src = {1,2,3};
int[] dest = new int[3];
System.arraycopy(src, 0, dest, 0, 3); // 如果拷贝数量超过了源数组就会出现异常
System.out.println("dest="+ Arrays.toString(dest)); // [1, 2, 3]
// 3、currentTimeMillis:返回当前时间距离1970-1-1的毫秒数
System.out.println(System.currentTimeMillis()); // 1747824782884
}
}
/*
System类常见方法和案例
1、exit可以退出当前程序
2、arraycopy可以复制数组元素,比较适合底层调用,一般使用Array.copyOf完成复制数组
int[] src = {1,2,3};
int[] dest = new int[3];
System.arraycopy(src,0,dest,0,3);
3、currentTimeMillens:返回当前时间距离1970-1-1的毫秒数
4、gc:运行垃圾回收机制System.gc();
*/
二、BigInteger和BigDecimal
package com.day5_21;
import java.math.BigDecimal;
import java.math.BigInteger;
/**
* @author alice_huijing
* @version 1.0
*/
public class BigIntegerAndBigDecimalClass13 {
public static void main(String[] args) {
// long l = 2378888888899999999999999999999l;
// // 这个数太大了,直接会报错Error
// 当我们编程中需要处理很大的整数,long就不够使用,现在可以使用一个叫做
// BigInteger的类来搞定
BigInteger bigInteger = new BigInteger("2378888888899999999999999999999");
// 如果直接是输入数字进去,这样仍然会非常大,我们需要传入一个字符串进去。底层来进行一个转换。
System.out.println(bigInteger);
// 但是如果我们要对这个数据进行加减乘除怎么办呢?注意,这里不能直接进行加减乘除
// System.out.println(bigInteger + 1); // 这里会出现Error
// 如果想要加需要使用对应的方法add()
BigInteger bigInteger1 = new BigInteger("100");
BigInteger add = bigInteger.add(bigInteger1);
System.out.println(add);
//其他的运算同理 减法subtract 乘法multiply 除法divide,多大的数计算都可以
// 浮点数同理
BigDecimal bigDecimal = new BigDecimal("1999.11111111999999999999999777777788");
System.out.println(bigDecimal);
// 同理也不能进行直接加减乘除了,需要使用对应的方法
// 需要创建一个对应的BigDecimal,然后调用响应的方法
// 也是一样的方法名字,但是除法需要注意,进行除法的时候有可能除不尽
// 可能是一个无限循环小数这样会抛出异常。这个怎么解决呢!?
// 只需要在方法后面指定一个精度即可。也就是在divide再添加一个参数
// 以后遇到无限循环小数可以保留一个分子的精度
// BigDecimal.ROUND_CEILING
}
}
/*
BigInteger和BigDecimal类
BigInteger和BigDecimal介绍
应用场景:
1、BigInteger适合保存比较大的整数
2、BigDecimal适合保存精度更高的浮点数(小数)
*/
三、有关时间的类
package com.day5_21;
/**
* @author alice_huijing
* @version 1.0
*/
public class DateClass14 {
public static void main(String[] args) {
}
}
/*
日期类,关于日期类知道怎么查,并且知道怎么使用即可,不用每个方法都记
第一代日期类
1、Date:精确到毫秒,代表特定的瞬间
2、SimpleDateFormat:格式和解析日期的类
SimpleDateFormat格式化和解析日期的具体类。它允许进行格式化
(日期->文本)、解析(文本->日期)和规范化。
tip:在类图当中,属性指的是set和get方法
*/
package com.day5_21;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author alice_huijing
* @version 1.0
*/
public class DateClass15 {
public static void main(String[] args) throws ParseException {
// 1、通过无参构造器可以获得当前的系统时间
Date d1 = new Date(); // 获取当前的系统时间
System.out.println("当前的日期 = " + d1); // Wed May 21 19:44:50 CST 2025
// tip在java.util中也有一个Date,在java.sql中也有一个Date
// sql这个是和数据库相关的,不要引入这个包
// 默认输出的格式不是我们中国人的格式,我们需要对这个时间格式进行一个时间格式的转换。
// 2、时间格式的转换
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
String format = sdf.format(d1); // format将日期转换成指定格式的字符串
System.out.println(format);
// 关于这里的时间格式的yyyy,MM,dd,hh,mm,ss E这些不是随便乱写的。
// 这里的时间格式的字母是规定好了的,我们可以打开手册进行查看。
// 另外关于这个Date()还有一个使用的方式就是可以填写一个毫秒数Date(long)
// 可以指定毫秒数,获取时间
// 3、根据毫秒数计算时间
Date d2 = new Date(9234567);
System.out.println(d2); // Thu Jan 01 10:33:54 CST 1970
// 4、可以将一个格式化的字符串转换成对应的Date
String s = "2025年05月21日 07:51:48 星期三";
Date parse = sdf.parse(s); // 这里需要手动抛出一个异常
System.out.println("parse=" + parse); // parse=Wed May 21 07:51:48 CST 2025
System.out.println("parse=" + sdf.format(parse)); // 2025年05月21日 07:51:48 星期三
// 在将String转换成Date的时候,使用sdf格式需要和你给定的String的格式是一样的,否则会抛出转换异常
}
}
package com.day5_21;
/**
* @author alice_huijing
* @version 1.0
*/
public class DateClass16 {
}
/*
日期类
第二代日期类型
1、第二代日期类型主要就是Calendar类,日历
2、Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、
DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并且为了操作日历字段(例如获取下个星期的日历)提供了方法
来看一下这个类的结构
这个类同样实现了三个接口:Comparable Serializable Cloneable ,继承Object
看看有哪些方法和属性,内部类等。
首先:
1、是一个抽象类,我们如何获取一个实例呢!?
2、构造器是一个私有的,我们可以通过getInstance()来获取实例
3、并且提供大量的方法和字段提供给程序员
*/
package com.day5_21;
import java.util.Calendar;
/**
* @author alice_huijing
* @version 1.0
*/
public class DateClass17 {
public static void main(String[] args) {
// 1、获取一个Calendar这个实例,我们不能通过new的方式,需要通过getInstance()方法
Calendar c = Calendar.getInstance(); // 创建日历类对象//比较简单,自由
System.out.println("c=" + c);
/*
c=java.util.GregorianCalendar[time=1747834663695,
areFieldsSet=true,areAllFieldsSet=true,lenient=true,
zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",
offset=28800000,dstSavings=0,useDaylight=false,
transitions=19,lastRule=null],firstDayOfWeek=1,
minimalDaysInFirstWeek=1,ERA=1,YEAR=2025,MONTH=4,
WEEK_OF_YEAR=21,WEEK_OF_MONTH=4,DAY_OF_MONTH=21,
DAY_OF_YEAR=141,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3,
AM_PM=1,HOUR=9,HOUR_OF_DAY=21,MINUTE=37,SECOND=43,
MILLISECOND=695,ZONE_OFFSET=28800000,DST_OFFSET=0]
这些都是它的字段,我们可以通过这些字段得到对应的值。
*/
// 2、获取日历对象的某个日历字段
System.out.println("年:" + c.get(Calendar.YEAR));
System.out.println("月:" + (c.get(Calendar.MONTH) + 1)); // 默认从零开始,所以这里要加一
System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));
System.out.println("时:" + c.get(Calendar.HOUR));
System.out.println("分:" + c.get(Calendar.MINUTE));
System.out.println("秒:" + c.get(Calendar.SECOND));
// 这里的Calender没有专门的格式化方法,所以需要程序员自己来组合显示
}
}
// 日期类型的应用实例
package com.day5_21;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Calendar;
/**
* @author alice_huijing
* @version 1.0
*/
public class DateClass18 {
public static void main(String[] args) {
// tip
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.HOUR)); // 这个输出的是十进制的9
System.out.println(c.get(Calendar.HOUR_OF_DAY)); // 这里输出的是二十四进制的21
// 1、我们可以使用now放回表示当前日期时间的对象
LocalDateTime ldt = LocalDateTime.now(); // 2025-05-21T21:57:08.753
// 或者是LocalDate.now(); LocalTime.now()
System.out.println(ldt);
System.out.println("年="+ldt.getYear());
System.out.println("月="+ldt.getMonth());
System.out.println("月="+ldt.getMonthValue());
System.out.println("日="+ldt.getDayOfMonth());
System.out.println("时="+ldt.getHour());
System.out.println("分="+ldt.getMinute());
System.out.println("秒="+ldt.getSecond());
// 2、LocalDate,LocalTime
LocalDate now = LocalDate.now(); // 可以获取年月日
LocalTime now2 = LocalTime.now(); // 获取到时分秒
}
}
/*
日期类
第三代日期类
前面两代日期类的不足分析
JDK1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类之后被弃用了,而Calendar也存在的问题:
1、可变性:像日期和时间这样的类型应该是不能改变的。
2、偏移性:Date中的年份是从1900开始的,而月份都是从零开始
3、格式化:格式化之对Date有用,Calendar则不行
4、此外,它们也不是线程安全的;不能处理润秒等(每隔两天,多出1s)。
第三代日期类的常见方法
LocalDate日期,LocalTime时间、LocalDateTime日期时间,JDK8加入
LocalDate只包含日期,可以获取日期字段
LocalTime只包含时间,可以获取时间字段
LocalDateTime包含日期+时间,可以获取日期和时间字段
第三代日期的类图比较复杂,实现了非常多的接口
说明该类的能力强大
再看看构造器,方法等。
*/
package com.day5_21;
import java.util.Date;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author alice_huijing
* @version 1.0
*/
public class DateClass19 {
public static void main(String[] args) {
// 1、使用DateTimeFormatter对象来进行格式化
// 创建DateTimeFormatter对象
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");
LocalDateTime ldt = LocalDateTime.now();
String format = dateTimeFormatter.format(ldt);
System.out.println("格式化的时间:" + format);
// 2、通过静态方法now()获取当前时间戳的对象
Instant now = Instant.now();
System.out.println(now); // 2025-05-21T14:13:18.832Z
// 3、通过from可以将Instant转为Date
Date date = Date.from(now);
System.out.println(date);
// 4、通过date的toInstant()可以将date转换成Instant对象
Instant instant = date.toInstant();
System.out.println(instant);
// 5、提供plus和minus方法可以对当前时间进行加或者减
// 看看890天之后,是什么时候,把年月日-时分秒
LocalDateTime localDateTime = ldt.plusDays(890);
System.out.println(dateTimeFormatter.format(localDateTime)); // 890天之后
// 6、3456分钟之前是什么时候,将年月日-时分秒输出
LocalDateTime localDateTime1 = ldt.minusMinutes(3456);
System.out.println(dateTimeFormatter.format(localDateTime1));
}
}
/*
日期类
DateTimeFormatter格式日期类
类似于SimpleDateFormat
Instant时间戳
类似于Date
提供了一系列的Date类转换的方式
查看类图也是实现了一堆接口
第三代日期类还有更多的方法
LocalDateTime类
MonthDay类,检查重复时间
是否为闰年
增加日期的某个部分
使用plus方法检测增加时间的某个部分
使用minus方法测试查看一年前和一年后的日期
*/