八大常用类

八大常用类

包装类

  • 针对八种基本数据类型相应的引用类型----包装类

  • 有了类的特点,就可以调用类中的方法
    请添加图片描述

  • jdk 5 前的手动装箱和拆箱方式, 装箱:基本类型-》包装类型,反之,拆箱

  • jdk 5以后自动装箱和拆箱方式

  • 自动装箱底层调用的是valueOf方法,比如Integer.valueOf()

  • 包装类型和String类型的相互转换
    请添加图片描述

  • 如果i 在-128~127,就直接从数组返回,不在的话直接new Integer(i)

  • 只要有基本数据类型判断的是值是否相同

String类

  • String对象用于保存字符串,也就是一组字符序列

  • 字符串常量对象是用双引号括起的字符序列

  • 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节

  • String 类实现了接口 Serializable [String 可以串行化:可以在网络传输]

    ​ 接口 Comparable[String 对象可以比较大小]

  • String 是final 类,不能被其他的类继承

  • String 有属性 private final char value[];用于存放字符串内容

  • 创建String对象的两种方式:

    • 直接赋值 String s= “hspedu”;
    • 调用构造器 String s = new String(“hspedu”);
  • 两种创建String对象的区别

    • 方式一:直接赋值 直接赋值 String s= “hsp”;
    • 方式二:调用构造器 String s2= new String(“hsp”);
    • 方式一:先从常量池查看是否有"hsp"数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址
    • 方式二:先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间。如果常量池没有"hsp",重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址
      请添加图片描述
  • 字符串的特性:

    • String是一个final类,代表不可变的字符序列
    • 字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的
  • String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilderStringBuffer来增强String的功能,并提高效率

StringBuffer

  • StringBuffer:
    • java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。很多方法与String相同,但StringBuffer是可变长度的。StringBuffer是一个容器

    • String VS StringBuffer:

      • String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低
      • StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率高
    • 请添加图片描述

    • String和StringBuffer相互转换

    • 请添加图片描述

    • 方法一返回的才是StringBuffer对象,对str本身没有影响

  • StringBuffer类常见方法:
    • 增 append
    • 删 delete(start,end)
    • 改 replace(start,end,string) //将start----end 间的内容替换掉,不含end
    • 查 indexOf //查找子串在字符串第1次出现的索引,如果找不到返回-1
    • 插 insert
    • 获取长度 length

StringBuilder

  • 一个可变的字符序列。此类提供一个与StringBuffer 兼容的API,但不保证同步(StringBuilder 不是线程安全)。该类被设计用作 StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快

  • 在StringBuilder 上的主要操作是 append和insert方法,可重载这些方法,以接受任意类型的数据

  • StringBuilder是final类,不能被继承

  • StringBuilder 对象字符序列仍然是存放在其父类AbstractStringBuilder的 char[] value;因此,字符序列是堆中

  • StringBuilder的方法,没有做互斥的处理,即没有synchronized 关键字,因此在单线程的情况下使用StringBuilder

  • String,StringBuffer 和StringBuilder 的比较

    • StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且方法也一样

    • String: 不可变字符序列,效率低,但是复用率高

    • StringBuffer:可变字符序列,效率较高(增删),线程安全

    • StringBuilder:可变字符序列,效率最高,线程不安全

    • String使用注意说明:

      • string s=“a”; //创建了一个字符串

        s += “b”;//实际上原来的“a“字符对象已经丢弃了,现在又产生了一个字符串s+=“b”(也就是”ab“)。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能=》结论:如果我们对String 做大量修改,不要使用String

    • 使用原则:

      • 如果字符串存在大量的修改操作,一般使用StringBuffer 或StringBuilder
      • 如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder
      • 如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
      • 如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息等

Math类

  • Math类包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数
  • 方法一览:
    • abs 绝对值
    • pow 求幂
    • ceil 向上取整
    • floor 向下取整
    • round 四舍五入
    • sqrt 求开方
    • random 求随机数
    • max 求两个数的最大值 min 求两个数的最小值

Arrays类

  • Arrays类常见方法: 里面包含了一系列静态方法,用于管理或操作数组
    • toString 返回数组的字符串形式
    • sort 排序(自然排序和定制排序)
    • binarySearch 通过二分搜索法进行查找,要求必须排好序,如果数组中不存在该元素,就返回return -(low + 1);
    • copyOf 数组元素的复制 Arrays.copyOf(arr,arr.length);
    • fill 数组元素的填充 Arrays.fill(num,99); 用99填充数组元素
    • equals 比较两个数组元素内容是否完全一致
    • asList 将一组值,转换成list

System类

  • System类常见方法:
    • exit 退出当前程序
    • arraycopy : 复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组
    • currentTimeMillens:返回当前时间距离1970-1-1的毫秒数
    • gc :运行垃圾回收机制 System.gc();

BigInteger和BigDecimal类

  • BigInteger和BigDecimal常见方法:
    • add 加
    • subtract 减
    • multiply 乘
    • divide 除
    • 在调用divide 方法时,指定精度即可,BigDecimal.ROUND_CEILING 如果有无限循环小数,就会保留分子的精度
    • 应用场景:
      • BigInteger适合保存比较大的整型
      • BigDecimal适合保存精度更高的浮点型(小数)

日期类[知道怎么查,怎么用即可]

  • 第一代日期类:

    • Date:精确到毫秒,代表特定的瞬间 默认输出格式是国外的
    • SimpleDateFormat:格式和解析日期的具体类。它允许进行格式化(日期->文本),解析(文本->日期)和规范化
    • 请添加图片描述
    • new Date(); 获取当前系统时间 new Date(毫秒数);通过指定毫秒数得到时间
  • 第二代日期类:

    • 主要就是Calendar类(日历):

      ​ public abstract class Calendar extends Object implements Serializable,Cloneable,Comparable

    • Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR, MONTH , DAY_OF_MONTH,HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。其构造器是private 可以通过getInstance()来获取实例

  • 第三代日期类:

    • 前两代日期类的不足分析:

      • JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK1.1引入Calendar类之后被禁用了。而Calendar也存在问题是:
      • 1.可变性: 像日期和时间这样的类应该是不可变的。
      • 2.偏移性: Date中的年份是从1900开始的,而月份都从0开始
      • 3.格式化: 格式化只对Date有用,Calendar则不行
      • 4.此外,他们也不是线程安全的;不能处理闰秒等(每隔2天,多出1s)
    • 常见方法:

      • LocalDate(日期),LocalTime(时间),LocalDateTime(日期时间)JDK8加入

        LocalDate只包含日期,可以获取日期字段 LocalTime只包含时间,可以获取时间字段 LocalDateTime包含日期+时间,可以获取日期和时间字段

      • DateTimeFormatter格式日期类: 类似于SimpleDateFormat

        DateTimeFormatter dtf =DateTimeFormatter.ofPattern(格式);

        String str =dtf.format(日期对象);

      • Instant 时间戳 类似于Date 提供了一系列和Date类转换的方式

        Instant—>Date: Date date = Date.from(instant);

        Date—>Instant: Instant instant = date.toInstant();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值