一、字符串
1. String类
1.1 方法
-
构造方法
public String() //不含任何字符 public String(char[] chs) public String(byte[] bys) public String(char[] value, int offset, int count) public String(byte[] bytes, int offset, int length) String s = “abc”;
-
常用方法
concat(String str); //把两个字符串拼接起来,获取一个新的字符串 length(); //获取字符串的长度 equals(); //区分大小写的比较两个字符串的内容是否相同。 charAt(); //根据给定的索引,获取对应位置的字符 indexOf(); //获取指定的字符 在字符串中 第一次出现的位置(索引),找不到返回-1 lastIndexOf(); //获取指定的字符 在字符串中 最后一次出现的位置(索引),找不到返回-1 substring()); //截取字符串,返回新的字符串 isEmpty(); //判断字符串是否为空(长度为0返回true,不为0返回false) contains(); //判断字符串中是否包含 给定的字符串。 endsWith(); //判断字符串是否以 给定的字符串 结尾。 startsWith(); //判断字符串是否以 给定的字符串 开头。 replace(); //用新内容替代旧内容,返回新的字符串 toLowerCase(); //把字母都转成其对应的小写形式。 toCharArray() //把字符串转换为数组 getBytes() //把字符串转换为字节数组 trim(); //移除首尾空格。 split(); //根据给定的内容,切割字符串,返回字符串数组
1.2 字符串对象特点
以String str1, str2 = "abc"
等直接赋值的方式创建的相同内容的对象,实际上在内存中只占一个对象的空间,两个对象共享这块空间,而以String str = new String("abc");
方式new出来的对象每次都会在堆中开辟新的空间。
String str = "abc";
str += "d";
此时内存中会有"abc"、"d"、"abcd"三个对象,而str此时指向了"abcd"字符串
String
类的字符串不可变,所以每次通过+=
的方式拼接字符串,都会新开辟空间。
2. StringBuilder类
2.1 作用
-
由于String类的对象内容不可改变,所以每当进行字符串拼接的时候,总是会在内存中创建于给新的对象,造成空间和时间上的浪费。为了解决这个问题,可以使用StringBuilder类
-
StringBuilder是一个可变的字符串类,可以将其看作是一个容器,当字符串进行拼接的时候,会直接在当前字符串的末尾加上新的字符串
2.2 方法
-
构造方法
//空的字符串 StringBuilder sb = new StringBuilder(); //有效的字符串 String str = "str"; StringBuilder sb = new StringBuilder("str"); StringBuilder sb = new StringBuilder(str);
-
常用方法
//拼接,拼接任意类型数据,并返回对象本身 public StringBuilder append(data); //在指定位置插入数据,并返回对象本身 public StringBuilder insert(int offset, data); //反转字符串,并返回对象本身 public StringBuilder reverse()
2.3 与String相互转换
public StringBuilder(String str) //String->StringBuilder
public String toString() //StringBuilder->String
二、基本类型扩展类
1. 包装类
Java提供了基本类型与引用类型两个类型系统,使用基本类型在于效率,但很多情况下会创建对象来使用更多的功能,且同基本类型像对象一样操作,就可以使用基本类型对应的包装类
基本类型 | 对应的包装类(位于java.lang包中) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
1.1 拆箱与装箱
基本类型与对应的包装类之间相互转换称为装箱与拆箱,基本类型转包装类称为装箱,反之为拆箱。
//装箱(构造函数)
Integer i0 = 10; //自动装箱
Integer i1 = new Integer(10);
Integer i2 = new Integer("10");
Integer i3 = Integer.valueOf(10);
//拆箱
int a0 = i0; //自动拆箱
int a1 = i1.intValue();
1.2 基本类型与String相互转换
· 本类型->String
- 直接在数字后
+""
- 通过
String
类的静态方法valueOf()
int i0 = 100;
String str0 = i0 + "";
String str1 = String.valueOf(100);
· String->基本类型
除了Character
类之外,其他所有包装类parseXxx
静态方法,可以将字符串转为对应的基本类型
public static byte parseByte(String s):将字符串参数转换为对应的byte基本类型。
public static short parseShort(String s):将字符串参数转换为对应的short基本类型。
public static int parseInt(String s):将字符串参数转换为对应的int基本类型。
public static long parseLong(String s):将字符串参数转换为对应的long基本类型。
public static float parseFloat(String s):将字符串参数转换为对应的float基本类型。
public static double parseDouble(String s):将字符串参数转换为对应的double基本类型。
public static boolean parseBoolean(String s):将字符串参数转换为对应的boolean基本类
String str = 100 + "";
int i = Integer.parseInt(str);
2. BigInteger类
如果运算中,数据的范围超出了long类型后,可以使用BogInteger
类实现,该类的计算整数是不限制长度
int a = 1000000000000;// 编译报错,因为超出了int类型所能表示的数据范围
long l = 1000000000000000000000L;// 编译报错,因为超出了long类型所能表示的数据范围
-
构造方法
//构造方法 BigInteger b1 = new BigInteger("1000000000000000000000"); BigInteger b2 = new BigInteger("1223435453543654354354");
-
常用方法
//常用方法 BigInteger res1 = b1.add(b1); BigInteger res1 = b1.subtract(b1); BigInteger res1 = b1.multiply(b1); BigInteger res1 = b1.divide(b1);
3. BigDecimal类
作用:解决浮点数运算的精度问题
double d1 = 0.01;
double d2 = 0.09;
double d3 = d1 + d2; //0.09999999999999999
BigDecimal bd1 = new BigDecimal(0.01);
BigDecimal bd2 = new BigDecimal(0.02);
BigDecimal bd3 = bd1 + bd2; //0.09999999999999999687749774324174723005853593349456787109375
常用方法
BigDecimal b3 = new BigDecimal("0.01");
BigDecimal b4 = new BigDecimal("0.09");
BigDecimal res1 = b1.add(b2);
BigDecimal res2 = b3.subtract(b4);
BigDecimal res3 = b5.multiply(b6);
BigDecimal res4 = b7.divide(b8);
若除法除不尽,可以使用divide()
重载方法
//BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode):
//divisor:除数对应的BigDecimal对象;
//scale:精确的位数;
//roundingMode取舍模式
BigDecimal b11 = new BigDecimal("10");
BigDecimal b12 = new BigDecimal("3");
BigDecimal res6 = b11.divide(b12,2, RoundingMode.HALF_UP); // 3.33
4. Math类
作用:Math类就是提供了数学运算的方法,其构造方法被私有,所有方法皆为静态方法。
System.out.println("10的绝对值:"+Math.abs(10));// 10
System.out.println("-10的绝对值:"+Math.abs(-10));// 10
System.out.println("3.14向上取整:"+Math.ceil(3.14));// 4.0
System.out.println("3.54向上取整:"+Math.ceil(3.54));// 4.0
System.out.println("-3.54向上取整:"+Math.ceil(-3.54));// -3.0
System.out.println("==================================");
System.out.println("3.14向下取整:"+Math.floor(3.14));// 3.0
System.out.println("3.54向下取整:"+Math.floor(3.54));// 3.0
System.out.println("-3.54向下取整:"+Math.floor(-3.54));// -4.0
System.out.println("==================================");
System.out.println("2的3次幂:"+Math.pow(2,3));// 8.0
System.out.println("==================================");
System.out.println("3.14四舍五入取整:"+Math.round(3.14));// 3
System.out.println("3.54四舍五入取整:"+Math.round(3.54));// 4
System.out.println("-3.54四舍五入取整:"+Math.round(-3.54));// -4
System.out.println("==================================");
System.out.println("获取10和20的最大值:"+Math.max(10,20));// 20
System.out.println("获取10和20的最小值:"+Math.min(10,20));// 10
5. Arrays类
作用:扩展数组的功能,由于是功能类,所以其内部方法皆为静态方法
int[] arr = {12,334,53,543,43,32};
Arrays.toString(arr);
Arrays.sort(arr);
常用方法:
copyOf();
equals();
hashCode();
sort();
toString();
日期类
1. Date类
作用:获取当前日期及对日期进行操作
//获取当前时间
Date date1 = new Date(); //Sun Sep 05 22:33:53 CST 2021
//标准时间偏移指定时间ms
Date date2 = new Date(1000); //Thu Jan 01 08:00:01 CST 1970
//获取距离标准时间间隔ms
date2.gettime(); //1000
//设置距离标准时间间隔ms
date2.setTime(1000);
//判断当前日期是否在指定日期前/后
date1.before(date2); //false
date1.after(date2); //true
2. DateFormat
作用:将Date
与String
类相互转换,DateFormat
类是一个抽象类,因此需要常用的子类java.text.SimpleDateFormat
-
常见的日期格式
常见的日期格式: yyyy年MM月dd日 HH时mm分ss秒 常见的日期格式: yyyy-MM-dd HH:mm:ss 常见的日期格式: yyyy-MM-dd 常见的日期格式: HH:mm:ss
-
Date
->String
SimpalDateFormat sdf = new SimpalDateFormat("yyyy-MM-dd HH:mm:ss"); //构造方法->设置时间格式 Date date = new Date(); String str = sdf1.format(date); //进行格式转换
-
String
->Date
String str = "2020年9月9日 12时0点0分"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); Date date = sdf.parse(str);
3. Calendar类
作用:Calendar
类相当对Date
类的补充,一些与日期有关的方法在jdk1.1之后都已到了Calendar
中。Calendar
类是一个抽象类,通常使用其子类java.util.GregorianCalendar类
Calendar.YEAR : 年
Calendar.MONTH :月
Calendar.DAY_OF_MONTH:月中的日期
Calendar.HOUR:小时
Calendar.MINUTE:分钟
Calendar.SECOND:秒
Calendar.DAY_OF_WEEK:星期
常用方法
Calendar cal = Calendar.getInstance(); //获取当前日历
//获取时间
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
//设置时间
cal.set(Calendar.YEAR, 1);
//判断时间
cal.before(cal2);
cal.after(cal2));
其他类
1. Object类
Object类时所有类的父类,Java中所有的类都直接或间接继承Object类
1.1 常用方法
boolean equals(Object obj); //判断是否相等
int hashCode() //返回当前对象哈希值
void wait(); //当前线程等待被唤醒
void wait(long timeout) //当前线程等待指定时间
void notify(); //唤醒当前对象监视的线程
void notifyAll(); //唤醒所有线程
String toString() //返回当前对象字符串表示
1.2 重写toString()和equals()
-
public String toString()
:返回对象的类型名+@+内存地址,如test.Student@1b6d3586
,println中直接打印类名也会显示。equal()
默认判断的是地址值,在开发中通常会重写它们来得到期望的对象属性。class Person { private String name; private int age; @Override //重写toString public String toString() { return name + "." + age; } @Override //重写equals public boolean equals(Object obj) { if(this.age == obj.getAge() && this.name.equal(obj.getName())) { return ture; } return false; } }
-
为了防止当前对象为
null
时,仍然调用equal()
方法进行比较,可以调用Object
类的工具类Objects
类的equal()
方法进行比较String str1 = new String("abc"); String str2 = "def"; String str3 = null; System.out.println(str3.equals(str1)); //空指针,报错 System.out.println(Objects.equals(str3, str1)); //解决
1.3 Native方法
Native
修饰的方法称为本地方法,作用是当Java调用非Java代码的接口。本地方法的实现是由C++或其他非Java语言实现的
public class Object {
//本地方法
private static native void registerNatives();
//静态代码块
static {
registerNatives();
}
}
2. System类
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作
public static void exit(int status) 终止当前运行的Java虚拟机,非零表示异常终止
public static long currentTimeMillis() 返回当前时间(以毫秒为单位)
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 拷贝数组中的元素到另一个数组
参数1src: 源数组
参数2srcPos:源数组要拷贝的元素的起始索引(从哪个索引位置开始拷贝)
参数3dest: 目标数组
参数4destPos:目标数组接收拷贝元素的起始索引(从哪个索引位置开始接收)
参数5length:需要拷贝多少个元素(拷贝多少个)