从零开始学Java
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦
千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者
配套开源项目资料
Github地址: https://github.com/SunLtd/LearnJava
Gitee地址: https://gitee.com/sunyiyi/LearnJava
有非常多的小伙伴想学习Java,而Java的学习资料特别多,比如B站上就有大量的免费视频,尤其是基础阶段的Java视频更多。此外,CSDN、掘金等博客网站上也有很多高质量的Java文章教程供我们学习。但这些网站上的教程,很多都没有配套的案例和对应的学习进度规划。 所以壹哥就想在Github和Gitee中创建一个开源项目,通过这个项目带大家从零开始学Java。在这个项目中,我会按天给大家规划学习进度,并把学习资料(代码、文档等)放到对应的日期文件夹中,这样你只需要按照我的这个日期往下看,就可以有计划地学会Java了。 总之,我的目标是和大家一起,共同打造一个优质的Java交流社区,为想学习Java的初学者扫平入门过程中的重重障碍。同时也想为新入行的开发者提供一个问道的途径,帮助大家迅速成为优秀的Java程序员。另外我也希望有经验的程序员,可以利用这个平台把自己的工作经验无偿地分享或有偿提供出来,让大家都能够得到职业技能及综合素质的全面提升。
Java简介
Java从1995年正式发布以来,面世将近30年来,与各种语言PK几乎都是稳居前三,最近15年间更是霸榜各编程语言排行榜龙头。经过这么多年的实践考验,具有行业内人尽皆知的优势:最成熟、企业开发首选、开发者最多、世界排名第一、始终蝉联TIOBE编程语言排行榜前三列。 而且Java应用遍布全球各个行业、各个领域,你所知道的90%的软件都是Java开发的,比如:
- 著名的12306
- 电子商务网站——阿里、淘宝、天猫 、京东.....
- 绝大多数电信行业的各种系统,**移动、**联通、**电信......
- 各个银行系统、金融系统、交易系统.....
- 互联网项目
- 证券行业系统
- 游戏后端服务器应用
- .......
Java广泛应用在金融、保险、电商、物流、通讯、交通、互联网等各个行业中!可以说,不管是哪个行业,哪个公司,只要他们的项目有后端,90%以上都是Java!所以,这么牛逼的编程语言,是不是足以坚定你学习下去的信心了? 更重要的是,Java并不是抱残守缺一成不变,现在Oracle公司对Java每隔半年就进行一次大的版本更新。即使是这么优秀的编程语言都还在不断地进行自我更新,你还有什么理由不更新自己的知识储备呢?放眼当今各种编程语言,唯有Java,可以同时满足如下条件:
拥有雄厚的历史沉淀,海量的项目检验,不断的更新迭代,完整的生态支撑,最广泛的就业机会。
我们学习编程技术,其实更多的还是从就业的角度来考虑!对小白来说,我们不要去追最新最火的技术。那些技术能活几年都不一定,3年后让你失业难受不难受?比如一度非常火爆的iOS,你现在去招聘网站上搜一下iOS的招聘需求,看看还有多少。我们也不要玩一成不变的老古董,比如C语言,虽然很多地方都在用,但薪资待遇对小白来说并不友好。 但是Java既有深厚的技术沉淀,又在不断地更新以适应市场需求,并且拥有完整的生态链条,你完全不用担心学习Java后会失业。所以从就业的角度来看,学习Java作为自己的第一编程语言无疑是最好的选择!而且熟悉Java之后,就好比先学会了易筋经、九阴九阳等高深内功,再去学习其他编程语言就很轻松了。 所以作为一个过来人,壹哥强烈建议新手小白选择Java来作为自己的编程“母语”!
Day01~43 - Java语言基础
初识Java
Day01 -- IT行业分析 / 什么是编程 / 为什么选择学Java
- Java简介 - Java起源 / Java发展史 / Java版本选择
- Java运行机制 - 编程语言分类 / Java运行机制 / 跨平台原理
- 搭建编程环境 - 下载、安装JDK / 配置环境变量
- dos命令行 - dos命令 / 常用命令
HelloWorld
Day02 -- HelloWorld - 编写程序 / 编译程序 / 执行程序 / 常见错误处理
- Java标识符 - 命名规则 / 命名规范
- 关键字和保留字 - 关键字 / 保留字
- 编码规范 - 代码缩进
- Java注释 - 单行注释 / 多行注释 / 文档注释
开发工具安装配置
Day03 -- 记事本 - notepad的安装配置 / sublime3
- eclipse - 下载安装 / 常用配置 / 创建项目
- intellij idea - 下载安装 / 常用配置 / 常用快捷键 / 创建项目
变量与数据类型
Day04 -- Java变量 - 概念 / 分类 / 定义语法 / 实现步骤 / 重新赋值 / 变量间赋值 / 原理分析
- 数据类型 - 分类 / 存储单位 / 基本类型 / void / 包装类 / 转义字符 / 引用类型
- 类型转换 - 基本原则 / 自动类型转换 / 强制类型转换 / 隐含强制类型转换 / 其他类型转换
运算符、进制转换、输入输出
Day05 -- 运算符:分类 / 算数运算符 / 赋值运算符 / 关系运算符 / 逻辑运算符 / 位运算符 / 条件运算符 / 类型比较运算符
- 进制转换:进制简介 / 二进制 / 八进制 / 十六进制 / 负数的进制转换 / 小数的进制转换
- 输入和输出:输出语句 / 输入语句
流程控制、条件分支、if、switch
Day06 -- 流畅控制:分类 / 顺序结构 / 分支结构 / 循环结构
- 条件分支:if单分支 / 多分支 / if...else / if嵌套
- switch语句:switch规则 / case穿透 / switch新特性:->符号与返回结果
局部变量、循环结构
Day07 -- 变量细谈:局部变量 / 成员变量 / 权限修饰符
- for循环:基本语法 / 案例 / 循环嵌套 / 变形写法
- while循环:基本特性
- do-while循环:基本特性
- 几个关键字:break / continue / return / 区别
- foreach循环:概念 / 基本特性 / 缺陷
一维数组、二维数组
Day08 -- 一维数组:概念 / 特性 / 动态初始化 / 静态初始化 / 遍历与取值
- 数组扩容:简介 / 扩容与缩容 / 代码实现
- 数组拷贝:实现方式 / 代码实现
- 数组排序:实现方式 / 冒泡排序 / 优化方案 / 选择排序 / Arrays.sort
- 二分查找法:代码实现
- 二维与多维数组:概念 / 初始化方式 / 内存分析
面向对象
Day09 -- 面向过程:概念 / 特点
- 面向对象:概念 / 特点
- 类:简介 / 类的组成 / 创建步骤 / 关键字 / 命名规则与规范 / 类的属性
- 对象:简介 / 创建方式 / 显式创建 / 隐式创建 / 对象使用 / 内存分析
方法的定义
Day10 -- 方法定义:简介 / 基本语法 / 命名规则 / 方法调用 / 方法返回值
- 方法参数:形参 / 实参 / 可变参数 / 命令行参数
- 递归:简介 / 递归的实现
构造方法与析构方法
Day11 -- 构造方法:简介 / 特性 / 基本使用 / 调用 / 构造方法私有化
- 析构方法:特性 / 基本使用
方法重载、this关键字、封装
Day12 -- 方法重载:简介 / 普通方法重载 / 构造方法重载
- this关键字:作用 / 基本使用
- 封装:概念 / 代码实现 / 作用
继承与方法重新
Day13 -- 类的继承:简介 / 特性 / 代码实现 / 无法继承的情况 / sealed+permits阻止继承
- 方法重写:作用 / 代码实现 / 变量隐藏 / 方法隐藏 / 重载与重写的区别
类型转换、instanceof、多态
Day14 -- 类型转换:向上转型 / 向下转型
- instanceof:作用 / 代码实现
- 多态:特性 / 作用 / 分类 / 代码实现 / 扩展
abstract修饰符
Day15 -- abstract修饰符:作用 / 注意事项
- 抽象类:特性 / 代码案例
- 抽象方法:特性 / 代码案例
static修饰符
Day16 -- static修饰符:作用 / 注意事项
- 静态属性与静态常量:概念 / 特性 / 案例
- 静态方法:概念 / 基本语法 / 代码案例
- 静态代码块:特性 / 代码案例
- 静态内部类:特性 / 代码案例
- 静态导入:部分导入 / 全部导入
final修饰符
Day17 -- final修饰符:简介 / 特性
- 常量:概念 / 特性 / 代码案例
- 常量方法:概念 / 基本语法 / 代码案例
- 常量类:概念 / 语法 / 代码案例
接口与内部类
Day18 -- 接口:简介 / 特性 / 接口与类的区别 / 接口定义 / 标记接口 / 接口新特性
- 内部类:概念 / 特性 / 成员内部类 / 局部内部类 / 匿名内部类 / 静态内部类
Object与包装类
Day19 -- Object类:简介 / 常用方法 / clone() / hashCode / equals / toString()等
- 包装类:概念 / 分类 / 常用包装类
- 装箱与拆箱:概念 / 实现案例
- Integer原理:int与Integer的区别 / Integer源码解析 / Integer特性
字符串、编码格式与正则表达式
Day20 -- String字符串:简介 / 定义方式 / 常用方法:比较、判空、拼接、转换、格式化等
- 字符串编码:简介 / 常用编码:ASCII、GB2312、Big5、Unicode、UTF-8、GBK / 编码设置
- 正则表达式:简介 / 基本语法 / 常用API / 验证电话号码 / 验证身份证号
字符串原理、StringBuilder与StringBuffer
Day21 -- String原理:final特点 / String源码解读 / String不可变性 / 如何改变String内容
- 字符串常量池:概念 / 代码案例 / 字符串内存分配 / intern()方法
- StringBuilder:简介 / 基本特性 / 基本用法 /
- StringBuffer:简介 / 基本特性 / 基本用法
- 扩容机制:继承关系 / AbstractStringBuilder类 / 容量设置 / 扩容过程 /
常用数字类
Day22 -- Number类:简介 / 数字格式化
- Math数学类:简介 / 静态常量 / 最大值、最小值、平均值 / 求整运算 / 三角函数 / 指数运算 / 生成随机数
- BigInteger类:简介 / 常用方法
- BigDecimal类:简介 / 常用方法 / 数值比较
时间类及其新特性
Day23 -- 时间核心概念:本地时间 / 时区 / 本地化 / 夏令时 / 时间起点 / 时间戳
- Date类:简介 / 构造方法 / 常用API / 基本使用
- Calendar日历类:简介 / 静态常量 / 常用方法 / 获取当前时间
- GregorianCalendar类:简介 / 基本用法
- 时间格式化:时间模式 / printf()格式化 / DateFormat类 / SimpleDateFormat类
- 日期时间新特性:LocalDateTime / ZonedDateTime / DateTimeFormatter / Instant / 新旧时间API转换
Java常用类
Day24 -- System类:简介 / 静态变量 / 静态方法 / 时间起点 / 时间戳
- Random类:简介 / 常用API / 基本用法
- SecureRandom类:简介 / 基本使用
List与Set集合
Day25 -- 集合:简介 / 基本特性 / 核心接口 / 常用实现类 / Collection接口 / Iterator迭代器
- List集合:简介 / 类关系 / 创建方式 / 遍历方式 / ArrayList集合 / LinkedList集合
- Set集合:简介 / 基本特性 / 常用方法 / HashSet集合 / TreeSet集合
Map与Properties集合
Day26 -- Map集合:简介 / 实现方式 / 常用方法 / 常用实现类 / HashMap集合 / Hashtable集合 / ConcurrentHashMap集合
- Collection:简介 / 核心方法
- Collections:简介 / 常用方法:排序、查找、替换、同步
- Properties类:简介 / 配置文件 / 常用方法 / 读取步骤 / 读写Properties配置文件 / 读写XML配置文件
泛型
Day27 -- 泛型:简介 / 特性 / 使用场景
- 泛型集合:简介 / 基本语法 / 代码案例
- 泛型接口:简介 / 代码案例
- 泛型类:简介 / 代码案例
- 继承泛型类与实现泛型接口:简介 / 代码案例
- 泛型方法:简介 / 代码实现
- 通配符:简介 / 通配符形式 / 未限定通配符?/ PECS原则 / 上限通配符 / 下限通配符
- 泛型擦除:简介 / 泛型擦除的限制
排序算法、查找算法
Day28 -- 排序算法:简介 / 冒泡排序 / 选择排序
- 插入排序:简介 / 直接插入 / 快速排序 / 希尔排序
- 查找算法:简介 / 二分查找法 / 线性查找法 / 插值查找法 / 斐波那契查找法
线性结构、树结构
Day29 -- 线性结构:简介 / 链表概念 / 链表分类 / 存储原理 / 链表操作
- 双向链表:概念 / 查找元素 / 更新元素 / 插入元素 / 删除元素 / 其他操作
- 栈、队列、串:概念 / 特点 / 代码实现
- 树:概念 / 术语 / 分类
- 二叉树:概念 / 性质 / 二叉树的存储 / 遍历操作 / 编码实现 / 查找实现
异常处理机制01
Day30 -- 异常处理机制:简介 / 异常类型 / 捕获异常 / 处理异常 / 自定义异常 / 最佳实践 / 常见问题
- 异常的捕获处理:概述 / try-catch / 多重catch结构 / try-catch-finally
- 异常的抛出声明:概述 / throw抛出异常 / throws声明异常
异常处理机制02
Day31 -- 异常处理新特性:简介 / 多异常捕获 / 自动资源管理
- 自定义异常:简介 / 基本语法 / 最佳实践
- 空指针异常:简介 / 产生原因 / 典型情况 / 解决办法
IO流API及文件操作
Day32 -- IO流概念:概念 / 作用 / 分类 / 输入流与输出流 / 字节流与字符流 / 节点流与处理流
- IO流API:API分类 / 核心API介绍
- File文件类:概述 / 方法与属性 / 文件的创建 / 其他操作 / Path路径操作
字节流与字符流、编码问题
Day33 -- InputStream字节输入流:简介 / 常用子类 / 常用方法 / 代码实现
- OutputStream字节输出流:简介 / 常用子类 / 常用方法 / 代码实现
- 字节缓冲流:简介 / 常用子类 / 基本用法
- Reader字符输入流:简介 / 常用子类 / 常用方法 / 代码实现
- Writer字符输出流:简介 / 常用子类 / 常用方法 / 代码实现
- 字符缓冲流:简介 / 常用子类 / 基本用法
- 编码问题:简介 / 常用编码 / 中文乱码问题 / 转换流设置编码
BIO、NIO、AIO
Day34 -- BIO阻塞式IO:简介 / 缺陷 / 使用场景 / 基本概念 / 代码案例
- NIO非阻塞式IO:简介 / 基本概念 / 开发步骤 / 读取数据 / 写入数据
- AIO移步非阻塞IO:简介 / 工作原理 / 异步通道 / 工作流程 / 代码实现
线程及创建方式
Day35 -- 线程:概念 / 多线程概念 / 进程 /
- 创建方式:创建方式 / 继承Thread类 / 实现Runnable接口 / Lambda表达式 / 实现Callable接口 / 使用Executor框架
- 核心API:核心API / 常用方法
线程池及线程状态
Day36 -- 线程池:概念 / 核心API / 实现案例
- 线程状态:简介 / 状态切换 / 代码实现 / 阻塞状态 / 等待状态
线程安全、线程通信、线程同步
Day37 -- 多线程:概念 / 使用场景 / 创建方式
- 线程安全:存在的问题 / 解决办法
- 线程通信:概念 / 通信方式 / 等待与唤醒 / 代码实现
- 线程同步:概念 / 同步方式 /
- 互斥锁: 概念 / 实现方式
- synchronized:简介 / 基本语法 / 代码实现 / 优化技巧 / 实现原理
volalile及线程死锁解决
Day38 -- 线程安全:概念 / 实现方式
- volalile:简介 / 基本语法 / 代码实现 / 可见性 / 禁止指令重排 / 屏障指令
- 线程死锁:概念 / 代码案例 / 产生条件 / 解决办法 / 案例优化
网络编程
Day39 -- 网络编程:简介 / 技术分类 / Socket编程 / URL编程 / HTTP编程 / RMI编程 / JDBC编程
- Socket编程:简介 / 通信流程 / 核心API / 单向通信 / 双向通信 / 注意事项
- URL与HTTP编程:简介 / URL类 / URLConnection类 / HttpURLConnection类 / HttpClient类
枚举与注解
Day40 -- 枚举:概念 / 特点 / 使用场景 / 基本使用 / Enum类 / 枚举扩展类
- 注解:概念 / 使用场景 / 注解类型 / 基本使用 / 自定义注解
反射
Day41 -- 反射:概念 / 使用场景 / 注意事项 / 获取字节码 / 常用操作
- 高级用法:反射操作注解 / ORM框架简介 / 手写ORM框架
XML与JSON解析
Day42 -- XML文档:XML简介 / 使用场景 / 文档构成 / 文档规范
- XML解析:概念 / 解析方式 / DOM解析 / PULL解析
- JSON简介:概念 / 优缺点 / 使用场景 / JSON语法
- JSON解析:概述 / 解析原理 / Jackson解析 / 序列化 / 反序列化
单元测试
Day43 -- 测试:简介 / 分类 / 测试工具
- 单元测试:概念 / 常用框架
- JUnit框架:简介 / 特点 / 使用场景 / 常用注解 / 测试用例 / 异常处理 / 处理条件