包装类
包装类的用途
- 作为和基本类型对应的类型存在,方便涉及到对象的操作。
- 包含每种基本数据类型的相关属性如最大值,最小值等,以及相关的操作方法。
自动装箱和拆箱
- 自动装箱
- 基本类型的数据处于需要对象的环境中时,会自动转化为“对象”。
Integer i = 5
在自动装箱中就相当于Integer i = Integer.valueOf(5)
这样的操作,这就是Java的自动装箱
- 自动拆箱
- 没有必要显式的调用intValue(),doubleValue()等转型方法。
- 如:
Integer i = 5;int j = i;
这样的过程就是自动拆箱。
- 包装类的空指异常
- 当
Integer i = null;int j = i.intValue();
这样就会造成空指异常。 - 因为 i 并没有指向任何对象的实体,所以就不可能操作 intValue()方法。
- 当
包装类的缓存问题
- 如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或者手动调用valueOf()时),就会先判断数据是否在该区间,如果在则直接获取数组中对应的包装类对象的引用,如果不在该区间,则会通过new调用包装类的构造方法来创建对象。
- IntegerCache类为Integer类的一个静态内部类,仅供Integer类使用。
- 一般情况下 IntegerCache.low为-128,IntegerCache.high为127,IntegerCache.cache为内部类的一个静态属性
String类
String
- String类对象代表不可变的字符序列,因此我们可以将对象称为“不可变对象”。
- String 类底层创建的数组是final的,也就是常量,只能被赋值一次。
- String类常用的方法:
- 创建返回对象:concat(),replace(),substring(),toLowerCase(),toUpperCase(),trim(),
- 提供查功能:endsWith(),startsWith(),indexOf(),lastIndexOf()
- 提供比较功能的方法:equals(),equalsIgnoreCase(),compareTo().
- 其他方法:charAt(),length().
StringBuffer和StringBuilder
- StringBuffer 线程安全,做线程同步检查,效率较低。
- StringBuilder 线程不安全,不做线程同步检查,效率高。
- 这俩的方法都是返回自己本身。
- append(…) 添加字符序列,仍然返回自身对象。
- delete(int start,int end) 删除从start开始到end-1为止的一段字符序列,仍然返回自身对象
- deleteCharAt(int index) 移除此序列指定位置上的 char,仍然返回自身对象
- insert(…) 在指定位置插入字符序列,仍然返回自身对象
- reverse() 用于将字符序列逆序,仍然返回自身对象。
- toString() 返回此序列中数据的字符串表示形式
时间类
JDK1.1之后,日期操作一般使用Calendar类,而字符串的转化使用DateFormat类。
DateFormat类和SimpleDateFormat类
// 把时间对象按照"格式字符串指定的格式"转成相应的字符串
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// SimpleDateFormat是DateFormat的一个子类
String str = df.format(new Date(40000000));
System.out.println(str);
// 把字符串按照“格式字符串指定格式”转成相应的时间对象
DateFormat df2 = new SimpleDateFormat("yyyy年MM月DD日 hh时mm分ss秒");
Date date = df2.parse("2020年04月07日 12时16分40秒");
System.out.println(date);
// 测试其他的格式字符。比如:利用D,获取本事件对象是所处年份的第几天。
DateFormat df3 = new SimpleDateFormat("D");
// SimpleDateFormat是DateFormat的一个子类
String str3 = df3.format(new Date());
System.out.println(str3);
Calendar日历类
GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
public static void printCalendar(Calendar c) {
// 打印:1918年10月10日 11:23:45 周三
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DAY_OF_MONTH);
int dayweek = c.get(Calendar.DAY_OF_WEEK) - 1;
String datweek2 = dayweek==0?"日":dayweek+"";
int hour = c.get(Calendar.HOUR);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
System.out.println(year + "年" + month + "月" + date + "日" + hour + "时" + minute + "分" + second + "秒" + " 周" + datweek2);
}
Math类
- abs 绝对值
- acos,asin,atan,cos,sin,tan 三角函数
- sqrt 平方根
- pow(double a, double b) a的b次幂
- max(double a, double b) 取大值
- min(double a, double b) 取小值
- ceil(double a) 大于a的最小整数
- floor(double a) 小于a的最大整数
- random() 返回 0.0 到 1.0 的随机数
- long round(double a) double型的数据a转换为long型(四舍五入)
- toDegrees(double angrad) 弧度->角度
- toRadians(double angdeg) 角度->弧度
- java.lang.Math提供类一系列静态方法用于科学计算。
File类
java.io.File类:代表文件和目录。 在开发中,读取文件、生成文件、删除文件、修改文件的属性时经常会用到本类。
File f = new File("d:/b.txt"); f.renameTo(new File("D:/b.txt")); System.out.println("File是否存在:"+f.exists()); System.out.println("File是否是目录:"+f.isDirectory()); System.out.println("File是否是文件:"+f.isFile()); System.out.println("File最后修改时间:"+new Date(f.lastModified())); System.out.println("File的大小:"+f.length()); System.out.println("File的文件名:"+f.getName()); System.out.println("File的目录路径:"+f.getPath());
关于文件操作的很多文件都在这个包中
枚举
格式:
enum 枚举名 {枚举体(常量列表)}
enumSeason { ``SPRING, SUMMER, AUTUMN, WINDER }
枚举实质上还是类!而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final修饰的。可以直接通过枚举类型名使用它们。