1. 包装类
包装类(Wrapper Class
): Java
是一个面向对象的编程语言,但是Java
中的八种基本数据类型却是不面向对象的,为了使用方便和解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类(Wrapper Class
),包装类均位于java.lang
包。
为了使用方便Java中将8中基本数据类型进行了封装:除了Integer和Character类以后,其它六个类的类名和基本数据类型一直,只是类名的第一个字母大写即可。
boolean
—> Boolean
char
—> Character
byte
—> Byte
short
—> Short
long
—> Long
int
—> Integer
float
—> Float
double
—> Double
作用:
作为 和基本数据类型对应的类 类型存在,方便涉及到对象的操作。
包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
Byte b = null ;Short s = null ;Integer i = null ;Long lon = null ;Float f = null ;Double d = null ;Character c = null ;Boolean bln = null ;
基本都是类似的,因此这里就取最有代表性的Integer
来作例子
package chapter04;public class DateType { public static void main (String[] args) { int a = 10 ; Integer a1 = new Integer (a); Integer a2 = Integer.valueOf(a); Integer a3 = a; int aa = a1.intValue(); int aaa = a1; String ss="123" ; int ii = Integer.parseInt(ss); System.out.println("字符类型转成整型:" +ii); int ii2=123 ; String ss2 = Integer.toString(ii2); System.out.println("int类型转成数字字符串类型:" +ss); } }
包装类的常用方法: (一)基本类型的最值
1、int
类型
(1)最大值调用的方法 Integer.MAX_VALUE
(2)最小值调用的方法 Integer.MIN_VALUE
2、Long
类型
(1)最大值调用的方法 Long.MAX_VALUE
(2)最小值调用的方法 Long.MIN_VALUE
3、其他基本数据类型同理
(二)十进制转其他类型的进制
1、十进制转二进制 :Integer.toBinaryString(int i)
2、十进制转八进制 : Integer.toOctalString(int i)
3、十进制转十六进制 : Integer.toHexString(int i)
(三) 字符串转基本数据类型
1、字符串转整数
(1)Integer.valueOf(String s)
(2)Integer.parseInt(String s)
2、字符串转小数
(1)Double.valueOf(String s)
(2)Double.parseDouble(String s)
3、字符串转其他基本数据类型同理
(四)基本数据类型转字符串
1、整数转字符串 :String.valueOf(int i)
或者自动拆箱
2、其他基本数据类型转字符串同理
(五)字符大小写转化
1、大写转小写 :Character.toUpperCase(Char c)
2、小写转大写 :Character.toLowerCase(Char c)
(六) 数值类型的比较
1、整数的比较:Integer.compare(int x,int y)
注:(1)如果前面的数大于后面的数,返回 1
(2)如果前面的数等于后面的数,返回 0
(3)如果前面的数小于后面的数,返回 -1
2、小数的比较: Double.compare(double x,double y)
3、其他基本数据类型的比较同理
代码展示: package chapter04;public class DateType { public static void main (String[] args) { System.out.println("int类型的最大值:" + Integer.MAX_VALUE); System.out.println("int类型的最小值:" + Integer.MIN_VALUE); System.out.println("long类型的最大值:" + Long.MAX_VALUE); System.out.println("long类型的最小值:" + Long.MIN_VALUE); System.out.println("---------------------" ); System.out.println("66转二进制为:" + Integer.toBinaryString(66 )); System.out.println("66转八进制为:" + Integer.toOctalString(66 )); System.out.println("66转十六进制为:" + Integer.toHexString(66 )); System.out.println("------------------" ); String s1 = "123" ; int a11 = Integer.valueOf(s1); int a22 = Integer.parseInt(s1); System.out.println(a11); System.out.println(a22); String s2 = "456" ; double d1 = Double.valueOf(s2); double d2 = Double.parseDouble(s2); System.out.println(d1); System.out.println(d2); System.out.println("a1+d1=" + (a11 + d1)); System.out.println("a2+d2=" + (a22 + d2)); System.out.println("s1+s2=" + (s1 + s2)); System.out.println("-------------------" ); int i = 1 ; System.out.println(String.valueOf(i)); System.out.println("-------------------" ); char letter = 'a' ; char upper = Character.toUpperCase(letter); System.out.println(letter + "->" + upper); char lower = Character.toLowerCase(letter); System.out.println(letter + "->" + upper + "->" + lower); System.out.println("-----------------------" ); double x = 2.2 ; double y = 2.3 ; System.out.println("比较大小:" + Double.compare(x, y)); } }
2. 日期类(第一类时间类)
官方文档
第一代日期类主要为使用Date
,用于获取当前时间,同时提供内置方法让我们自定义(SimpleDateFormat
)获取到的时间戳(默认是毫秒),同时提供一些方法来做时间的判断,例如某时间节点是否早于(before
)另一个时间节点或者晚于(after
)另一个时间节点
package chapter04;import java.text.SimpleDateFormat; import java.util.Date; public class Date_oop { public static void main (String[] args) throws Exception { System.out.println(System.currentTimeMillis()); Date d = new Date (); System.out.println(d); SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd HH-mm-ss-SS" ); String dateFormatString = sdf.format(d); System.out.println(dateFormatString); String dateString = "2022-06-01 12-20-50-60" ; Date parseDate = sdf.parse(dateString); System.out.println(parseDate); System.out.println(d.getTime()); System.out.println(parseDate.before(d)); System.out.println(parseDate.after(d)); } }
3. 日历类(第二类时间类)
Calendar.YEAR Calendar.MONTH Calendar.DATE Calendar.HOUR Calendar.HOUR_OF_DAY Calendar.MINUTE Calendar.SECOND Calendar.MILLENSECOND Calendar.WEEK_OF_MONTH Calendar.WEEK_OF_YEAR Calendar.DAY_OF_WEEK_IN_MONTH Calendar.DAY_OF_WEEK Calendar.DAY_OF_YEAR Calendar.DAY_OF_MONTH Calendar.AM_PM Calendar.SUNDAY Calendar.MONDAY Calendar.TUESDAY Calendar.WEDNSDAY Calendar.THURSDAY Calendar.FRIDAY Calendar.SATURDAY
Calendar
(日历类)中的常用方法
getInstance()
创建Calendar
类型的子类对象
Calendar c= Calendar.getInstance();
get(int filed)
根据日历字段,获取其对应的值
public static void calendarGet (Calendar calendar) { System.out.println( calendar.get(Calendar.YEAR)+"年" + (calendar.get(Calendar.MONTH) +1 )+"月" + calendar.get(Calendar.DAY_OF_MONTH)+"日" + calendar.get(Calendar.HOUR_OF_DAY)+"点" + calendar.get(Calendar.MINUTE)+"分" +calendar.get(Calendar.SECOND)+"秒" ); }
set(int year,int month,int day)
设置时间为指定的年,月,日;set(int field,int value),
field要修改的字段,
value`具体的数据
public static void calendarSet () { Calendar calendar = Calendar.getInstance() ; calendar.set(Calendar.DAY_OF_MONTH,30 ); calendarGet(calendar); } Calendar c= Calendar.getInstance(); Calendar c=Calendar.getInstance(); c.set(2018 , 2 , 14 ); year=c.get(Calendar.YEAR); month=c.get(Calendar.MONTH); date=c.get(Calendar.DATE); System.out.println(year+"年" +month+"月" +date+"日" );
add(int field,int value)
设置偏移量,field
要修改的字段,value
具体的数据
public static void calendarAdd () { Calendar calendar = Calendar.getInstance() ; calendar.add(Calendar.DAY_OF_MONTH,180 ); calendarGet(calendar); } Calendar c= Calendar.getInstance(); c.add(Calendar.YEAR, 10 ); c.add(Calendar.DATE, -5 ); year=c.get(Calendar.YEAR); month=c.get(Calendar.MONTH)+1 ; date=c.get(Calendar.DATE); System.out.println(year+"年" +month+"月" +date+"日" );
4. 本地日期类(第三代日期类)
可变性:像日期和时间这样的类应该是不可变的
偏移性:Date
中的年份是从 1900
开始的,而月份都是从0开始
格式化:格式化只对Date
有用,Calendar
则不行
此外,它们也不是线程安全的,不能处理闰秒问题【每隔2天,多出1s
】
第三代日期类:有三个LocalDate
【年月日】LocalTime
【时分秒】 LocalDateTime
【年月日时分秒】
package wrapper_.date_;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.Month;public class LocalDateTime_ { public static void main (String[] args) { LocalDate date = LocalDate.now(); LocalTime time = LocalTime.now(); LocalDateTime dateTime = LocalDateTime.now(); int year = dateTime.getYear(); System.out.println("年=" +year); Month month = dateTime.getMonth(); System.out.println("月=" +month); int monthValue = dateTime.getMonthValue(); System.out.println("月=" +monthValue); int dayOfMonth = dateTime.getDayOfMonth(); System.out.println("日=" +dayOfMonth); int hour = dateTime.getHour(); System.out.println("时=" +hour); int minute = dateTime.getMinute(); System.out.println("分=" +minute); int second = dateTime.getSecond(); System.out.println("秒=" +second); } }
Instant
时间戳 【构造器是私有化,只能通过Instant.now()
方法获取Instant
对象】
类似于Date
提供了一系列和Date
转换的方式
Instant --> Date Date date = Date.from(instant);Date ---> Instant Instant instant = date.toInstant();Instant now = Instant.now();System.out.println(now); Date date = Date.from(now);Instant instant = date.toInstant();
public static void main (String[] args) { Instant instant = Instant.now(); Date date = new Date (); Date from = Date.from(instant); Instant toInstant = date.toInstant(); }
MonthDay
:检查重复事件
是否是闰年
增加日期的某个部分
使用plus
方法测试增加时间的某个部分
使用minus
方法测试查看一年前和一年后的日期
package wrapper_.date_;import javax.swing.text.DateFormatter;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;public class LocalTimeFormatter02 { public static void main (String[] args) { DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss" ); LocalDateTime dateTime = LocalDateTime.now(); LocalDateTime time1 = dateTime.plusDays(168 ); System.out.println("168天后的日期=" +ofPattern.format(time1)); LocalDateTime dateTime1 = dateTime.minusMinutes(168 ); System.out.println("减去 168 分钟的时间" +ofPattern.format( dateTime1)); } }