【Java】韩顺平Java 学习笔记 第13章 常用类

第13章 常用类

1.包装类

  • 八种基本数据类型

  • 它们继承的类和方法?(Object、Serializable、Comparable)

  • 包装类与基本数据类型的转换:自动装箱拆箱

  • 三元运算符是一个整体的符号

    Object obj1 = true ? new Integer(1) : new Double(2.0);
    System.out.println(obj1);
    //输出的是1.0,而不是1,因为double也已经加载,类型自动转换为double
    
  • 包装类与String的转换


2. Integer 类和 Character 类

  • 常用方法?
  • 装箱时 i 在 -128~127,直接返回该数字
    否则 new Integer(i);
  • 判断是否 == 时,new 一个新对象的都是在比较地址,一定不相等
  • 两个比较的内容之一是基本数据类型,== 比较的就是数值

3. String 类

  • 常用构造器

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

    value 是一个 final 类型,不可以修改; 即 value 可以修改里面的值,但是不能修改指向的地址

  • 创建 String 对象的两种方式和区别(栈、常量池、堆,注意内存分布)

    • new String 对象:先在堆创建values数组,再指向常量池中的字符串常量(对象在栈中)

    • String str = “xxxxx” : 直接在常量池中创建“xxxxx”字符串常量,对象直接指向它

  • 对象不相等,但里面的属性指向常量池的同一个对象,这两个属性相等

  • intern() 方法:在常量池中查询该字符串是否存在(equals判断)

    • 存在,返回该常量池中的字符串引用
    • 不存在,把这个String对象引用存到常量池,然后返回它

String 对象特性

  • 字符串不可变,一个字符串对象一旦分配,内容不变,修改字符串的值实际上是在常量池创建

    一个新的字符串,变量指向它

  • String a = "hello" + "abc";
    //创建了一个对象helloabc
    
  • String a = "hello";
    Stirng b = "abc";
    String c = a+b;
    //通过 append 追加的方法创新的字符串	,toString方法?
    //c指向堆中的对象(String)value[] -> 池中"helloabc"
    //创建了三个对象
    String d = "helloabc" //c != d
    
  • 总结:常量相加,看的是池;变量相加,看的是堆
    学习思路:看源码学习

  • 常用方法

    • equals 区分大小写,有忽略的版本
    • charAt 不能用str[0],这样将字符串看成一个数组了
    • length
    • indexOf
    • lastIndexOf
    • substring,传参不同功能不同
    • toUpperCase
    • toLowerCase
    • concat
    • replace 返回的是变化过的,但原先的字符串不变
    • split 注意分割特殊字符时要用转义字符
    • toCharArray
    • compareTo
    • format(%s %d %.2f %c 占位符——C语言)

4.StringBuffer类

  • 可以拓展内容

  • char value[] 存储数据,不是final,所以存在堆中

  • String VS StringBuffer

    • 字符串内容在常量池固定(字符串常量),更改或删除需要频繁更换地址和创建新对象
    • StringBuffer 保存的是字符串变量,不用每次都创建对象更换地址,效率更高。StringBuffer对数组value进行扩容是创建一个新数组(增加容量,大小由算法决定),把原先的数据复制过去
  • 构造器

  • String 和 StringBuffer 转换

  • 常用方法

    • 增 append
    • 删 delete
    • 改 replace
    • 查 indexOf
    • 插 insert (String 类里没有这个方法!)
    • 长度 length

5.StringBuilder类

  • StringBuffer 的简化版本
  • StringBuffer 在多线程使用, StringBuilder 在单线程使用(没有线程安全,没有做同步互斥处理)
  • 但StringBuilder速度更快
  • 常用append和insert方法
  • String VS StringBuffer VS StringBuilder
    • String 是不可变序列,效率最低,但复用率高(复用常量池中的数据)
    • StringBuffer 是可变序列,效率较高,线程安全
    • StringBuilder 是可变序列,效率最高,线程不安全
  • 总结:
    • 如果对String做大量修改,不要用String
    • 存在大量修改用StringBuffer 或 StringBuilder, 单线程用StringBuilder,多线程用StringBuffer
    • 字符串很少修改,且被多个对象引用,用String ,如配置信息

6.Math类

  • 基本上都是静态方法

  • abs

  • pow

  • ceil

  • floor

  • round

  • sqrt

  • random

    • 思考:获取 a~b 之间的一个随机整数,a,b均为整数

      (int) (a + Math.random() * ( b - a +1 ))

  • max

  • min


7.Arrays类

  • toString
  • sort (注:数组是引用类型,使用这个方法会直接影响实参)
    • Comparator实现定制排序(匿名内部类)
  • binarySearch (若不存在,返回应该存在的位置+1的负数)
  • copyOf
  • fill
  • equals
  • asList

8.System类

  • exit
  • arraycopy
  • currentTimeMillens
  • gc

9.BigInteger & BigDecimal

  • 编程中遇到很大的数的处理方案——BigInteger

  • 遇到精度很高的数,double不够用——BigDecimal

  • new的时候传入的参数是字符串

  • BigInteger、BigDecimal进行加减乘除需要使用对应的方法

    • add

    • subtract

    • multiply

    • divide

      注:BigDecimal除法时可能会异常(结果为无限循环小数时)

      解决方法:指定精度

      divide(bigDecimal,BigDecimal.ROUND_CEILING),保留分子精度


10.日期类

Date

  • Date date = new Date() 默认输出格式是国外的格式

    转换格式:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E")

    具体参数意义查表得

  • new Date(23123431)

  • parse

Calendar

  • 抽象类,构造器是protected,不能被new出来(无法实例化)
  • getInstance
  • get (没有对应的格式化,需要自己组合)
    • Calendar.MONTH(注意月是从0开始计算的)
    • Calendar.YEAR
    • Calendar.HOUR
    • Calendar.HOUR_OF_DAY(24小时制)

第三代日期类

  • 前两代的不足:
    • Calendar 的月份从0开始算起
    • Date 无法分别提取各个信息
    • 线程不安全
    • 日期和时间的类应该是不可变的
    • Calendar 没有格式化
    • 不能处理闰秒等
  • JDK8加入第三代
  • 类名:LocalDate、LocalTime、LocalDateTime
  • 实例化:LocalDateTime ldt = LocalDateTime.now()
  • 获取数据方法
    • getYear
    • getMonth(单词)
    • getMonthValue(数字)
    • getDayofMonth
    • gerSecond
  • 其它方法
    • DateTimeFormatter类(格式化)
      • ofPattern
      • format
    • Instant类(时间戳)
      • now (实例化当前时间戳对象)
      • from (Instant -> Date)
      • Date 的 toInstant 方法 (Date -> Instant)
    • plus
      • plusDays
      • plusYears
      • pulsMonths
    • minus
      • minusDays
      • minusMonths
      • minusMinutes
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值