适合有编程基础的人看的《韩顺平零基础30天学java》笔记(P460~P498)

本文详述了Java中的包装类、String特性和方法、StringBuffer与StringBuilder的使用,包括它们的构造、转换及效率比较,还涉及Math、Arrays、System类的相关知识点,以及日期类的概述。强调了编程思想在参数验证中的应用。

写在最前边:

研究生一枚,为后端实习和未来工作打基础。无意间发现韩顺平老师的课程,细心细致,讲课和吴恩达老师一样,都是保姆式讲解,各种基础知识都会补充,爱了。
韩顺平老师课程地址:https://www.bilibili.com/video/BV1fh411y7R8?spm_id_from=333.999.0.0
阅读提醒:本笔试适合有编程语言基础的伙伴阅读,因为本兔兔是本专业的,有c、c++、python 、sql基础,笔记中特别的基础的内容就没有记录。完全零基础的小伙伴建议跟着韩老师的课程自己记录。

Java 基础

第三阶段 java语言中面向对象的一些应用

第三章 常用类

在这里插入图片描述

Serializable接口:实现这个接口的类可以串行化、在网络中传输;

Comparable接口:实现这个接口的类,其对象可以比较

一、包装类 Wrapper
1、概念
针对八种基本数据类型,定义了相应的引用类型,这些引用类型就是包装类。他们的继承关系一定要很熟悉

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、好处
有了类的特点,就可以封装一些方法供其使用
3、包装类和基本数据的转换(以int 和 Integer为例

(1)jdk5之前需要手动装箱(int -> Integer)、拆箱(Integer -> int)。
在这里插入图片描述
(2)jdk5开始可以自动装箱(底层使用Integer.ValueOf())、拆箱(底层使用Integer.intValue())。在这里插入图片描述

valueOf()方法的源码:重要
low = -128 , high = 127在这里插入图片描述
解释:当i ∈[-128,127]时,直接从cache数组中取数字返回,所以如果数组一样返回的就是用一个cache数组对象;否则会new Integer(i)这个对象哦!

4、练习题在这里插入图片描述在这里插入图片描述细节本题考查的是三元运算符应看做整体,精度全部与最高的精度对齐,所以第一问输出1.0,而if-else不是整体哦,所以输出1。

在这里插入图片描述
细节本题考查的是Integer.valueOf(i)的源码
在这里插入图片描述
细节本题考查的是 ==的应用,只要有基本数据类型,==就是判断值是否相等的

5、包装类与String的转换(以Integer <-> String为例

Integer ==>> String的三种方式
在这里插入图片描述
String ==>> Integer的三种方式
在这里插入图片描述

6、包装类的常用方法

idea中可以查看所有方法
在这里插入图片描述
在这里插入图片描述

二、Stirng类
1、概念
  • 是一组字符序列,保存字符串
  • 用“ ”括起来的是字符串常量对象
  • 字符串的字符使用Unicode编码,中英文字符均占两个字节
  • String类的构造方法很多
    在这里插入图片描述
  • 继承关系在这里插入图片描述
  • String是final类
  • String的底层仍然是char数组,保存在char value[]中,且value[]为private final类型,赋值后地址不可修改,单个字符内容可以修改 在这里插入图片描述
    在这里插入图片描述
2、String 对象的两种创建方式详解在这里插入图片描述在这里插入图片描述

两种方式创建的对象不会是同一个

方式一的一些扩展:
  • String a = “hello” + “abc”;
    只创建了一个对象,因为底层会自动优化,变成String a = “helloabc” 去执行
  • String a = “hello”;
    String b = “abc”;
    String c = a + b;
    创建了三个对象,底层执行步骤:(利用StringBuilder)
    在这里插入图片描述
    最关键的是:String c = sb.toString()中的toString()是new一个对象,因此c会指向堆。
    在这里插入图片描述
    最终的内存图:
    在这里插入图片描述> String d = “helloabc”; c==d > false
3、String类的一些小方法
  • intern() 查看常量池中是否存在此字符串。存在则返回常量池中的地址,否则将字符串对象添加到池中并返回池中的地址。
  • 其他常用方法
    在这里插入图片描述
  • 其他
    在这里插入图片描述
    细节1:replace()
    不会对原字符串进行修改,需一个字符串对象接收替换后的字符串。
    细节2:split()方法:
    如分割点含有特殊字符,需要使用 \ 转义字符
    在这里插入图片描述
    细节3:conpareTo()方法看源码
    如a.compareTo(b):
    a.length() != b.length() 则返回a.length() - b.length();
    a.length() == b.length() 则从头开始依次遍历两数组,直到第一个不一样的字符,返回a[i] - b[i] 的ascii码之差;

    a和b一模一样,返回0
    细节4:format()的妙用
    在这里插入图片描述
4、由于字符串常量不可修改,而String是保存字符串常量的,所以造成String类的拼接或者修改会效率很低,要占用很多内存

在这里插入图片描述

练习题

在这里插入图片描述

三、StirngBuffer类
1、概念

StringBuffer是可变的字符序列,可以对内容进行增删String类不可以
StringBuffer是String类的衍生和补充,最大的不同就是StringBuffer的长度可变
StringBuffer 同时是一个容器

2、继承关系

在这里插入图片描述
StringBuffer的存储字符的数组value[] 是在其父类中定义的,且无final修饰符,所以存放在堆中。
String类的value[]被final修饰,所以存放在常量池
在这里插入图片描述
StringBuffer本身是个final类

3、和 String 的保存内容的区别

在这里插入图片描述
细节:StringBuffer更改地址的时机当开辟的空间不能存放下即将加入的字符时

4、StringBuffer的构造器

在这里插入图片描述

解读1,2,4构造方法:

构造方法1:value[]大小为16
构造方法2:value[]大小为capacity
构造方法3:value[]大小为str.length() + 16

5、StringBuffer 和 String的转换
  • String ==>> StringBuffer
    1、通过StringBuffer的第四种构造器
String str = "hello";
StringBuffer stringBuffer = new StringBuffer(str);

若str = null ,在执行 new StringBuffer(str)时,由于源码会执行super(str.length()+16),因此这个会报错:空指针异常
2、通过StringBuffer的append方法

String str = "hello";
StringBuffer stringBuffer = new StringBuffer();
stringBuffer = stringBuffer .append(str);

若str = null ,在执行 append(str)时,由于源码对str为null有相应的处理函数——appendNull方法,将null作为字符存入,因此这个不会报错

  • StringBuffer ==>> String
    1、通过String的构造器
StringBuffer stringBuffer = new StringBuffer("hello");
String s = new String(stringBuffer);

2、通过StringBuffer的toString方法

StringBuffer stringBuffer = new StringBuffer("hello");
String str = stringBuffer.toString();
6、StringBuffer 的常用方法

在这里插入图片描述
细节·delete删除、replace替换的内容范围是 [start , end)

三、StirngBuilder类
1、概念

可变的字符序列,与StringBuffer兼容API。
存在线程安全问题,但是其效率在单线程中远大于StringBuffer
在这里插入图片描述
在这里插入图片描述

StringBuilder的append\insert方法可以进行重载

2、继承关系

在这里插入图片描述

3、String \ StringBuffer \ StringBuilder的比较

在这里插入图片描述
在这里插入图片描述

四、Math类
针对一些数学运算,它的方法都是静态方法,不需要创建Math对象,直接Math.方法使用就可以

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

四、Arrays类
针对一些数组操作,它的方法都是静态的。在这里插入图片描述
sort()细节sort(arr , new Comparator(){compare()…})的自定义排序方式底层实现源码 充分体现了 接口编程 + 动态绑定 + 匿名内部类综合使用的好处。在底层框架和源码中使用非常常见
binarySearch()细节若能在排好序的数组中查到到,则返回下标;否则返回 - ( low + 1)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、System类

在这里插入图片描述
老师的对各方法的解读
在这里插入图片描述
在这里插入图片描述

六、大数处理类——BigInteger、BigDecimal

在这里插入图片描述
注意1大数类不能直接用 + - X /,而要用类相应的方法
注意2大数类的divide要避免出现无限循环的异常,可以在方法中加一个参数
在这里插入图片描述

七、日期类
第一代:Date

在这里插入图片描述

String ==>> Date

在这里插入图片描述

在这里插入图片描述

第二代:Calendar

1、构造器私有,需要通过getInstance()获得一个对象
2、提供了大量的字段和方法
3、程序员可以按需组合,任意格式,很灵活。

Date 和 Calendar 的不足

在这里插入图片描述

JDK8加入第三代:LocalDate、LocalTime、LocalDateTime

在这里插入图片描述
在这里插入图片描述

可以对日期进行运算。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

编程思想:对参数验证时,写出正确的情况再取反,思路不会乱。

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值