1、什么是包装类
以前定义变量,经常使用基本数据类型
对于基本数据类型来说,它就是一个数,加点属性,加点方法,加点构造器,将基本数据类型对应进行了一个封装,产生了一个新的类 —》包装类
int,byte —》基本数据类型,包装类 —》引用数据类型
2、对应关系
3、已经有基本数据类型了,为什么要封装为包装类?
(1)java语言 面向对象的语言,最擅长的操作各种各样的类
(2)以前学习装数据的 —》数组,int[] String[] double[] Student[]
以后学习的装数据 —》集合,有一个特点,只能装引用数据类型的数据
4、是不是有了包装类以后就不用基本数据类型了?
不是。基本数据类型就一个数,操作简单
1、所属包为Java.lang,可以直接使用无需到包
2、类的继承关系Integer-》Number-》Object
3、实现的接口Serializable、Comparable
4、Integer被final修饰,不能有子类,不能被继承
5、包装int产生了Integer
6、类的历史:JDK 1.0
7、属性:MAX_VALUE、MIN_VALUE
8、自动装箱int–>Integer、自动拆箱Integer–>int(JDK1.5之后新出的特性)
package msb.javase.oop.javase_220308_packaged_class_test;
public class Test {
public static void main(String[] args) {
Integer i1 = new Integer(12);
System.out.println(i1);
Integer i2 = new Integer("12");
System.out.println(i2);
//自动装箱
Integer i3 = 12;
System.out.println(i3);
//自动拆箱
int i4 = new Integer(12);
System.out.println(i4);
}
}
9、方法:
(1)构造器,发现没有空参构造器,参数int或String
(2)常用方法
compareTo 在数字上比较两个Integer对象
Integer i1 = new Integer(12);
Integer i2 = new Integer("12");
System.out.println(i1.compareTo(i2));//0
equals 比较两个对象,Integer对Object中的equals方法进行了重写,所比较的是底层封装的value的值
System.out.println(i1.equals(i2));//true Integer i5 = 12; Integer i6 = 12; System.out.println(i5 == i6);//true Integer i7 = 130; Integer i8 = 130; System.out.println(i7 == i8);//false
ValueOf方法的底层:如果自动装箱的值在-128~127之间,那么比较的就是具体的数值,否则比较的就是对象的地址
intValue():Integer --> int
Integer i9 = 130; int i10 = i9.intValue(); System.out.println(i10);
parseInt:String --> int
String s1 = "130"; int i11 = Integer.parseInt(s1); System.out.println(i11);
toString:Integer --> String
Integer i12 = 130; String s2 = i12.toString(); System.out.println(s2);日期相关类 Date java.util.Date
(1)疑问:以后获取时间差用getTime()还是currentTimeMillis()
答案:currentTimeMillis()–》因为这个方法是静态的,可以类名.方法名直接调用
(2)public static native long currentTimeMillis() 本地方法
为什么没有方法体?因为这个方法的具体实现不是通过java写的
(3)这个方法的作用:
一般会去衡量一些算法所用的时间
package msb.javase.oop.javase_220309_date;
import java.awt.*;
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d);
System.out.println(d.toString());
System.out.println(d.toGMTString());
//System.out.println(d.getDate());
System.out.println(d.toLocaleString());
//返回自1970年1月1日00:00:00 GMT 以来此Date对象表示的毫秒数
System.out.println(d.getTime());
System.out.println(System.currentTimeMillis());
}
}
java.sql.Date
(1)sql.Date只有年月日,没有时分秒,util.Date都有
(2)sql.Date是util.Date的子类
(3)sql.Date可以和util.Date可以相互转换
package msb.javase.oop.javase_220309_date;
import java.sql.Date;
public class Test2 {
public static void main(String[] args) {
Date d1 = new Date(1646746343485L);
//System.out.println(d1);
//sql.Date可以和util.Date可以相互转换
//util--->sql
//方式一:向下转型
java.util.Date d2 = new java.util.Date();
Date d3 = (Date)d1;
//方式二:利用构造器
Date d4 = new Date(d2.getTime());
//util--->sql
java.util.Date d5 = d1;
//String--->sql.Date
Date d6 = Date.valueOf("2022-3-9");
System.out.println(d6);
}
}
SimpleDateFormat
提出问题:String —> java.util.Date
解法:
(1)String —> java.sql.Date
(2)java.sql.Date —> java.util.Date
package msb.javase.oop.javase_220309_date;
public class Test3 {
public static void main(String[] args) {
//(1)String ---> java.sql.Date
java.sql.Date d1 = java.sql.Date.valueOf("2022-3-9");
//(2)java.sql.Date ---> java.util.Date
java.util.Date d2 = d1;
System.out.println(d2);
}
}
局限性:此解法只适用于2022-3-9格式的转换
引入:DateFormat
package msb.javase.oop.javase_220310_date_test2;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) throws ParseException {
//public class SimpleDateFormat(子类) extends DateFormat(父类是抽象类)
//格式化的标准(定义好了)
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//String --> Date === parse
Date ddf = df.parse("2022-3-9 22:52:10");
System.out.println(ddf);
//Date --> String === format
String sdf = df.format(new Date());
System.out.println(sdf);
}
}
Calendar
常用方法:
package msb.javase.oop.javase_220310_calendar;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test {
public static void main(String[] args) {
Calendar cal = new GregorianCalendar();
Calendar cal2 = Calendar.getInstance();
//get方法
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH));
System.out.println(cal.get(Calendar.DATE));
System.out.println(cal.get(Calendar.DAY_OF_WEEK));
System.out.println(cal.getActualMaximum(Calendar.DATE));//当月日期的最大天数
System.out.println(cal.getActualMinimum(Calendar.DATE));//当月日期的最小天数
//set方法
cal.set(Calendar.YEAR,1991);
cal.set(Calendar.MONTH,2);
cal.set(Calendar.DATE,1);
//String --> Calendar
// (1) String --> Date
java.sql.Date date = java.sql.Date.valueOf("2011-3-5");
// (2) Date --> Calendar
cal.setTime(date);
System.out.println(cal.get(Calendar.YEAR));
}
}
提出问题:请输入你想要查看的日期,展示为日历格式
解法:
package msb.javase.oop.javase_220310_calendar;
import java.util.Calendar;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
//录入日期的String
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想要查看的日期:(例如2020-3-8)");
String strDate = sc.next();
//String --> Calendar
Calendar cal = Calendar.getInstance();
// (1) String --> Date
java.sql.Date date = java.sql.Date.valueOf(strDate);
// (2) Date --> Calendar
cal.setTime(date);
//开始后续的操作
// (1) 打印头部
System.out.println("日t一t二t三t四t五t六");
// (2) 获取本月最大天数和当前日
int maxDay = cal.getActualMaximum(Calendar.DATE);
int nowDay = cal.get(Calendar.DATE);
//将日期调为本月的1号
cal.set(Calendar.DATE,1);
//1号是本周的第几天
int num = cal.get(Calendar.DAY_OF_WEEK);
//先把空格打印出来
int count = 0;
for(int j=0; j
JDK1.8新增日期时间API的原因
JDK1.0使用java.util.Date(第一批日期时间API),JDK1.1引入Calendar类(第二批)的缺陷:
(1)不可变性:日期和时间不可变
(2)偏移性:Date年份从1900开始,月份从0开始
(3)格式化:格式化只对Date有用
JDK1.8新增日期时间API(第三批)
JDK1.8新增LocalDate/LocalTime/LocalDateTime
package msb.javase.oop.javase_220310_calendar;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class Test3 {
public static void main(String[] args) {
//1.完成实例化
//方法1:now() 获取当前日期、时间、日期+时间
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
LocalDate localDate = LocalDate.now();
System.out.println(localDate);
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
//方法2:of() 设置指定日期、时间、日期+时间
LocalDateTime ofLocalDateTime = LocalDateTime.of(2020,2,28,10,18,25);
System.out.println(ofLocalDateTime);
//2.常用方法
//(1)常用的get方法
System.out.println(localDateTime.getYear());
System.out.println(localDateTime.getMonth());
System.out.println(localDateTime.getDayOfMonth());
System.out.println(localDateTime.getDayOfWeek());
System.out.println(localDateTime.getHour());
System.out.println(localDateTime.getMinute());
System.out.println(localDateTime.getSecond());
//(2)常用的set方法(这里叫with)
LocalDateTime localDateTime2 = localDateTime.withMonth(10);
System.out.println(localDateTime); //原先的对象没有变
System.out.println(localDateTime2); //新返回的对象改变了月份值
//(3)提供了加减的操作
LocalDateTime localDateTime3 = localDateTime.plusDays(3);
System.out.println(localDateTime);
System.out.println(localDateTime3);
}
}
DateTimeFormatter
package msb.javase.oop.javase_220310_calendar;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.TemporalAccessor;
public class Test4 {
public static void main(String[] args) {
//格式化类:DateTimeFormatter
//方式一:预定义的标准格式
// DateTimeFormatter.ISO_LOCAL_DATE_TIME;
// DateTimeFormatter.ISO_LOCAL_DATE;
// DateTimeFormatter.ISO_LOCAL_TIME;
DateTimeFormatter df = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
//df1就可以帮我们完成LocalDateTime和String的相互转换
//LocalDateTime-->String
LocalDateTime now = LocalDateTime.now();
String str = df.format(now);
//String-->LocalDateTime
TemporalAccessor parse = df.parse(str);
//方式二:本地化相关的格式
// DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG); 2022年3月10日 上午07时33分41秒
// DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM); 2022-3-10 7:34:59
// DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT); 22-3-10 上午7:35
DateTimeFormatter df2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
//LocalDateTime-->String
LocalDateTime now2 = LocalDateTime.now();
String str2 = df2.format(now2);
System.out.println(str2);
//String-->LocalDateTime
TemporalAccessor parse2 = df2.parse(str2);
System.out.println(parse2);
//方式三:自定义格式(重点,以后常用)
DateTimeFormatter df3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//LocalDateTime-->String
LocalDateTime now3 = LocalDateTime.now();
String str3 = df3.format(now3);
System.out.println(df3);
//String-->LocalDateTime
TemporalAccessor parse3 = df3.parse(str3);
System.out.println(parse3);
}
}



