包装类
分类 Integer01.java
针对八种基本数据类型相应的引用类型一包装类
有了类的特点,就可以调用类中的方法。
包装类与基本数据类型的转换 WapperType.java
jdk5前的手动装箱和拆箱方式,装箱:基本类型->包装类型,反之,拆箱
jdk5以后(含jdk5)的自动装箱和拆箱方式,
自动装箱底层调用的是valueOf方法,比如Integer.valueOf()
包装类与String相互转换
Integer和Character常用方法
练习
如果 i 在-128,127之中,从缓存数组去取,不会创建新对象,因此m == n 为true
答案:FFTFFTT总结:只要有基本数据类型,则判断值是否相等
String类
String 对象用于保存字符串,也就是一组字符序列
字符串常量对象是用双引号括起的字符序列。例如:、"你好"、"12.97"、"boy"等
字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
String类较常用构造器(其它看手册):
String s1 = new String();
String s2 = new String(String original);
String s3 = new String(char[] a);
String s4 = new String(char[] a,int startIndex,int count);
创建方式 String01.java
方式一:直接赋值String S = "hspedu";
方式二:调用构造器String s = new String("hspedu");
方式一:先从常量池查看是否有"hsp"数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址
方式二:先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间。如果常量池没有"hsp",重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址。
画出两种方式的内存分布图
练习
小结:底层是StringBuilder sb = new StringBuilder();sb.append(a);sb.append(b); sb是在堆中,并且append是在原来字符串的基础上追加的.重要规则,Stringc1 = "ab" + "cd";常量相加,看的是池。String c1 = a + b;变量相加,是在堆中。
String常见方法
介绍
String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder和StringBuffer来增强String的功能并提高效率。[后面我们还会详细介绍StringBuilder和StringBuffer]
常用方法一览
StringBuffer类
基本介绍
java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。 StringBuffer01.java
很多方法与String相同,但StringBuffer是可变长度的。
StringBuffer是一个容器。 StringBuffer02.java
String VS StringBuffer StringAndStringBuffer.java
String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低//private final char value[];
StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高//char[] value; //这个放在堆.
StringBuffer构造器
常见方法 StringBufferMethod.java
增append
删delete(start,end)
改replace(start,end,string)//将 start---end间的内容替换掉不含end
查indexOf //查找子串在字符串第1次出现的索引,如果找不到返回-1
插insert
获取长度length
StringBuilder类
介绍 StringBuilder01.java
一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder不是线程安全)。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快[后面测]。
在StringBuilder上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。
常用方法
StringBuilder和StringBuffer均代表可变的字符序列,方法是一样的, 所以使用和StringBuffer一样
三种对比 StringAndStringBuffer.java
StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
String: 不可变字符序列,效率低,但是复用率高。
StringBuffer: 可变字符序列、效率较高(增删)、线程安全
StringBuilder: 可变字符序列、效率最高、线程不安全
String使用注意说明:string s=" a"; //创建了一个字符串s += "b"; //实际上原来的" a"字符串对象已经丢弃了,现在又产生了一个字符串s+"b" (也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能=>结论:如果我们对String做大量修改,不要使用String
Math类
基本介绍
Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
常用方法 MathMethod.java
abs绝对值
pow求幂
ceil向上取整
floor向下取整
round四舍五入
sqrt求开方
random求随机数 //思考: 请写出获取a-b之间的一个随机整数,a,b均为整数? 2-7
max求两个数的最大值
min求两个数的最小值
Arrays类
常用方法 ArraysMethod01.java
toString 返回数组的字符串形式Arrays.toString(arr)
sort 排序(自然排序和定制排序) ArraysSortCustom.java Integer arr[] = {1, -1, 7, 0, 89};
binarySearch 通过二分搜索法进行查找,要求必须排好序 int index = Arrays.binarySearch(arr, 3);
copyOf 数组元素的复制Integer[] newArr = Arrays.copyOf(arr, arr.length);
fill 数组元素的填充Integer[] num = new Integer[]{9,3,2};Arrays.fill(num, 99);
equals 比较两个数组元素内容是否完全一致boolean equals = Arrays.equals(arr, arr2);
asList 将一组值, 转换成listList< Integer> asList = Arrays.asList(2,3,4,5,6,1);System.out.println( asList=" + asList);
System类
常见方法 System_.java
exit退出当前程序
arraycopy :复制数组元素,比较适合底层调用,-般使用Arrays.copyOf完成复制数组.int[] src={1,2,3}; int[] dest = new int[3]; System,arraycopy(src, 0, dest, 0, 3);
currentTimeMillens:返回当前时间距离1970-1-1的毫秒数
gc:运行垃圾回收机制System.gc();
BigInteger和BigDecimal类
介绍
BigInteger适合保存比较大的整型
BigDecimal适合保存精度更高的浮点型(小数)
常见方法 BigInteger_.java BigDecimal_.java
add加
subtract减
multiply乘
divide除
一二代日期类
第一代日期类 Date01.java
Date:精确到毫秒,代表特定的瞬间
SimpleDateFormat:格式和解析日期的类SimpleDateFormat格式化和解析日期的具体类。它允许进行格式化(日期->文本)、解析(文本->日期)和规范化.
第二代日期类 Calender_.java
第二代日期类,主要就是Calendar类(日历)。public abstract class Calendar extends Object implements Serializable,Cloneable, Comparable<Calendar>
Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_ MONTH、HOUR等日历字段之间的转换提供了一些方法, 并为操作日历字段(例如获得下星期的日期)提供了一些方法。
第三代日期类
前面两代日期类的不足分析
JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。而Calendar也存在问题是:
可变性:像日期和时间这样的类应该是不可变的。
偏移性: Date中的年份是从1900开始的,而月份都从0开始。
格式化:格式化只对Date有用,Calendar则不行。
此外,它们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)
第三代日期类常用方法 LocalDate_.java
LocalDate(日期)、LocalTime(时间)、 LocalDateTime(日期时间) JDK8加入LocalDate只包含日期,可以获取日期字段LocalTime只包含时间,可以获取时间字段LocalDateTime包含日期+时间,可以获取日期和时间字段
DateTimeFormatter格式日期类类似于SimpleDateFormatDateTimeFormat dtf = Date TimeFormatter.ofPattern(格式);String str = dtf.format(日期对象);
Instant时间戳 Instant_.java 类似于Date提供了一系列和Date类转换的方式Instant —> Date:Date date = Date.from(instant);Date —> Instant:Instant instant = date.tolnstant();
第三代日期类更多方法LocalDate Time类MonthDay类:检查重复事件是否是闰年增加日期的某个部分使用plus方法测试增加时间的某个部分使用minus方法测试查看一年前和一年后的日期