 Java 对象的创建过程链滴 Java 对象的创建过程 作者:vcjmhg 原文链接:https://ld246.com/article/1619614850780 来源网站:链滴 许可协议:署名-相同方式共享 4.0 国际 (CC BY-SA 4.0) 概述 在之前的一篇文章《关于java继承的哪些事》简单讲了Java创建对象的过程,但具体细节当时并没有 细讲。因而本篇文章以HotSpot虚拟机为例, 来讲一下Java虚拟机是如何创建一个对象的? 简单来说Java对象的创建过程总共分为5步: Java创建对象的过程 类加载检查 首先当虚拟机遇到一个new指令时,首先会去检查这个参数能否在常量池中定位到这个类的符号引用 并且检查这个符号引用所代表的的类是否已经被加载、连接、解析和初始化过,如果没有需要先执行 的加载操作(详细过程可参考"类的加载流程" )。 分配内存 当类加载检查通过后 当类加载检查通过后,接下来虚拟机需要为新生对象分配内存,为对象分配空间的任务等同于把一块 定大小的内存从 Java 堆中划分出来。分配内存的方式主要有两种:指针碰撞和空闲列表。 具体选择哪种方式取决于Java堆是否规整。而Java堆是否规整取决于垃圾收集器所采用的垃圾回收算 是否具有空间压缩整理的能力。 具体来说,指针碰撞分配内存空间的过程如下: 在Java堆规整的情况下,所有被使用过的内存放到一边,所有未被使用过的内存放置到另一边,中间0 码力 | 4 页 | 389.87 KB | 1 年前3 Java 对象的创建过程链滴 Java 对象的创建过程 作者:vcjmhg 原文链接:https://ld246.com/article/1619614850780 来源网站:链滴 许可协议:署名-相同方式共享 4.0 国际 (CC BY-SA 4.0) 概述 在之前的一篇文章《关于java继承的哪些事》简单讲了Java创建对象的过程,但具体细节当时并没有 细讲。因而本篇文章以HotSpot虚拟机为例, 来讲一下Java虚拟机是如何创建一个对象的? 简单来说Java对象的创建过程总共分为5步: Java创建对象的过程 类加载检查 首先当虚拟机遇到一个new指令时,首先会去检查这个参数能否在常量池中定位到这个类的符号引用 并且检查这个符号引用所代表的的类是否已经被加载、连接、解析和初始化过,如果没有需要先执行 的加载操作(详细过程可参考"类的加载流程" )。 分配内存 当类加载检查通过后 当类加载检查通过后,接下来虚拟机需要为新生对象分配内存,为对象分配空间的任务等同于把一块 定大小的内存从 Java 堆中划分出来。分配内存的方式主要有两种:指针碰撞和空闲列表。 具体选择哪种方式取决于Java堆是否规整。而Java堆是否规整取决于垃圾收集器所采用的垃圾回收算 是否具有空间压缩整理的能力。 具体来说,指针碰撞分配内存空间的过程如下: 在Java堆规整的情况下,所有被使用过的内存放到一边,所有未被使用过的内存放置到另一边,中间0 码力 | 4 页 | 389.87 KB | 1 年前3
 Java 应用与开发 - 面向对象编程进阶大纲 多态性 方法重载 关键字 static 关键字 final Java 应用与开发 面向对象编程进阶 PART2 王晓东 wangxiaodong@ouc.edu.cn 中国海洋大学 September 30, 2018 大纲 多态性 方法重载 关键字 static 关键字 final 学习目标 1. 理解多态和虚方法调用的概念,掌握其用法 2. 掌握方法重载的方法 3. 掌握 final 什么是多态? 在 Java 中,子类的对象可以替代父类的对象使用称为多态。 O Java 引用变量与所引用对象间的类型匹配关系 ▶ 一个对象只能属于一种确定的数据类型,该类型自对象创建 直至销毁不能改变。 ▶ 一个引用类型变量可能引用(指向)多种不同类型的对象 ——既可以引用其声明类型的对象,也可以引用其声明类型 的子类的对象。 1 Person p = new Student(); Student类型对象 Person类型变量p 大纲 多态性 方法重载 关键字 static 关键字 final 什么是多态? 在 Java 中,子类的对象可以替代父类的对象使用称为多态。 O Java 引用变量与所引用对象间的类型匹配关系 ▶ 一个对象只能属于一种确定的数据类型,该类型自对象创建 直至销毁不能改变。 ▶ 一个引用类型变量可能引用(指向)多种不同类型的对象 ——既可以0 码力 | 49 页 | 659.74 KB | 1 年前3 Java 应用与开发 - 面向对象编程进阶大纲 多态性 方法重载 关键字 static 关键字 final Java 应用与开发 面向对象编程进阶 PART2 王晓东 wangxiaodong@ouc.edu.cn 中国海洋大学 September 30, 2018 大纲 多态性 方法重载 关键字 static 关键字 final 学习目标 1. 理解多态和虚方法调用的概念,掌握其用法 2. 掌握方法重载的方法 3. 掌握 final 什么是多态? 在 Java 中,子类的对象可以替代父类的对象使用称为多态。 O Java 引用变量与所引用对象间的类型匹配关系 ▶ 一个对象只能属于一种确定的数据类型,该类型自对象创建 直至销毁不能改变。 ▶ 一个引用类型变量可能引用(指向)多种不同类型的对象 ——既可以引用其声明类型的对象,也可以引用其声明类型 的子类的对象。 1 Person p = new Student(); Student类型对象 Person类型变量p 大纲 多态性 方法重载 关键字 static 关键字 final 什么是多态? 在 Java 中,子类的对象可以替代父类的对象使用称为多态。 O Java 引用变量与所引用对象间的类型匹配关系 ▶ 一个对象只能属于一种确定的数据类型,该类型自对象创建 直至销毁不能改变。 ▶ 一个引用类型变量可能引用(指向)多种不同类型的对象 ——既可以0 码力 | 49 页 | 659.74 KB | 1 年前3
 Java 应用与开发 - 面向对象编程进阶 PART1大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this Java 应用与开发 面向对象编程进阶 PART1 王晓东 wangxiaodong@ouc.edu.cn 中国海洋大学 September 23, 2018 大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this 学习目标 1. 掌握 Java 包、继承、访问控制、方法重写的概念、机制和 使用方法 继承 访问控制 方法重写 关键字 super 关键字 this 大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this 什么是继承? 继承(Inheritance)是面向对象编程的核心机制之一,其本质是 在已有类型基础之上进行扩充或改造,得到新的数据类型,以满 足新的需要。 根据需要定义 Java 类描述“人”和“学生”信息: CODE ± Class Person 一个类的方法中使用到另一个类的对象(uses-a)1。 聚合关系 一个类的对象包含(通过属性引用)了另一个类的 对象(has-a)2。 泛化关系 一般化关系(is-a),表示类之间的继承关系、类和 接口之间的实现关系以及接口之间的继承关系。 1车能够装载货物,车的装载功能(load() 方法)对货物(goods)有依赖。 2车有发动机、车轮等,Car 对象是由 Engine 等对象构成的。 大纲 包0 码力 | 39 页 | 614.13 KB | 1 年前3 Java 应用与开发 - 面向对象编程进阶 PART1大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this Java 应用与开发 面向对象编程进阶 PART1 王晓东 wangxiaodong@ouc.edu.cn 中国海洋大学 September 23, 2018 大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this 学习目标 1. 掌握 Java 包、继承、访问控制、方法重写的概念、机制和 使用方法 继承 访问控制 方法重写 关键字 super 关键字 this 大纲 包 继承 访问控制 方法重写 关键字 super 关键字 this 什么是继承? 继承(Inheritance)是面向对象编程的核心机制之一,其本质是 在已有类型基础之上进行扩充或改造,得到新的数据类型,以满 足新的需要。 根据需要定义 Java 类描述“人”和“学生”信息: CODE ± Class Person 一个类的方法中使用到另一个类的对象(uses-a)1。 聚合关系 一个类的对象包含(通过属性引用)了另一个类的 对象(has-a)2。 泛化关系 一般化关系(is-a),表示类之间的继承关系、类和 接口之间的实现关系以及接口之间的继承关系。 1车能够装载货物,车的装载功能(load() 方法)对货物(goods)有依赖。 2车有发动机、车轮等,Car 对象是由 Engine 等对象构成的。 大纲 包0 码力 | 39 页 | 614.13 KB | 1 年前3
 《Java 应用与开发》课程讲义 - 王晓东28 3.6 课后习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4 Java 面向对象编程进阶 A 31 4.1 包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 43 4.5 课后习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5 Java 面向对象编程进阶 B 46 5.1 多态性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5 . . . . . 48 5.1.3 虚方法调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.1.4 对象造型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.1.5 instanceof 运算符 . . .0 码力 | 330 页 | 6.54 MB | 1 年前3 《Java 应用与开发》课程讲义 - 王晓东28 3.6 课后习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4 Java 面向对象编程进阶 A 31 4.1 包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 43 4.5 课后习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5 Java 面向对象编程进阶 B 46 5.1 多态性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5 . . . . . 48 5.1.3 虚方法调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.1.4 对象造型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.1.5 instanceof 运算符 . . .0 码力 | 330 页 | 6.54 MB | 1 年前3
 跟我学Shiro - 张开涛............................................................................................ 35 根对象 SECURITYMANAGER .................................................................................. ............................................................................... 44 第六章 REALM 及相关对象 .................................................................................................. 具有非常简单易于使用的 API,且 API 契约明确;从内部来看的话,其应该有一个可扩展 的架构,即非常容易插入用户自定义实现,因为任何框架都不能满足所有需求。 首先,我们从外部来看 Shiro 吧,即从应用程序角度的来观察如何使用 Shiro 完成工作。如 下图: 可以看到:应用代码直接交互的对象是Subject,也就是说Shiro的对外API核心就是Subject; 其每个 API0 码力 | 219 页 | 4.16 MB | 10 月前3 跟我学Shiro - 张开涛............................................................................................ 35 根对象 SECURITYMANAGER .................................................................................. ............................................................................... 44 第六章 REALM 及相关对象 .................................................................................................. 具有非常简单易于使用的 API,且 API 契约明确;从内部来看的话,其应该有一个可扩展 的架构,即非常容易插入用户自定义实现,因为任何框架都不能满足所有需求。 首先,我们从外部来看 Shiro 吧,即从应用程序角度的来观察如何使用 Shiro 完成工作。如 下图: 可以看到:应用代码直接交互的对象是Subject,也就是说Shiro的对外API核心就是Subject; 其每个 API0 码力 | 219 页 | 4.16 MB | 10 月前3
 Java 应用与开发 - Java GUI 编程事件处理 Applet Swing Swing 典型组件(课后自学) 组件和容器 组件 组件(Component)是图形用户界面的基本组成元素,凡是能够 以图形化方式显示在屏幕上并能够与用户进行交互的对象均为组 件,如菜单、按钮、标签、文本框、滚动条等。 ▶ 组件不能独立地显示出来,必须将组件放在一定的容器中才 可以显示出来。 ▶ JDK 的 java.awt 包中定义了多种 GUI 组件类,如 事件处理 Applet Swing Swing 典型组件(课后自学) 组件和容器 组件 组件(Component)是图形用户界面的基本组成元素,凡是能够 以图形化方式显示在屏幕上并能够与用户进行交互的对象均为组 件,如菜单、按钮、标签、文本框、滚动条等。 ▶ 组件不能独立地显示出来,必须将组件放在一定的容器中才 可以显示出来。 ▶ JDK 的 java.awt 包中定义了多种 GUI 组件类,如 事件处理 Applet Swing Swing 典型组件(课后自学) 组件和容器 组件 组件(Component)是图形用户界面的基本组成元素,凡是能够 以图形化方式显示在屏幕上并能够与用户进行交互的对象均为组 件,如菜单、按钮、标签、文本框、滚动条等。 ▶ 组件不能独立地显示出来,必须将组件放在一定的容器中才 可以显示出来。 ▶ JDK 的 java.awt 包中定义了多种 GUI 组件类,如0 码力 | 73 页 | 876.31 KB | 1 年前3 Java 应用与开发 - Java GUI 编程事件处理 Applet Swing Swing 典型组件(课后自学) 组件和容器 组件 组件(Component)是图形用户界面的基本组成元素,凡是能够 以图形化方式显示在屏幕上并能够与用户进行交互的对象均为组 件,如菜单、按钮、标签、文本框、滚动条等。 ▶ 组件不能独立地显示出来,必须将组件放在一定的容器中才 可以显示出来。 ▶ JDK 的 java.awt 包中定义了多种 GUI 组件类,如 事件处理 Applet Swing Swing 典型组件(课后自学) 组件和容器 组件 组件(Component)是图形用户界面的基本组成元素,凡是能够 以图形化方式显示在屏幕上并能够与用户进行交互的对象均为组 件,如菜单、按钮、标签、文本框、滚动条等。 ▶ 组件不能独立地显示出来,必须将组件放在一定的容器中才 可以显示出来。 ▶ JDK 的 java.awt 包中定义了多种 GUI 组件类,如 事件处理 Applet Swing Swing 典型组件(课后自学) 组件和容器 组件 组件(Component)是图形用户界面的基本组成元素,凡是能够 以图形化方式显示在屏幕上并能够与用户进行交互的对象均为组 件,如菜单、按钮、标签、文本框、滚动条等。 ▶ 组件不能独立地显示出来,必须将组件放在一定的容器中才 可以显示出来。 ▶ JDK 的 java.awt 包中定义了多种 GUI 组件类,如0 码力 | 73 页 | 876.31 KB | 1 年前3
 Apache Shiro 1.2.x Reference Manual 中文翻译默认提供了一个基本的 INI 配置文件的解决方案,人们已经对庞大的 XML 文件 有些厌倦了,而一个 INI 文件易读易用,而且所依赖的组件很少,稍后你就会通过一个简单易 懂的示例明白 INI 在对简单对象进行配置的时候是非常有效率的,比如 SecurityManager 多种配置选择 Apache Shiro 1.2.x Reference Manual 中文翻译 10 2. Tutorial SecurityManager: SecurityManager 是 Shiro 架构的核心,配合内部安全组件共同组成 安全伞。然而,一旦一个程序配置好了SecurityManager 和它的内部对象, SecurityManager通常独自留下来,程序开发人员几乎花费的所有时间都集中在 Subjet Apache Shiro 1.2.x Reference Manual 中文翻译 19 3 建立Subject(Subject creation) 退出登录(Logout) 及其它。 但这些功能都在一个单独的组件中管理,并且,当所有功能集中在一个类中实现是灵活和可 定制是非常困难的。 为了实现配置的简单、灵活、可插拔,Shiro在设计时实现了高模块化--尽管模块化, SecurityManager(包括它的继承类)并没有做到,相反地,SecurityManager实现更像一个0 码力 | 196 页 | 2.34 MB | 1 年前3 Apache Shiro 1.2.x Reference Manual 中文翻译默认提供了一个基本的 INI 配置文件的解决方案,人们已经对庞大的 XML 文件 有些厌倦了,而一个 INI 文件易读易用,而且所依赖的组件很少,稍后你就会通过一个简单易 懂的示例明白 INI 在对简单对象进行配置的时候是非常有效率的,比如 SecurityManager 多种配置选择 Apache Shiro 1.2.x Reference Manual 中文翻译 10 2. Tutorial SecurityManager: SecurityManager 是 Shiro 架构的核心,配合内部安全组件共同组成 安全伞。然而,一旦一个程序配置好了SecurityManager 和它的内部对象, SecurityManager通常独自留下来,程序开发人员几乎花费的所有时间都集中在 Subjet Apache Shiro 1.2.x Reference Manual 中文翻译 19 3 建立Subject(Subject creation) 退出登录(Logout) 及其它。 但这些功能都在一个单独的组件中管理,并且,当所有功能集中在一个类中实现是灵活和可 定制是非常困难的。 为了实现配置的简单、灵活、可插拔,Shiro在设计时实现了高模块化--尽管模块化, SecurityManager(包括它的继承类)并没有做到,相反地,SecurityManager实现更像一个0 码力 | 196 页 | 2.34 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Java 版来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 www.hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手 ‧ 全书采用动画图解,内容清晰易懂、学习曲线平滑,引导初学者探索数据结构与算法的知识地图。 ‧ 源代码可一键运行,帮助读者在练习中提升编程技能,了解算法工作原理和数据结构底层实现。 ‧ 提倡读者互助学习,欢迎大家在评论区提出问题与分享见解,在交流讨论中共同进步。 0.1.1 读者对象 若你是算法初学者,从未接触过算法,或者已经有一些刷题经验,对数据结构与算法有模糊的认识,在会与 不会之 不会之间反复横跳,那么本书正是为你量身定制的! 如果你已经积累一定的刷题量,熟悉大部分题型,那么本书可助你回顾与梳理算法知识体系,仓库源代码可 以当作“刷题工具库”或“算法字典”来使用。 若你是算法“大神”,我们期待收到你的宝贵建议,或者一起参与创作。 前置条件 你需要至少具备任一语言的编程基础,能够阅读和编写简单代码。 0.1.2 内容结构 本书的主要内容如图 0‑1 所示。 ‧ 复杂度0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Java 版来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 www.hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手 ‧ 全书采用动画图解,内容清晰易懂、学习曲线平滑,引导初学者探索数据结构与算法的知识地图。 ‧ 源代码可一键运行,帮助读者在练习中提升编程技能,了解算法工作原理和数据结构底层实现。 ‧ 提倡读者互助学习,欢迎大家在评论区提出问题与分享见解,在交流讨论中共同进步。 0.1.1 读者对象 若你是算法初学者,从未接触过算法,或者已经有一些刷题经验,对数据结构与算法有模糊的认识,在会与 不会之 不会之间反复横跳,那么本书正是为你量身定制的! 如果你已经积累一定的刷题量,熟悉大部分题型,那么本书可助你回顾与梳理算法知识体系,仓库源代码可 以当作“刷题工具库”或“算法字典”来使用。 若你是算法“大神”,我们期待收到你的宝贵建议,或者一起参与创作。 前置条件 你需要至少具备任一语言的编程基础,能够阅读和编写简单代码。 0.1.2 内容结构 本书的主要内容如图 0‑1 所示。 ‧ 复杂度0 码力 | 379 页 | 18.48 MB | 10 月前3
 JAVA 应用与开发 - 控制台应用程序设计�。你所面对的一切 SOC 也好,单板电脑也好,都是高度集成在一 起的冯诺依曼机。 3 41 ���� O 使用打孔卡片作为输入源,使用打印机作为输出设备 一��������一��文 件���可��一�����可� �一�������的数据� 4 41 ���� O BASIC 语言解释器 ��� 70 ����流行�������的 BASIC ������� ������的������文��� 41 ��行参数 ����� ��行参数 ���� Java ��������可�一������������ ������参数���参数��为��行参数��法����� 1 java <������> [<��行参数>]* O 说明 命令行参数将被系统接收并静态初始化为一个一维的 String 数 组对象,然后将之作为实参传给应用程序入口方法 main()。 命令行参数须使用空格符分隔,如果参数中包含空格符则必须 使用双引号括起来。 8 41 ����� ��行参数 ���� Java ��������可�一������������ ������参数���参数��为��行参数��法����� 1 java <������> [<��行参数>]* O 说明 命令行参数将被系统接收并静态初始化为一个一维的 String 数 组对象,然后将之作为实参传给应用程序入口方法 main()。 命令行参数须使用空格符分隔,如果参数中包含空格符则必须0 码力 | 63 页 | 2.84 MB | 1 年前3 JAVA 应用与开发 - 控制台应用程序设计�。你所面对的一切 SOC 也好,单板电脑也好,都是高度集成在一 起的冯诺依曼机。 3 41 ���� O 使用打孔卡片作为输入源,使用打印机作为输出设备 一��������一��文 件���可��一�����可� �一�������的数据� 4 41 ���� O BASIC 语言解释器 ��� 70 ����流行�������的 BASIC ������� ������的������文��� 41 ��行参数 ����� ��行参数 ���� Java ��������可�一������������ ������参数���参数��为��行参数��法����� 1 java <������> [<��行参数>]* O 说明 命令行参数将被系统接收并静态初始化为一个一维的 String 数 组对象,然后将之作为实参传给应用程序入口方法 main()。 命令行参数须使用空格符分隔,如果参数中包含空格符则必须 使用双引号括起来。 8 41 ����� ��行参数 ���� Java ��������可�一������������ ������参数���参数��为��行参数��法����� 1 java <������> [<��行参数>]* O 说明 命令行参数将被系统接收并静态初始化为一个一维的 String 数 组对象,然后将之作为实参传给应用程序入口方法 main()。 命令行参数须使用空格符分隔,如果参数中包含空格符则必须0 码力 | 63 页 | 2.84 MB | 1 年前3
 Hello 算法 1.1.0 Java版来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读!” 鼓励读者在线上章节评论区互帮互助、共同进步,提问与评论通常可在两日内得到回复。 0.1.1 读者对象 若你是算法初学者,从未接触过算法,或者已经有一些刷题经验,对数据结构与算法有模糊的认识,在会与 不会之间反复横跳,那么本书正是为你量身定制的! 如果你已经积累一定的刷题量,熟悉大部分题型,那么本书可助你回顾与梳理算法知识体系,仓库源代码可 以当作“刷题工具库”或“算法字典”来使用。 若你是算法“大神”,我们期待收到你的宝贵建议,或者一起参与创作。 所示的动画图解,请以图为主、以文字为辅,综合两者 来理解内容。 图 0‑2 动画图解示例 0.2.3 在代码实践中加深理解 本书的配套代码托管在 GitHub 仓库。如图 0‑3 所示,源代码附有测试样例,可一键运行。 如果时间允许,建议你参照代码自行敲一遍。如果学习时间有限,请至少通读并运行所有代码。 与阅读代码相比,编写代码的过程往往能带来更多收获。动手学,才是真的学。 第 0 章 前言 hello‑algo0 码力 | 378 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 Java版来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读!” 鼓励读者在线上章节评论区互帮互助、共同进步,提问与评论通常可在两日内得到回复。 0.1.1 读者对象 若你是算法初学者,从未接触过算法,或者已经有一些刷题经验,对数据结构与算法有模糊的认识,在会与 不会之间反复横跳,那么本书正是为你量身定制的! 如果你已经积累一定的刷题量,熟悉大部分题型,那么本书可助你回顾与梳理算法知识体系,仓库源代码可 以当作“刷题工具库”或“算法字典”来使用。 若你是算法“大神”,我们期待收到你的宝贵建议,或者一起参与创作。 所示的动画图解,请以图为主、以文字为辅,综合两者 来理解内容。 图 0‑2 动画图解示例 0.2.3 在代码实践中加深理解 本书的配套代码托管在 GitHub 仓库。如图 0‑3 所示,源代码附有测试样例,可一键运行。 如果时间允许,建议你参照代码自行敲一遍。如果学习时间有限,请至少通读并运行所有代码。 与阅读代码相比,编写代码的过程往往能带来更多收获。动手学,才是真的学。 第 0 章 前言 hello‑algo0 码力 | 378 页 | 18.47 MB | 1 年前3
共 45 条
- 1
- 2
- 3
- 4
- 5













