【JavaSE---10】常用类

1. 包装类(基本类型对应的类)

在这里插入图片描述

1.1 装箱与开箱

  1. jdk1.5以前必须手动装箱与开箱
    在这里插入图片描述
  2. jdk1.5及以后必须手动装箱与开箱
    在这里插入图片描述

1.2 包装类与String相互转换

在这里插入图片描述

1.3 常用方法

在这里插入图片描述

1.4 细节

  1. 包装类重写了toString方法。打印变量,输出的是该数值的字符串形式。
    在这里插入图片描述
  2. 区分下面两种:
    在这里插入图片描述
  3. valueOf方法是在堆中分配了空间,还是使用堆中作为缓存的数组中的值?
    这涉及到Integer与常量池的关系,点击查看详细内容
  4. 基本数据类型 == 对应的包装类:比较值是否相等。
    因为,Integer就会拆箱成一个int类型,所以还是相当于两个int类型进行比较,这里的Integer,不管是直接赋值,还是new创建的对象,只要跟int比较就会拆箱为int类型,所以表现为直接比较值是否相等。
    在这里插入图片描述

2. 字符串相关类

2.1 String

2.1.1 String类结构

  1. Stringfinal类,不能被继承。
    ② 实现了SerializableComparable接口。前者可以用于串行化(文件保存、网络传输等);后者可用与大小比较。
    ③ 并使用final修饰的char型数组value属性去保存常量池中对应字符串的地址。
    在这里插入图片描述
  2. 有很多构造器,常用的构造器有:
    在这里插入图片描述

2.1.2 String两种创建方式

  1. 两种创建方式:
    1. 直接赋值字符串,如:String s = "abc";
    2. 采用new的方式,如:String s = new String("abc");
  2. 流程分析:
    1. String s = "abc";:到方法区的常量池中去查找是否有"abc",有则将该字符串的地址给s;没有则在常量池创建"abc",再将其地址给s。
      在这里插入图片描述
    2. String s = new String("abc");:先在堆中实例化String对象,并将堆地址给s,再在常量池中查找是否有"abc",有则将该字符串的地址给String对象的value属性;没有则在常量池创建"abc",再将其地址给value属性。
      在这里插入图片描述
  3. 练习:

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

2.1.3 常用方法

2.1.3.1 intern方法

intern方法:在常量池中查找该字符串,如果存在,则返回其在常量池中的地址;不存在,则在常量池中添加该字符串后,将该字符串的地址返回。
在这里插入图片描述

2.1.3.2 其他方法

在这里插入图片描述

在这里插入图片描述

注意:以上方法都不会修改原字符串。

2.1.4 String细节

  1. 字符串常量进行+,结果看池 在这里插入图片描述
  2. 至少含有一个字符串变量相加,结果看堆 :s = a + "123"s = a + b
    在这里插入图片描述
  3. 字符串是类,故不可以当作数组使用(如:str[1])。如果需要当作数组使用,可以使用toCharArray()转为字符数组。

练习:


  1. 在这里插入图片描述

  2. 在这里插入图片描述

  3. 在这里插入图片描述

2.2 StringBuffer

2.2.1 StringBuffer类结构

  1. StringBufferfinal类,不能被继承。
    StringBuffer继承了AbstractStringBuilder,从而继承了AbstractStringBuilder类的value属性。
    【注意:(1)Stringvalue是用于保存字符串常量的地址;(2)StringBuffervalue没有final修饰,所以可以修改指向,而其指向的堆中数组存储字符串】
    ③ StringBuffer实现了Serializable接口,故可以串行化(文件保存、网络传输等)
    在这里插入图片描述
    2. 构造器
    在这里插入图片描述

2.2.2 常用方法

  1. 增:append方法
    在这里插入图片描述
  2. 删:delete方法:左闭又开
    在这里插入图片描述
  3. 改:replace方法:左闭又开
    在这里插入图片描述
  4. 插:insert方法
    在这里插入图片描述

2.2.3 细节

  1. ① length方法返回的是value所指向的char数组所占字符部分的长度,而不是数组长度。
    ② append方法添加bull:sb.append(null),会将value指向的字符数组内容置为"null",故不会报空指针异常。
    在这里插入图片描述
  2. 使用StringBuffer构造器,传入的参数不能为null,否则会报空指针异常。
    在这里插入图片描述

2.3 StringBuilder

  1. StringBuilder是StringBuffer的简易替换。它兼容StringBuffer的API,即有其所有方法,但是这些方法没有实现互斥。
  2. StringBuilderCRUD最快。但是比较局限,只能用于字符串缓冲区被单个线程使用的情况。
  3. StringBuilder的类结构和StringBuffer的类结构一样,而不是String。

2.4 String vs StringBuffer vs StringBuilder

2.4.1 优缺点分析

String增删时 效率低且浪费资源复用性高
StringBuffer增删效率较高线程安全
StringBuilder增删效率最高线程不安全

String增删浪费资源:如s += "abc"; 会使得原来的字符串s还保留在常量池中,浪费资源。

2.4.2 String 与 StringBuffer 相互转换

  1. String—>StringBuffer :
    在这里插入图片描述
  2. StringBuffer —>String: 在这里插入图片描述

3. Math(都是静态方法)

  1. Math.abs方法:取绝对值,返回原类型
    在这里插入图片描述
  2. Math.pow方法:求幂,返回double类型
    在这里插入图片描述
  3. Math.ceil方法:向上取整,返回的是double类型
    在这里插入图片描述
  4. Math.floor方法:向下取整,返回的是double类型
    在这里插入图片描述
  5. Math.round:四舍五入,返回的是long类型
    在这里插入图片描述
  6. Math.sqrt:开方,返回double类型
    在这里插入图片描述
  7. Math.random方法:等概率生成 [ 0, 1)的随机小数,返回double类型

    Math.random()方法之「修改随机生成数的概率 | 随机生成[a, b]的小数 | 随机生成[a, b]的整数」

  8. Math.max方法:得到两个数中大的,返回类型为自动转换的最大类型。
  9. Math.min方法

4. Arrarys(都是静态方法)

4.1 Arrarys.toString方法

Arrarys.toString方法:传入数组,返回 [1, 2, 3] 形式的字符串。
在这里插入图片描述

4.2 Arrarys.sort方法

Arrarys.sort方法:对数组进行排序 (二叉排序) ,会改变原数组。

  1. 默认是从小到大排序。
    在这里插入图片描述
  2. 如果想从大到小排序,则需要传入Comparator对象,该sort重载方法需要两个参数:
    引用类型的数组,不可以是基本类型的数组。
    ② 还需要传入一个Comparator的匿名内部类实现接口编程从而作为参数。
    在这里插入图片描述

    compare方法中,若返回值小于0,则说明该元素排在前面;若返回值大于0,则说明该元素排在后面。

  3. 对于非包装类数组,想根据对象的某属性进行排序,还是使用形参为Comparator接口的sort重载方法:
    在这里插入图片描述
  4. 细节:
    1. 数组必须存放元素存满才可以使用该方法,否则报空指针异常。
    2. 多重比较。
      1. 若要比较的属性为基本数据类型,则写在比较器中。
        下面例子:按年龄由小到大排序,若年龄相等,则按成绩由小到大排序。
        在这里插入图片描述
      2. 若存在比较的数据类型为引用数据类型,则该类型的比较不写在比较器中,写在该类中。 具体步骤:让该类实现Comparable接口,重写compareTo方法。
        下面例子:按年龄从小到大排序,若年龄相等,则按出生日期从小到大排序。
        在这里插入图片描述

4.3 Arrarys.binarySearch方法

Arrarys.binarySearch方法:采用二分查找。注意

  1. 要求传入的数组必须有序。
  2. 没有则返回 负数
    在这里插入图片描述

4.4 Arrarys.copyOf方法

Arrarys.copyOf方法:复制数组。两个参数。

  1. 第一个参数传数组
  2. 第二个传要复制的长度。如果传入长度大于原数组长度:
    1. 为基本数据类型的数组,则在超过的元素为默认值。
      在这里插入图片描述
    2. 为包装类类型的数组,则在超过的元素为null
      在这里插入图片描述

该方法底层使用的是System.arraycopy()方法。

4.5 Arrarys.fill方法

Arrarys.fill方法:将数组所有的元素都设置为某值。
在这里插入图片描述

4.6 Arrarys.equals方法

Arrarys.equals方法:比较两个数组的元素是否完全一致。返回布尔类型。
在这里插入图片描述

4.7 Arrarys.asList方法

Arrarys.asList方法:将传入的多个数据转为List集合。该集合的:

  1. 编译类型:List
  2. 运行类型:java.util.Arrays$ArrayList 即Arrays下的一个静态内部类
    在这里插入图片描述

5. System(都是静态方法)

  1. System.exit方法:表示退出程序。传入0表示正常退出,非0表示异常退出。
    在这里插入图片描述
  2. System.arraycopy方法:将一个数组的部分或所有元素复制到另一个数组。
    在这里插入图片描述
  3. System.currentTimeMills方法:返回当前时间距离1970-1-1日的毫秒数。
  4. System.gc方法:请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。

6. 大数据

6.1 BigInteger

BigInteger用于long存放不下的数据。

  1. 大数据一般以字符串的形式传入BigInteger的构造器
    在这里插入图片描述
  2. 使用方法进行加减乘除。传入的数据也必须是BigInteger类型
    ① 加:add方法
    ② 减:subtract方法
    ③ 乘:multiply方法
    ④ 除:divide方法
    在这里插入图片描述

6.2 BigDecimal

BigDecimal用于大数据且比double进度更高的数据。

  1. 高精度小数一般以字符串的形式传入BigInteger的构造器
    在这里插入图片描述
  2. 使用方法进行加减乘除。传入的数据也必须是BigDecimal类型
    ① 加:add方法
    ② 减:subtract方法
    ③ 乘:multiply方法
    ④ 除:divide方法:可能报AirthmeticExcepion异常,因为可能为无限循环或不循环小数。故可以传入第二参数指定小数位数,一般传BigDecimal.ROUND_CEILING,结果与分子精度相同。
    在这里插入图片描述

7. 日期日历

7.1 第一代日期类:java.util.Date

  1. 构造器
    1. 无参构造器:当前日期的Date对象
      在这里插入图片描述
    2. 一个参数的构造器:传入距离1970-1-1后的毫秒数,得到对应的Date对象
      在这里插入图片描述
  2. 应用:
    1. 自定义排版日期:实例化SimpleDateFormat对象,并使用其format方法
      在这里插入图片描述

      对应字母的含义
      在这里插入图片描述

    2. 根据自定义排版日期字符串逆向转换为Date对象:实例化SimpleDateFormat对象或使用之前将其转为字符串的sdf,并使用其parse方法【parse方法抛出了异常,需要处理,因为可能转换格式不匹配】
      在这里插入图片描述

7.2 第二代日期类:Calendar

  1. Calendar是一个抽象类,并且构造器是私有的,只能用Calendar.getInstance()方法获取。
  2. 使用Calendar对象的get方法能够获取年月日等:注意月是从0开始,需要加1
    在这里插入图片描述
  3. 没有自定义排版的方法,需要自己使用字符串拼接

7.3 第三代日期类:LocalDate(年月日)、LocalTime(时分秒)、LocalDateTime

在这里插入图片描述

  1. LocalDateTime是一个final类,构造器私有。
  2. 使用LocalDateTime.now()方法获取当前时间的LocalDateTime对象,并使用相关方法获取年月日时分秒
    在这里插入图片描述
  3. 应用
    1. 自定义排版日期:使用DateTimeFormatter.ofPattern("")获取DateTimeFormatter对象,并使用其format方法
      在这里插入图片描述
      在这里插入图片描述
    2. 逆过程与Date的类似
  4. 还有其他方法很强大,如lplus等

7.4 时间戳 Instant

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElegantCodingWH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值