Data(日期)类//基本上淘汰了现在都不怎么用这个类了。
1. Date类表示特定的瞬间,精确到毫秒。
2. Data类通过使用空参构造创建日期对象,表示的就是当前操作系统的日期
a)获取当前日期对象 now;
Date now = new Date();
3. 调用Date对象的getTime()方法,可以获得该Date对象对应的毫秒值
4. Date类有一个有参构造,可传入一个毫秒,创建一个这个毫秒值对应的日期对象.
5. 系统中一般时间最早从1970年1月1日0点0分开始计算。
系统中为啥时间最早到1970年1月1日的时间,再往前则会报错。这个时间又是啥来来历呢?
最初计算机操作系统是32位,而时间也是用32位表示。32位能表示的最大值是2147483647。另外1年365天的总秒数是31536000,2147483647/31536000 = 68.1,也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000,也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。
到这里,我想问题的答案已经出来了:因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作系统可以表示到292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。
DateFormat(格式)类概述
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat类)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。
我们通过这个类可以帮我们完成日期和文本之间的转换。
日期格式
要格式化一个当前语言环境下的日期也就是日期 -> 文本),要通过下面的方法来完成。DateFormat是抽象类,我们需要使用其子类SimpleDateFormat来创建对象。
l 构造方法
用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。 |
SimpleDateFormat(String pattern) |
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) |
SimpleDateFormat(String pattern, Locale locale) |
l DateFormat类方法
代码演示:
//创建日期格式化对象,在获取格式化对象时可以指定风格
DateFormat df= new SimpleDateFormat("yyyy-MM-dd");//对日期进行格式化
Date date = new Date(1607616000000L);
String str_time = df.format(date);
System.out.println(str_time);//2020年12月11日
l DateFormat类的作用:即可以将一个Date对象转换为一个符合指定格式的字符串,也可以将一个符合指定格式的字符串转为一个Date对象。
指定格式的具体规则我们可参照SimpleDateFormat类的说明,这里做简单介绍,规则是在一个字符串中,会将以下字母替换成对应时间组成部分,剩余内容原样输出:
l 当出现y时,会将y替换成年
l 当出现M时,会将M替换成月
l 当出现d时,会将d替换成日
l 当出现H时,会将H替换成时
l 当出现m时,会将m替换成分
l 当出现s时,会将s替换成秒
DateFormat类常用方法
l format方法,用来将Date对象转换成String
l parse方法,用来将String转换成Date(转换时,该String要符合指定格式,否则不能转换)。
代码演示:
一:把Date对象转换成String
Date date = new Date(1607616000000L);//Fri Dec 11 00:00:00 CST 2020
DateFormat df = new SimpleDateFormat(“yyyy年MM月dd日”);
String str = df.format(date);
//str中的内容为2020年12月11日
二:把String转换成Date对象
String str = ”2020年12月11日”;
DateFormat df = new SimpleDateFormat(“yyyy年MM月dd日”);
Date date = df.parse( str );
//Date对象中的内容为Fri Dec 11 00:00:00 CST 2020
Calendar(日历)类概念
Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象,如下:
l Calendar类静态方法
Calendar c = Calendar.getInstance(); //返回当前日历对象
public static Calendar {
Calendar c = new GregorianCalendar();//(罗马日历)
return c;
}
Calendar常见的方法:
a) public int get(int field)获取指定时间字段的值;这里的字段,都是Calendar的静态属性
i. YEAR 年
ii. MONTH 月,从0开始算起,最大11;0代表1月,11代表12月。
iii. DATE 天
iv. HOUR 时
v. MINUTE分
vi. SECOND秒
b) public final void set(int field,int value) 设置指定字段的值
c) public abstract void add(int field,int value) 给定的日历字段添加或减去指定的时间值;正数表示加上指定的时间值,负数表示减去指定的时间值
d) public final Date getTime() 获取当前日历对用的日期对象
代码演示:
Calendar c = Calendar.getInstance();//获取本地时间
int year = c.get(Calendar.YEAR);//获取的到的本地时间的年字段。
l public final void set(int field,int value)//设置指定字段的值
代码演示:
Calendar c = Calendar.getInstance();
//设置时间为2020年5月20日
c.set(Calendar.YEAR, 2020);
c.set(Calendar.MONTH, 4);
c.set(Calendar.DATE, 20);
l public final Date getTime() //获取该日历对象转成的日期对象
代码演示:
Calendar c = Calendar.getInstance();
Date d = c.getTime();
1. 注意事项:
a) 西方星期的开始为周日,中国为周一。
b) 在Calendar类中,月份的表示是以0-11代表1-12月。
c) 日期是有大小关系的,时间靠后,时间越大。
System类概念
在API中System类介绍的比较简单,我们给出定义,System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作。
System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象。System类中的都是static方法,类名访问即可。在JDK中,有许多这样的类。
常用方法
l currentTimeMillis() 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值
l exit(int status) 用来结束正在运行的Java程序。参数传入一个数字即可。通常传入0记为正常状态,其他为异常状态
l gc() 用来运行JVM中的垃圾回收器,完成内存中垃圾的清除。
l getProperty(String key) 用来获取指定键(字符串名称)中所记录的系统属性信息
Math类概念
Math 类是包含用于执行基本数学运算的方法的数学工具类,如初等指数、对数、平方根和三角函数。
类似这样的工具类,其所有方法均为静态方法,并且一般不会创建对象。如System类
常用方法
a) abs(double a) 方法,结果都为正数(绝对值);
b) ceil(double a)方法,结果为比参数值大的最小整数的double值
c) floor(double a)方法,结果为比参数值小的最大整数的double值
d) max(double a,double b)方法,返回两个参数值中较大的值
e) min(double a,double b)方法,返回两个参数值中较小的值
f) pow(double a,double b)方法,返回第一个参数的第二个参数次幂的值
g) round(double a)方法,返回参数值四舍五入的结果
h) random()方法,产生一个大于等于0.0且小于1.0的double小数
基本类型包装类
在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的。而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型,如年龄需要转换成int类型,考试成绩需要转换成double类型等。那么,想实现字符串与基本数据之间转换怎么办呢?这个时候就需要包装类了他的作用其实就是把基本数据包装成一个对象,也可以把对象字符串数据转换成基本数据。也就是装箱与拆箱。在jdk1.5以前我们还得手动拆装,之后java就自动帮我们完成这一步了
1. 包装类的作用是: 提供更多的操作基本数值的功能
2. 基本数据类型对应的八个包装类分别是
a) byte --> Byte
b) short --> Short
c) int-->Integer
d) long-->Long
e) char-->Character
f) boolean-->Boolean
g) float-->Float
h) double-->Double
自动装箱拆箱
自动装箱: 在需要的时候,系统会自动把 基本数据类型转换为其对应的包装类型
自动拆箱: 在需要的时候,系统会自动把 包装类型转换为其对应的基本数据类型
在需要的情况下,基本类型与包装类型可以通用。有些时候我们必须使用引用数据类型时,可以传入基本数据类型。
比如:
基本类型可以使用运算符直接进行计算,但是引用类型不可以。而基本类型包装类作为引用类型的一种却可以计算,原因在于,Java”偷偷地”自动地进行了对象向基本数据类型的转换。
相对应的,引用数据类型变量的值必须是new出来的内存空间地址值,而我们可以将一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于Java又”偷偷地”自动地进行了基本数据类型向对象的转换。
l 自动拆箱:对象转成基本数值
l 自动装箱:基本数值转成对象
Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5; 加法运算完成后,再次装箱,把基本数值转成对象。
正则表达式的概念
正则表达式(英语:Regular Expression,在代码中常简写为regex)。
正则表达式是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本。
字符串类中涉及正则表达式的常用方法
l public boolean matches(String regex) //判断字符串是否匹配给定的规则
举例:校验qq号码.
1: 要求必须是5-15位数字
2: 0不能开头
代码演示:
String qq = "604154942";
String regex = "[1-9][0-9]{4,14}";
boolean flag2 = qq.matches(regex);
举例:校验手机号码
1:要求为11位数字
2:第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字。
代码演示:
String phone = "18800022116";
String regex = "1[34578][0-9]{9}";
boolean flag = phone.matches(regex);
l public String[] split(String regex) //根据给定正则表达式的匹配规则,拆分此字符串
举例:分割出字符串中的的数字
代码演示:
String s = "18-22-40-65";
String regex = "-";
String[] result = s.split(regex);
代码演示:
String s = "18 22 40 65";
String regex = " ";
String[] result = s.split(regex);
(附录)正则表达式的匹配规则
a)字符:
i. x: 代表的是字符x
ii. \\: 代表的是斜线字符'\'
iii. \t: 制表符
iv. \n:换行符
v. \r:回车符
a) 字符类
i. [abc]: 匹配 a、b 或 c中任意一个字符
ii. [^abc]: 匹配除了 a、b 或 c以外的任意一个字符
iii. [a-zA-Z] 匹配字母 中任意一个字符
iv. [0-9]: 匹配任意一个数字
v. [a-zA-Z_0-9]: 匹配字母,数字,_中的任意一个
b) 预定义字符类
i. . 用于匹配除换行符以外的任意一个字符;如果要匹配"."号的话,需要使用"\\."
ii. \d: 匹配任意一个数字
iii. \w:匹配字母,数字,_中的任意一个
iv. \s: 匹配任意一个空白符: 空格,制表符,换行符中的任意一个
c) 边界匹配器
i. ^: 代表行的开头
ii. $: 代表行的结尾
iii. \b: 代表单词边界
d) 数量词:
i. X?: 代表的是X出现一次或一次也没有
ii. X*: 代表的是X出现零次或多次
iii. X+: 代表的是X出现一次或多次
iv. X{n}:代表的是X出现恰好 n 次
v. X{n,}: 代表的是X出现至少 n 次
vi. X{n,m}: 代表的是X出现至少 n 次,但是不超过 m 次
e) 逻辑符:
i. XY: 代表的是X后跟Y
ii. X|Y: 代表的是X 或 Y
iii. (X): 代表的是()括号内的数据作为一组数据出现,(X)的方式称为正则表达式中的组