SunLtd / LearnJava

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

从零开始学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开发的,比如:

  1. 著名的12306
  2. 电子商务网站——阿里、淘宝、天猫 、京东.....
  3. 绝大多数电信行业的各种系统,**移动、**联通、**电信......
  4. 各个银行系统、金融系统、交易系统.....
  5. 互联网项目
  6. 证券行业系统
  7. 游戏后端服务器应用
  8. .......

Java广泛应用在金融、保险、电商、物流、通讯、交通、互联网等各个行业中!可以说,不管是哪个行业,哪个公司,只要他们的项目有后端,90%以上都是Java!所以,这么牛逼的编程语言,是不是足以坚定你学习下去的信心了? 更重要的是,Java并不是抱残守缺一成不变,现在Oracle公司对Java每隔半年就进行一次大的版本更新。即使是这么优秀的编程语言都还在不断地进行自我更新,你还有什么理由不更新自己的知识储备呢?放眼当今各种编程语言,唯有Java,可以同时满足如下条件:

拥有雄厚的历史沉淀,海量的项目检验,不断的更新迭代,完整的生态支撑,最广泛的就业机会。

我们学习编程技术,其实更多的还是从就业的角度来考虑!对小白来说,我们不要去追最新最火的技术。那些技术能活几年都不一定,3年后让你失业难受不难受?比如一度非常火爆的iOS,你现在去招聘网站上搜一下iOS的招聘需求,看看还有多少。我们也不要玩一成不变的老古董,比如C语言,虽然很多地方都在用,但薪资待遇对小白来说并不友好。 但是Java既有深厚的技术沉淀,又在不断地更新以适应市场需求,并且拥有完整的生态链条,你完全不用担心学习Java后会失业。所以从就业的角度来看,学习Java作为自己的第一编程语言无疑是最好的选择!而且熟悉Java之后,就好比先学会了易筋经、九阴九阳等高深内功,再去学习其他编程语言就很轻松了。 所以作为一个过来人,壹哥强烈建议新手小白选择Java来作为自己的编程“母语”!

Day01~43 - Java语言基础

Day01 - 初识Java

  • IT行业分析 / 什么是编程 / 为什么选择学Java
  • Java简介 - Java起源 / Java发展史 / Java版本选择
  • Java运行机制 - 编程语言分类 / Java运行机制 / 跨平台原理
  • 搭建编程环境 - 下载、安装JDK / 配置环境变量
  • dos命令行 - dos命令 / 常用命令

Day02 - HelloWorld

  • HelloWorld - 编写程序 / 编译程序 / 执行程序 / 常见错误处理
  • Java标识符 - 命名规则 / 命名规范
  • 关键字和保留字 - 关键字 / 保留字
  • 编码规范 - 代码缩进
  • Java注释 - 单行注释 / 多行注释 / 文档注释

Day03 - 开发工具安装配置

  • 记事本 - notepad的安装配置 / sublime3
  • eclipse - 下载安装 / 常用配置 / 创建项目
  • intellij idea - 下载安装 / 常用配置 / 常用快捷键 / 创建项目

Day04 - 变量与数据类型

  • Java变量 - 概念 / 分类 / 定义语法 / 实现步骤 / 重新赋值 / 变量间赋值 / 原理分析
  • 数据类型 - 分类 / 存储单位 / 基本类型 / void / 包装类 / 转义字符 / 引用类型
  • 类型转换 - 基本原则 / 自动类型转换 / 强制类型转换 / 隐含强制类型转换 / 其他类型转换

Day05 - 运算符、进制转换、输入输出

  • 运算符:分类 / 算数运算符 / 赋值运算符 / 关系运算符 / 逻辑运算符 / 位运算符 / 条件运算符 / 类型比较运算符
  • 进制转换:进制简介 / 二进制 / 八进制 / 十六进制 / 负数的进制转换 / 小数的进制转换
  • 输入和输出:输出语句 / 输入语句

Day06 - 流程控制、条件分支、if、switch

  • 流畅控制:分类 / 顺序结构 / 分支结构 / 循环结构
  • 条件分支:if单分支 / 多分支 / if...else / if嵌套
  • switch语句:switch规则 / case穿透 / switch新特性:->符号与返回结果

Day07 - 局部变量、循环结构

  • 变量细谈:局部变量 / 成员变量 / 权限修饰符
  • for循环:基本语法 / 案例 / 循环嵌套 / 变形写法
  • while循环:基本特性
  • do-while循环:基本特性
  • 几个关键字:break / continue / return / 区别
  • foreach循环:概念 / 基本特性 / 缺陷

Day08 - 一维数组、二维数组

  • 一维数组:概念 / 特性 / 动态初始化 / 静态初始化 / 遍历与取值
  • 数组扩容:简介 / 扩容与缩容 / 代码实现
  • 数组拷贝:实现方式 / 代码实现
  • 数组排序:实现方式 / 冒泡排序 / 优化方案 / 选择排序 / Arrays.sort
  • 二分查找法:代码实现
  • 二维与多维数组:概念 / 初始化方式 / 内存分析

Day09 - 面向对象

  • 面向过程:概念 / 特点
  • 面向对象:概念 / 特点
  • 类:简介 / 类的组成 / 创建步骤 / 关键字 / 命名规则与规范 / 类的属性
  • 对象:简介 / 创建方式 / 显式创建 / 隐式创建 / 对象使用 / 内存分析

Day10 - 方法的定义

  • 方法定义:简介 / 基本语法 / 命名规则 / 方法调用 / 方法返回值
  • 方法参数:形参 / 实参 / 可变参数 / 命令行参数
  • 递归:简介 / 递归的实现

Day11 - 构造方法与析构方法

  • 构造方法:简介 / 特性 / 基本使用 / 调用 / 构造方法私有化
  • 析构方法:特性 / 基本使用

Day12 - 方法重载、this关键字、封装

  • 方法重载:简介 / 普通方法重载 / 构造方法重载
  • this关键字:作用 / 基本使用
  • 封装:概念 / 代码实现 / 作用

Day13 - 继承与方法重新

  • 类的继承:简介 / 特性 / 代码实现 / 无法继承的情况 / sealed+permits阻止继承
  • 方法重写:作用 / 代码实现 / 变量隐藏 / 方法隐藏 / 重载与重写的区别

Day14 - 类型转换、instanceof、多态

  • 类型转换:向上转型 / 向下转型
  • instanceof:作用 / 代码实现
  • 多态:特性 / 作用 / 分类 / 代码实现 / 扩展

Day15 - abstract修饰符

  • abstract修饰符:作用 / 注意事项
  • 抽象类:特性 / 代码案例
  • 抽象方法:特性 / 代码案例

Day16 - static修饰符

  • static修饰符:作用 / 注意事项
  • 静态属性与静态常量:概念 / 特性 / 案例
  • 静态方法:概念 / 基本语法 / 代码案例
  • 静态代码块:特性 / 代码案例
  • 静态内部类:特性 / 代码案例
  • 静态导入:部分导入 / 全部导入

Day17 - final修饰符

  • final修饰符:简介 / 特性
  • 常量:概念 / 特性 / 代码案例
  • 常量方法:概念 / 基本语法 / 代码案例
  • 常量类:概念 / 语法 / 代码案例

Day18 - 接口与内部类

  • 接口:简介 / 特性 / 接口与类的区别 / 接口定义 / 标记接口 / 接口新特性
  • 内部类:概念 / 特性 / 成员内部类 / 局部内部类 / 匿名内部类 / 静态内部类

Day19 - Object与包装类

  • Object类:简介 / 常用方法 / clone() / hashCode / equals / toString()等
  • 包装类:概念 / 分类 / 常用包装类
  • 装箱与拆箱:概念 / 实现案例
  • Integer原理:int与Integer的区别 / Integer源码解析 / Integer特性

Day20 - 字符串、编码格式与正则表达式

  • String字符串:简介 / 定义方式 / 常用方法:比较、判空、拼接、转换、格式化等
  • 字符串编码:简介 / 常用编码:ASCII、GB2312、Big5、Unicode、UTF-8、GBK / 编码设置
  • 正则表达式:简介 / 基本语法 / 常用API / 验证电话号码 / 验证身份证号

Day21 - 字符串原理、StringBuilder与StringBuffer

  • 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转换

Day24 - Java常用类

  • System类:简介 / 静态变量 / 静态方法 / 时间起点 / 时间戳
  • Random类:简介 / 常用API / 基本用法
  • SecureRandom类:简介 / 基本使用

Day25 - List与Set集合

  • 集合:简介 / 基本特性 / 核心接口 / 常用实现类 / Collection接口 / Iterator迭代器
  • List集合:简介 / 类关系 / 创建方式 / 遍历方式 / ArrayList集合 / LinkedList集合
  • Set集合:简介 / 基本特性 / 常用方法 / HashSet集合 / TreeSet集合

Day26 - Map与Properties集合

  • Map集合:简介 / 实现方式 / 常用方法 / 常用实现类 / HashMap集合 / Hashtable集合 / ConcurrentHashMap集合
  • Collection:简介 / 核心方法
  • Collections:简介 / 常用方法:排序、查找、替换、同步
  • Properties类:简介 / 配置文件 / 常用方法 / 读取步骤 / 读写Properties配置文件 / 读写XML配置文件

Day27 - 泛型

  • 泛型:简介 / 特性 / 使用场景
  • 泛型集合:简介 / 基本语法 / 代码案例
  • 泛型接口:简介 / 代码案例
  • 泛型类:简介 / 代码案例
  • 继承泛型类与实现泛型接口:简介 / 代码案例
  • 泛型方法:简介 / 代码实现
  • 通配符:简介 / 通配符形式 / 未限定通配符?/ PECS原则 / 上限通配符 / 下限通配符
  • 泛型擦除:简介 / 泛型擦除的限制

Day28 - 排序算法、查找算法

  • 排序算法:简介 / 冒泡排序 / 选择排序
  • 插入排序:简介 / 直接插入 / 快速排序 / 希尔排序
  • 查找算法:简介 / 二分查找法 / 线性查找法 / 插值查找法 / 斐波那契查找法

Day29 - 线性结构、树结构

  • 线性结构:简介 / 链表概念 / 链表分类 / 存储原理 / 链表操作
  • 双向链表:概念 / 查找元素 / 更新元素 / 插入元素 / 删除元素 / 其他操作
  • 栈、队列、串:概念 / 特点 / 代码实现
  • 树:概念 / 术语 / 分类
  • 二叉树:概念 / 性质 / 二叉树的存储 / 遍历操作 / 编码实现 / 查找实现

Day30 - 异常处理机制01

  • 异常处理机制:简介 / 异常类型 / 捕获异常 / 处理异常 / 自定义异常 / 最佳实践 / 常见问题
  • 异常的捕获处理:概述 / try-catch / 多重catch结构 / try-catch-finally
  • 异常的抛出声明:概述 / throw抛出异常 / throws声明异常

Day31 - 异常处理机制02

  • 异常处理新特性:简介 / 多异常捕获 / 自动资源管理
  • 自定义异常:简介 / 基本语法 / 最佳实践
  • 空指针异常:简介 / 产生原因 / 典型情况 / 解决办法

Day32 - IO流API及文件操作

  • IO流概念:概念 / 作用 / 分类 / 输入流与输出流 / 字节流与字符流 / 节点流与处理流
  • IO流API:API分类 / 核心API介绍
  • File文件类:概述 / 方法与属性 / 文件的创建 / 其他操作 / Path路径操作

Day33 - 字节流与字符流、编码问题

  • InputStream字节输入流:简介 / 常用子类 / 常用方法 / 代码实现
  • OutputStream字节输出流:简介 / 常用子类 / 常用方法 / 代码实现
  • 字节缓冲流:简介 / 常用子类 / 基本用法
  • Reader字符输入流:简介 / 常用子类 / 常用方法 / 代码实现
  • Writer字符输出流:简介 / 常用子类 / 常用方法 / 代码实现
  • 字符缓冲流:简介 / 常用子类 / 基本用法
  • 编码问题:简介 / 常用编码 / 中文乱码问题 / 转换流设置编码

Day34 - BIO、NIO、AIO

  • BIO阻塞式IO:简介 / 缺陷 / 使用场景 / 基本概念 / 代码案例
  • NIO非阻塞式IO:简介 / 基本概念 / 开发步骤 / 读取数据 / 写入数据
  • AIO移步非阻塞IO:简介 / 工作原理 / 异步通道 / 工作流程 / 代码实现

Day35 - 线程及创建方式

  • 线程:概念 / 多线程概念 / 进程 /
  • 创建方式:创建方式 / 继承Thread类 / 实现Runnable接口 / Lambda表达式 / 实现Callable接口 / 使用Executor框架
  • 核心API:核心API / 常用方法

Day36 - 线程池及线程状态

  • 线程池:概念 / 核心API / 实现案例
  • 线程状态:简介 / 状态切换 / 代码实现 / 阻塞状态 / 等待状态

Day37 - 线程安全、线程通信、线程同步

  • 多线程:概念 / 使用场景 / 创建方式
  • 线程安全:存在的问题 / 解决办法
  • 线程通信:概念 / 通信方式 / 等待与唤醒 / 代码实现
  • 线程同步:概念 / 同步方式 /
  • 互斥锁: 概念 / 实现方式
  • synchronized:简介 / 基本语法 / 代码实现 / 优化技巧 / 实现原理

Day38 - volalile及线程死锁解决

  • 线程安全:概念 / 实现方式
  • volalile:简介 / 基本语法 / 代码实现 / 可见性 / 禁止指令重排 / 屏障指令
  • 线程死锁:概念 / 代码案例 / 产生条件 / 解决办法 / 案例优化

Day39 - 网络编程

  • 网络编程:简介 / 技术分类 / Socket编程 / URL编程 / HTTP编程 / RMI编程 / JDBC编程
  • Socket编程:简介 / 通信流程 / 核心API / 单向通信 / 双向通信 / 注意事项
  • URL与HTTP编程:简介 / URL类 / URLConnection类 / HttpURLConnection类 / HttpClient类

Day40 - 枚举与注解

  • 枚举:概念 / 特点 / 使用场景 / 基本使用 / Enum类 / 枚举扩展类
  • 注解:概念 / 使用场景 / 注解类型 / 基本使用 / 自定义注解

Day41 - 反射

  • 反射:概念 / 使用场景 / 注意事项 / 获取字节码 / 常用操作
  • 高级用法:反射操作注解 / ORM框架简介 / 手写ORM框架

Day42 - XML与JSON解析

  • XML文档:XML简介 / 使用场景 / 文档构成 / 文档规范
  • XML解析:概念 / 解析方式 / DOM解析 / PULL解析
  • JSON简介:概念 / 优缺点 / 使用场景 / JSON语法
  • JSON解析:概述 / 解析原理 / Jackson解析 / 序列化 / 反序列化

Day43 - 单元测试

  • 测试:简介 / 分类 / 测试工具
  • 单元测试:概念 / 常用框架
  • JUnit框架:简介 / 特点 / 使用场景 / 常用注解 / 测试用例 / 异常处理 / 处理条件

About

License:Apache License 2.0


Languages

Language:Java 100.0%