一.基本数据类型的包装和拆箱
1.为什么需要包装?
一切都是对象,有些方法需要调用对象,而不是基本的数据类型
2.特点
编译阶段只发生自动装箱和自动拆箱
Integer integerNum = 100; // 自动装箱,得到封装 int intNum = integerNum; // 自动拆箱,获取基本数据类型
将基本类型转换为包装的过程是包装 Integer b =1; 自动装箱,底层实际实施Integer i=Integer.valueOf(10); 将包装类型转换为基本数据类型的拆箱 自动拆箱,底层实际执行int n=i.intValue(); jdk1.5 之后出现了 自动装箱和拆箱 原理 就是通过包装类的valueOf方法实现的 整数和浮点的包装类型继承自Number;
二.使用日期类
1.SimpleDate
功能:用于日期Date类的格式化和分析
1.格式化 日期-->字符串
2.解析 字符串-->日期
public void test1() throws ParseException { // Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); // 格式化 System.out.println(sf.format(date));//2022-07-14 07:55:02 // 解析 要求字符串能被接受SimpleDateFormat识别 System.out.println(sf.parse("2022-07-14 07:55:02")); //Thu Jul 14 07:55:02 CST 2022 }
2.Calendar
说明:日历 抽象类 。因此,只能调整其子类对象进行实例化
实例化
Calendar calendar = Calendar.getInstance();
常用方法
// get() int days = calendar.get(Calendar.DAY_OF_WEEK); // 几天是周几 周日是1 System.out.println(days);//5 // 今天是这个月多少天? 等方法 System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//14 // set() calendar可变性不是很好 // 把现在改成本月后的15号 calendar.set(Calendar.DAY_OF_MONTH,15); // 获得修改后的 System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//15 // add() calendar.add(Calendar.HOUR_OF_DAY,-3); // 把现在的时间 -3个小时 System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
3.日期时间API的迭代
jdk1.0 Date jdk1.1 Calender jdk1.8 提出了新的一套API 主要在 Java.time包下
4.Instant
时间上的瞬时点 1970年1月1日00:00:00 开始的UTC开始的秒数 类似于java.util.Date类 Java以毫秒为单位
@Test public void test7(){ Instant now = Instant.now(); System.out.println(now); //2022-07-14T12:17:40.265Z long l = now.toEpochMilli(); // 毫秒数 System.out.println(l); // 1658400154167 }
5.DateTimeFormat
功能:类似于格式化或分析日期的时间SimpleDateFormat
@Test public void test9(){ // 实例化 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yy-MM-dd hh:mm:ss"); // 常用方法 // 格式化 System.out.println(dtf.format(LocalDateTime.now())); // 解析 System.out.println(dtf.parse("22-07-14 08:33:38")); // {MicroOfSecond=0, SecondOfMinute=38, NanoOfSecond=0, HourOfAmPm=8, //MinuteOfHour=33, MilliOfSecond=0},ISO resolved to 2022-07-14 }
三.排序
1.使用背景
需要对多个对象进行排序,即比较大小 使用两个接口中的一个 Comparable 和Comparator
2.Comparable
特点:自然排序 java.lang.Comparable
使用方法
1.实现接口
2.重写compareTo方法
使用自定义类
public class ComparableTe implements Comparable { private String name; private Integer age; // 比到最后 最后,基本数据类型的比较 @Override public int compareTo(Object o) { // 1.首先判断两个地址值是否相同 if (this == o) { return 1; } else { // 2.看o是这类对象吗? if (o instanceof ComparableTe) { return -1; } else { // 3.把o强迫成为这样的对象 ComparableTe com = (ComparableTe) o; // 4.比较值(当然,如果这个字段不能满足比较) 也可以比较其他字段) if (this.age == com.age) { return 0; } else { return this.age > com.age ? 1 : -1; } } } }
3. Comparator
特点: 定制排序 java.util.Comparator
使用背景:您需要的类别 没有实现Comparable接口 或者已经实现但不是你想要的排名
使用方法:
1.实现接口
2.重写compare方法
@Test public void te10() { int[] a = new int[]{1, 3, 2, 5}; Integer[] a1 = new Integer[]{1, 3, 2, 5}; Arrays.sort(a); for (int b : a) { System.out.print(b " "); // 1 2 3 5 } // 此处 a1不能是int 数组 Arrays.sort(a1, new Comparator() { @Override public int compare(Object o1, Object o2) { int n1 = (int) o1; int n2 = (int) o2; return n1<=n2 ? 1 : -1;
}
});
for (int b :
a1) {
System.out.print(b + " ");
// 5 3 2 1
}
}
四.System类
1.特点
1.代表系统,系统的很多属性和控制方法都放置再该类的内部,该类位于java.lang包
2.构造器是private的,无法造对象,其内部的成员变量和方法都是static的
3. in标准的输入流,out标准的输出流
4.public final class System
5.获取一些java的版本信息什么的
2.测试(不常用)
@Test
public void test1(){
String jv= (String) System.getProperty("java.version");
// 获取java的版本
System.out.println(jv);
//1.8.0_231
}
五.Math类
1.特点
1.提供了一系列静态方法用于计算 其方法的参数一般是float 里面都是静态的,不用造对象去调 2.BigInteger java.math包下的 可以表示不可变的任意精度的整数 用于范围较大的数
3.BigDecimal java.math包下的 精度要求比较高的话可以用这个
2.常用的方法
@Test
public void te(){
int a;
// Math.random() 取随机数 返回的的是[0-1)
for (int i = 0; i <10 ; i++) {
a = (int) (Math.random()*10);
System.out.print(a+" ");
// 9 2 5 7 7 5 4 4 9 8
}
//Math.max 同类型的进行比较 int long float double四种
System.out.println(Math.max(1, 100));
//100
System.out.println(Math.round(4.9));
//5
System.out.println(Math.round(5.2));
//5
}