一、包装类
1. 什么是包装类
以前定义变量,经常使用基本数据类型,对于基本数据类型,它就是一个数。加点属性,加点方法,加点构造器,对基本数据类型对应进行了封装产生了一个新的类,这种类叫包装类(改造基本数据类型的的类)。
int, byte...-->基本数据类型
包装类 -->引用数据类型
2. 基本数据类型对应的包装类
二、日期相关类
sql.Date
SimpleDateFormat
从前台过来的日期数据一般都是有格式的String,需要转换成util.Date类型
给出一个日期,打印出那一月正确的日历,且在给定日期标
-
String-->sql.Date
-
sql.Date-->util.Date
-
局限性:日期必须是规定格式!
-
引入新类DateFormat
-
Calendar
-
Calendar是一个抽象类,不能直接创建对象,使用子类实现
-
可以使用静态方法Calendar.getInstance()创建。
-
常用方法:get(),set()
-
DateTimeFormatter 自定义格式
用于转换LocalDateTime等与String转换的定义和规范.
方式一:
三、Math类
常用方法
System.out.println("随机数:"+Math.random());
System.out.println("绝对值:"+Math.abs(-5.6));
System.out.println("进一:"+Math.ceil(9.1));
System.out.println("舍一:"+Math.floor(9.9));
System.out.println("四舍五入:"+Math.round(9.9));
System.out.println("取最大:"+Math.max(3,9));
System.out.println("取最小:"+Math.min(9,28));
四、Random类
1. 自行在API文档中初步了解Random类
2. 不管是无参数构造Random,还是Math类的random方法,最后底层都是到Random类的有参构造中。
五、String类
1. String类的本质
将字符串起来,就是字符串,是不可变类
所有的字符串都是一个实例化出来的对象,例如"abc","你好世界","helloworld"等。
字符串内容不可变,类比LocalDateTime类的不可变性。
String底层是一个char类型的数组
2. String的常用方法
String()空参构造器,给出一个空的value。
String(String original),将original的value和hash给到正构造的String对象。
String(char value[]),将value数组中的值复制到正构造的String对象的属性value中。
length(),字符串底层数组长度。
isEmpty(),字符串底层数组是否为空。
charAt(int index),字符串中底层数组相对应下标的对应值。
equals(Object object),比较两个字符串是否值相等,已被重写。
String内存分析
String在常量池中放置了一个变量,如果后续有结果相同的变量那就不会在增加一个变量,比如String s = "abc";后续如果再来了一个String s1 = "ab"+"c",常量池中也只会有一个"abc",不会有两个。但是注意使用String(String original)构造的String对象则不同。
StringBuilder类
可变字符串类有:StringBuilder类,StringBuffer类
不可变字符串类:String类
-
例5.40 创建StringBuffer对象、StringBuilder对象、 String 对象,并将三者的内容互相转换。
2. StringBuffer、StringBuilder、String的不同之处
String只能赋值一次,每一次内容发生改变都生成了一个新的对象,然后原有的对象引用新的对象,所以说 String 本身是不可改变。每一次改变 String 的字符串内容,都会在内存创建新的对象,而每一次生成新对象都会对系统性能产生影响。
而StringBuffer和StringBuilder不同,每次操作都是对自身对象做操作,而不是生成新的对像,其所占空间会随着字符内容增加而扩充,做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。
StringBuffer 和 StringBuilder 也存在不同之处。StringBuffer的方法都使用"synchronized”关键字进行修饰,这样保证了同时最多只有一个线程可以运行这些方法,也就是保证了线程安全。 StringBuilder则不具备这样的特点。反过来说,正因为StringBuilder 没有线程安全机制,运行起来就不用考虑给线程加锁,所以运行效率会比 StringBuffer 要高。