大佬给推荐的韩顺平老师的课程 2021年刚刚录的船新版本! 【零基础 快速学Java】韩顺平 零基础30天学会Java 硬把从另一个讲师那里看了300多集的我拽过来 几十节课一下子爱上这个节奏了!安利!!
具有其他语言基础的盆友只需要把前几章的章节总结简单看一下 然后再去着重看需要学习的章节就可以了! 知识点分的非常清晰! 每章还有总结 这…真的是我理想中的学习资料呐!
学习笔记整理过后放到这里
- 一方面是让自己再二次记忆一下
- 一方面是希望可以帮到有这方面知识需要的朋友 给他们一个新的切入点来重新了解这一个知识
本专题包括以下几个主要知识点~
 本次笔记主要记录 Object类中部分方法详解 、 断点调试的内容 学习一下Object类中的一些方法 为之后学习集合的时候打好基础~ 另外程序员的必备技能——断点调试要进行一个初步的了解~
8.Object类详解
Object类中的方法 其子方法都拥有
而Object又是所有类的超集
因此 所有对象都可以用Object类中的方法
所以我们应该去了解下~
接下来我们来学习下下面的方法—— 
【1】经典面试题 ==和equals方法的对比
-
== 是一个比较运算符
-
即可以判断基本类型 又可以判断引用类型
- 判断基本类型时 是判断值是否相等
- 判断引用类型时 是判断地址是否相等(即判定是不是同一个对象)
 -
equals方法
- Object类中的原始方法 只能判断引用类型 也就是看比较的二者是不是同一个对象
但是!虽然默认的equals方法判断地址是否相同
Object的子类一般都会重写这个方法 用于判断内容是否相等
我们查看一下各个类的equals的源码 加深下印象!
1.查看Jdk 源码
步骤:
一般IDEA配置好JDK之后 jdk 的源码也就自动配置好了
所以直接把光标放在想要查看方法的位置然后ctrl+b即可查看源码  如果ctrl+b没反应的话 可以跟着韩老师的步骤配置一下
【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_
我们可以打开边缘处的structure来看一下String类的所有方法 一目了然嗷~ 
2.解析String类、Object类的equals方法
Object类对应的equals方法
比较简单~
只是简单地判断了对象是否相同 
String类对应的equals方法
就像上面说的 作为Object的子类 String类重写了equals方法 
下面是String类对应的equals方法源码
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
3.举例说明两个子类中equals方法的用法
 可见str1 str2并不是同一个对象 所以第一个判断输出false
而第二个equals方法在子类中重写之后就不判断地址是否相等(是否为同一个对象)了 只去关注内容是否相等!
所以输出true
注意下面这一条注意事项哦! 
4.equals方法课堂练习
练习重写equals方法
回头要记得来练习哦~一共有三道练习题
【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩
小练
【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_
【2】hashCode 方法
之后在讲Hash表相关结构的时候要用到这个方法~
想学好hashCode 的底层 需要用到集合的知识 所以我们先学习下hashCode 表面的知识
1.方法用途
返回该对象的哈希码值
支持此方法是为了提高哈希表(eg:java.util.Hashtable 提供的哈希表)的性能
老韩给出的几个小结——
【1】提高具有哈希结构的容器的效率
【2】两个引用如果指向的是同一个对象 那么哈希值肯定是一样的  【3】两个引用如果指向的不是同一个对象 那哈希值就不一样咯~
【4】哈希值是根据地址给分配的一个特殊的值 并不是等价于地址哦!(之前在数据结构中学过哈希表的同学有没有点儿印象~)
【5】案例演示 测试一下几个对象的地址值是否相同
public class hashCode {
public static void main(String[] args) {
AA aa = new AA();
AA2 aa2 = new AA2();
AA aa3 = aa;
AA aa4 = aa;
System.out.println(aa.hashCode());
System.out.println(aa2.hashCode());
System.out.println(aa3.hashCode());
System.out.println(aa4.hashCode());
}
}
class AA{}
class AA2{}
结果如下:
 【6】后面在讲集合的时候 如果需要的话 也会重写 hashCode 到时候还会提到的哦~
【3】toString 方法
默认(也就是Object中的toString 方法)返回 “全类名(包名+类名) + @ + 哈希值的十六进制”
而子类往往会重写toString 方法 用于返回对象的属性信息
比如String类中 这个方法就会返回对象的字符串表示~ 
来举个例子
 然后来测试下Object类的toString 方法——  重写下toString 方法试试——   这时候调用toString 方法就可以输出对象的属性了 
直接输出一个对象的时候 toString 方法会被直接调用
嗯是的
就是这么个神奇的规则!
【4】finalize方法
 对象被回收时 系统自动调用该对象的finalize方法
子类可以重写该方法 做一些释放资源的操作
对象什么时候被回收?
正如上面所说
对象没有任何引用时 jvm 就认为这个对象是一个垃圾对象 就会使用垃圾回收机制来销毁该对象 比如:  销毁该对象前 会先调用finalize方法
我们可以重写这个方法哦~  举个例子—— 但是我们在运行方法之后会发现并没有输出以上的语句
【???】
这是因为垃圾回收器并不是时时刻刻在监控 一有一个垃圾就去回收!这样效率很低啦~
而这个垃圾回收机制是很复杂的 我们后面再去讲  我们可以通过 System.gc() 主动触发垃圾回收机制
像是呼叫保洁阿姨的操作
一般来说阿姨会过来帮你打扫垃圾
但是也有一定几率阿姨不过来~
主动触发之后 可以看到重写的finalize方法被调用了 
小结
实际开发中 我们几乎不会运用finalize方法
所以——
学这个更多就是为了应付面试QAQ
当然了 还是要学的哈!
9.断点调试(Debug)
【1】断点调试的用途
- 开发中 查找错误的时候 用断点调试一步步地看源码执行的过程 从而发现错误所在!
- 重要提示 断点调试的过程中 是运行状态 所以方法是根据对象的运行类型来执行的
【2】断点调试介绍
断点调试的步骤
在程序的某一行设置一个断电 调试时 程序运行到这一行就会停住  然后我们可以一步步地往下调试 调试过程中可以看到各个变量当前的值
出错的话 调试到出错的代码行即显示错误
我们停下并进行分析 就可以找到这个Bug了~
断点调试是程序员必须掌握的技能
而且除了Debug这个功能 断点调试也可以帮助我们查看java底层源代码的执行过程 提高程序员的Java水平
【3】断点调试六个案例
二刷课程的时候一步步地跟着做嗷~
【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_
为啥我多态之后这里的课程练习都不做了呢
一个是因为假期想快速过一下课程
还有一个就是假期在家没有双屏 IDEA和视频共存超级难受啦!
我们二刷见!
10.本章作业
至此 我们《面向对象编程(OOP)中级》部分的学习就告一段落了! 接下来的练习题——
https://www.bilibili.com/video/BV1fh411y7R8?p=343
一共有16道题 等二刷的时候我们先做再听课~
用来回忆知识点
|