写在最前边:
研究生一枚,为后端实习和未来工作打基础。无意间发现韩顺平老师的课程,细心细致,讲课和吴恩达老师一样,都是保姆式讲解,各种基础知识都会补充,爱了。
韩顺平老师课程地址: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


可以对日期进行运算。



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

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























> String d = “helloabc”; c==d > false














1275

被折叠的 条评论
为什么被折叠?



