IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 1.6 面向对象编程中级 Object类详解 断点调试初始-跟着韩老师学JavaSE -> 正文阅读

[Java知识库]1.6 面向对象编程中级 Object类详解 断点调试初始-跟着韩老师学JavaSE

大佬给推荐的韩顺平老师的课程 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;//如果是同一个对象
            //返回true
        }
        if (anObject instanceof String) {//判断类型anObject是否为String类型/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;//两个字符串的所有字符都相等 返回true
            }
        }
        return false;//如果比较的不是字符串 返回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道题 等二刷的时候我们先做再听课~

用来回忆知识点

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 11:56:40  更:2021-07-26 11:57:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 9:08:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码