常用类
1、包装类 √
2、String类 ★
3、StringBuffer和StringBuilder类 ★
4、Math类
5、System类
6、Arrays类
7、BigInteger类和BigDecimal类
8、Date日期类、Calendar日历类以及新的日期
包装类
理解
回顾
数据类型
基本数据类型
引用数据类型
数组
用class定义的
用interface定义的
**基本数据类型没有属性和方法**
包装类需求
① 获取int类型的最大值
② 将某个整数转换成十六进制形式
概念
为八大基本数据类型对应的提供了引用数据类型,则这些引用数据类型称为包装类
// i 与 i2是一样的
int i=10;
Integer i2=new Integer(i);
分类 ★
引用类型命名要求首字母大写,前六个为数值类,其父类为Number
byte————————————Byte
short———————————Short
int—————————————Integer
long————————————Long
float—————————— Float
double——————————Double
char————————————Character
boolean—————————Boolean
基本类型和包装类型之间的转换(针对八大包装类型) ★
jdk5.0之前:
手动装箱(int 转 Integer):
方式一:Integer i = new Intege r(10);
方式二:Integer i2 = Integer.valueOf(10);
手动拆箱(Integer 转 int):
int j = i.intValue();
jdk5.0之后:
自动装箱:
Integer i = 10;
自动拆箱:
int j = i;
包装类型和String类型之间的转换
包装类型——>String类型
Integer i = 10;
//方式1:
String s1= i.toString();
//方式2:
String s2 = String.valueOf(i);
//方式3:
String s3 = i+"";
System.out.println(s3);
String——>包装类
//方式1:
Integer j = new Integer(s1);
//方式2:
Integer j2 = Integer.valueOf(s2);
基本类型和String类型之间的转换
基本类型——>String类型
int i = 10;
//方式1:
String s=i+"";
//方式2:
String s2 = String.valueOf(i);
String——>基本类型(除了char类型)
int j = Integer.parseInt(s);
char c = s.charAt(0);
总结包装类中涉及到的API
通用方法
valueOf:将String类型或基本类型转换成对应的包装类型
parseXX:将String类型转换成对应的基本类型
xxValue:将包装类型转换成对应的基本类型
Character类的特有方法:
toUpperCase:转换为大写
toLowerCase:…..小写
isUpperCase:判断某个字符是否为大写
isLowerCase:……………小写
isDigit:判断某个字符是否为数字
isLetter:判断某个字符是否为字母
isWhiteSpace:判断某个字符是否为空格
例1
public class TestInteger {
public static void main(String[] args) {
Integer m = 1;//自动装箱,实则调用Integer类的valueOf(方法中-127 - 128之间的数是地址相等的,其他的则是new)
Integer n = 1;
System.out.println(m == n);
// 只要有new,地址肯定不同
Integer x = 128;//new Integer(128);
Integer y = 128;//new Integer(128)
System.out.println(x == y);
}
}
例2
Integer i1 = 127;
int i2 = 127;
System.out.println(i1 == i2); //true(双等里面有一个是int,则按int值是否相等来判断)
String类
理解
String类用于保存一组字符串序列的(”john”、”” 都相当于字符串常量对象)
创建对象
方式1:直接赋值
String s = "hello";
方式2:通过调用构造器
String s = new String("hello"); //其中hello为任意字符串
两种创建对象方式的区别
方式一:先去常量池查看是否有“hello”字符序列,如果没有,则创建,如果有直接引用该地址(s指向的是常量池的对象)
方式二:需要在堆中创建对象,该对象维护了一个value属性,value指向常量池的“hello”,如果常量池中没有“hello”,则创建,再指向;如果已经有了,则直接用value指向(s指向的是堆中的对象)
特性
String类保存的是字符串常量,里面一旦赋值,则值不能更改,只能更改地址
常见方法
length 获取字符串字符个数
charAt 获取指定索引处的字符(0 - length-1)
toUpperCase 转大写
toLowerCase 转小写
indexOf 获取字符或字符串第一次出现的索引(0 - length-1),如果找不到返回-1
lastIndexOf 获取字符或字符串最后一次出现的索引,如果找不到返回-1
startsWith 判断是否以xx开头
endsWith 判断是否以XX结尾
regionMatches 判断是否某范围内的子串一致
regionMatches(toffset, other, ooffset, len)
toffset:源字符串起始位置
other:另一个字符串
ooffset:目标字符串起始位置
len:目标字符串中要比较字符串长度
contains 判断子串是否存在,返回true|false
compareTo 比较两个字符串大小("a".compareTo("b") //-1)
equals/equalsIgnoreCase 判断字符串内容是否相等(是否忽略大小写)
substring 截取指定索引之后(包含指定索引)的子串
"abcdefg".substring(4) //efg
"abcdefg".substring(0,3) //abc
replace/replaceAll 替换
s.replace(oldChar,newChar)
trim 去前后空格
split 根据指定字符拆分
concat 拼接字符串
toCharArray 转换成字符数组
StringBuffer类(StringBuilder与此类似,只不过加了个同步(synchronized关键字))
理解
StringBuffer类相当于String类增强版,也是用于保存字符串的。也可以实现对字符串的更新、处理操作
String类和StringBuffer的对比
相同点:都用于保存字符串,都可以对字符串进行一些增删或其他处理的操作
不同点:
String类用于保存字符串常量
StringBuffer类用于保存字符串变量
StringBuffer类创建对象
只能通过调用构造器创建对象!
new StringBuffer(); 构造一个初始容量为16的char数组
new StringBuffer(string);构造一个初始容量为string.length+16的数组,并初始化值为string
new StringBuffer(capacity);构造一个初始容量为capacity的char数组
常见方法
append 在后面增加字符(可以为任意类型)
delete 删除某区间字符
replace(start,end)
start:开始索引
end:结束索引+1
replace 修改确定区间字符
replace(start,end,str)
start:开始索引
end:结束索引+1
str:替换字符串
indexOf 查找某字符在字符串中位置
insert 插入字符
insert(index,str)
index:插入位置索引
str:插入字符串
reverse 反转字符
length 字符串中实际字符个数
StringBuffer类和String类之间的转换
StringBuffer——>String
StringBuffer buffer = new StringBuffer("john");
//方式一:
String s1 = buffer.toString();
//方式二:
String s2 = new String(buffer);
String——>StringBuffer
String s = "鸠摩智";
//方式一:
StringBuffer b1 = new StringBuffer(s);
//方式二:
StringBuffer b2 = new StringBuffer();
b2.append(s);
StringBuffer和StringBuilder的对比
共同点 | 版本 | 线程安全(同步) | 效率 | |
---|---|---|---|---|
StringBuffer | 保存可变字符串 | 老 | 安全 | 较低 |
StringBuilder | 保存可变字符串 | 新 | 不安全 | 较高 |
效率:StringBuilder>StringBuffer>String
Math类
sqrt 求开方
pow 求幂
pow(a,b) a的b次方
ceil 向上取整
floor 向下取整
round 四舍五入,返回整型(接用floor实现)
abs 绝对值
random 随机数(0-1之间小数)
max 最大值
min 最小值
Arrays
操作数组的各种方法
常见方法:
sort(T[]) 对数组的元素进行自然排序,要求元素必须实现了Comparable
sort(T[],Comparator) 对数组的元素进行定制排序,元素本身可以不实现Comparable(自己重写)
sort(a,new comparator(){
//重写方法
public int compare(Object o1,Object o2){
//用于比较的重写的方法
}
})
binarySearch(T[],key) 对数组通过二分搜索法进行查找,如果key找到了,返回索引(排好序之后的),否则返回负数。(**要求:要查找的数组必须提前排好序!**)
copyOf(T[],length) 复制数组的元素(底层实现为arrayCopy)
T[]:要复制的数组
length:新数组长度(若长,则用null补齐,若短则截取)
equals(T1[],T3[]) 判断两个数组的内容是否相等(考虑顺序)
fill(T[],key) 填充数组的各元素值为key
toString() 将数组各元素进行拼接,返回String
System类
常见方法
arrayCopy 复制数组元素,一般使用Arrays.copyOf代替
System.arraycopy(src, index1, dest, index2, length)
src:要复制数组
index1:要复制数组开始索引
dest:目标数组
index:目标数组开始索引
length:复制长度
exit 退出程序
currentTimeMillens 获取当前时间距离1970-1-1的毫秒数。
gc 运行垃圾回收器
BigDecimal和BigInteger类
BigInteger 用于保存数值范围更大的整数
BigDecimal 用于保存精度更高的浮点型
常见方法
add 加法
substract减法
multiply乘法
divide除法,注意:可以添加参数2设置四舍五入模式
日期类
第一代日期
java.util.Date类 (获取日期)
//创建Date对象
//方式一:调用无参构造器(获取系统当前时间)
Date d1 = new Date();
System.out.println(d1);
//方式二:调用有参构造器(获取距离基准时间(1970.01.01.00.00)指定毫秒数的日期对象) 不建议使用!
Date d2 = new Date(92345678);
System.out.println(d2);
java.text.SimpleDateFormat类 (格式化日期)
例1
public void testDateFormat1() throws ParseException{
//创建日期对象
Date d = new Date();
//根据默认格式创建SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat();
//---------------------方法----------------
//格式日期:Date————>String
String format = sdf.format(d);
System.out.println(format); // 20-3-31 下午12:30
//解析日期:String————>Date
String s = "2020-03-31 下午3:22"; //因为这里面格式可能不对,所以会加一个异常
Date parse = sdf.parse(s);
System.out.println(parse); // Tue Mar 31 15:22:00 CST 2020
}
例2
public void testDateFormat2() throws ParseException{
//创建日期对象:Fri Mar 30 15:16:41 CST 2018
Date d = new Date();
//根据指定格式创建SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日hh小时mm分钟ss秒"); //格式可进行更改(星期、上午下午都可以加)
//---------------------方法----------------
//格式日期:Date————>String
String format = sdf.format(d);
System.out.println(format); //2020年03月31日12小时42分钟20秒
//解析日期:String————>Date
String s = "2008年12月30日 01小时26分钟36秒";
Date parse = sdf.parse(s);
System.out.println(parse); //Tue Dec 30 01:26:36 CST 2008
}
第二代日期
java.util.Calendar类 为特定瞬间与指定年 月 日等日历字段之间的转换提供了一些方法
//1.获取Calendar对象
Calendar c = Calendar.getInstance();
System.out.println(c);
//2.通过调用方法获取各个日历字段
System.out.println("年:"+c.get(Calendar.YEAR));
System.out.println("月:"+c.get(Calendar.MONTH)+1);
System.out.println("日:"+c.get(Calendar.DAY_OF_MONTH));
System.out.println("小时:"+c.get(Calendar.HOUR));
System.out.println("分钟:"+c.get(Calendar.MINUTE));
System.out.println("秒:"+c.get(Calendar.SECOND));
System.out.println("星期:"+c.get(Calendar.DAY_OF_WEEK)+1);
注意结果,月会少1,星期是多1
第三代日期(jdk8新特性)
LocalDate|LocalTime|LocalDateTime类:类似于Calendar
Instant:类似于Date
DateTimeFormatter:类似于SimpleDateFormat
例1
public void test1() {
//1.获取LocalDateTime对象
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
//2.获取各个日历字段
System.out.println(now.getYear());
System.out.println(now.getMonthValue()); //数字
System.out.println(now.getMonth()); //英语
System.out.println(now.getDayOfMonth());
System.out.println(now.getHour());
System.out.println(now.getMinute());
System.out.println(now.getSecond());
System.out.println(now.getDayOfWeek());
}
例2
public void test2() {
LocalDateTime now = LocalDateTime.now();
//1.根据指定的格式创建DateTimeFormatter对象
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒"); //H24小时制
//2.--------------调用方法-----------------------
//格式日期:Date——>String
String format = dtf.format(now);
System.out.println(format);
//解析日期:String——>Date
LocalDateTime parse = LocalDateTime.parse("2020年03月31日 16小时02分钟06秒",dtf);
System.out.println(parse);
}
例3
public void testInstant() {
//1.获取Instant对象
Instant instant = Instant.now();
//2.Instant和Date之间的转换
//①Instant——>Date
Date date = Date.from(instant);
//②Date——>Instant
Instant instant2 = date.toInstant();
System.out.println(instant2);
}