如果你已经能写出 Hello World、会用 if 和 for、知道类和方法大概长什么样,但一遇到「接口和抽象类到底用哪个」「ArrayList 和 HashMap 什么时候选谁」「线程安全是什么东西」就开始含糊,那这套第二阶段就是给你补这一层的。它不负责带你认识 Java,它负责把你从「能跑通」推到「能说清楚为什么这么写」。

先说清楚:这个阶段补的是哪几个洞

第一阶段的产物通常是:能照着敲出一个小程序,语法认得,但知识是散的。第二阶段的靶心是把散点连成结构,具体落在四块缺口上。

  • 面向对象只停在「会写类」。封装、继承、多态能背出定义,但真让你设计一个继承体系,或者判断该抽接口还是抽抽象类,就卡壳。这里会把这三大特性放到真实代码结构里过一遍,而不是各讲一个例子了事。
  • 类型系统用得太糙。枚举、抽象类、接口、Lambda 这几样,很多自学者是「见过但没用过」。它们恰恰是后面读框架源码的门槛,早一点弄熟,比后面硬啃省力。
  • 数据一多就不会存。集合是这一阶段分量最重的部分。List、Set、Map 各自的取舍,遍历时能不能改,为什么有的能存重复有的不能,这些不弄清楚,写业务代码会一直靠试。
  • 并发和反射完全是黑箱。多线程和反射在入门阶段常被跳过,但它们是后面理解框架、看懂报错、面试被追问的高频区。这一阶段先把概念和基本用法立住。

学完之后,你应该能回答这些问题

判断自己有没有真的学进去,不看笔记厚度,看能不能接住下面这些提问。如果你现在答不上,学完再回来对一遍:

  • 两个类有共同的字段和行为,什么情况下抽抽象类,什么情况下抽接口,两个都用行不行?
  • 枚举除了当常量用,还能不能带字段和方法?它和一组 static final 常量的差别在哪?
  • 同样存一批数据,ArrayList 和 LinkedList 在频繁插入删除时的表现为什么不同?HashSet 凭什么去重?
  • HashMap 的 key 为什么通常用 String 或不可变对象?遍历 Map 时直接删元素会出什么事?
  • 开两个线程同时改一个计数器,结果为什么会少?加锁加在哪里才算对?
  • 反射拿到的 Class 对象是什么?为什么框架都爱用它?

能用自己的话把这些问题讲明白,比刷完多少集视频都算数。

怎么用这套课,效率更高

这一阶段的内容密度比第一阶段高不少,尤其是集合和多线程,光看不写基本等于没学。几个建议:

  • 每学一个容器就动手比一次。别只抄示例,自己造一组数据,分别用 List、Set、Map 存一遍,打印结果对比。差异是看出来的,不是记住的。
  • 多线程部分不要只跑一遍就过。把示例里的线程数、循环次数改一改,看结果怎么变,比背「线程不安全」四个字有用得多。
  • 接口和抽象类那节,试着回头改自己第一阶段写过的代码。看哪些地方本来可以抽出来,这比新写一个 demo 更能暴露理解程度。
  • 反射先求会用,不求吃透。这一阶段能把对象创建、方法调用跑通就够了,底层原理留到后面。

适合谁,不适合谁

如果你是完全没碰过 Java 的纯新手,建议先确认自己能不能独立写出带类、带方法调用的小程序,再进这一阶段,不然集合和多线程会听得很吃力。如果你是测试、前端、运维想转后端,或者自学过一阵但知识不成体系,这一阶段的性价比最高——它补的正是「会用但说不清」的那段。

反过来,如果你已经能熟练使用集合、写过带锁的多线程代码、看得懂泛型和 Lambda,那这套内容对你偏基础,可以直接往后走。缺什么补什么,别在已经会的地方耗时间。

Java零基础到就业全体系课程第二阶段(Java基础进阶)

课程详情

课程标题

Java零基础到就业全体系课程第二阶段(Java基础进阶)

适合人群

  • 计算机专业应届毕业生
  • 非IT专业转行/编程爱好者
  • 在自学但需要更加系统化学习的学员
  • 测试/前端/运维工程师转后端方向

你将会学到

  • 掌握Java三大特性的使用
  • 枚举、抽象类、接口、Lambda表达式等用法
  • 集合
  • 多线程
  • 反射等

学习收获

  • 零基础快速入门Java
  • 学习Java基础语法
  • 会写简单Java程序

课程亮点

  • 2023全新录制Java零基础到就业系统课程

课程目录

01 static,单例模式,修饰符
  01 类变量与实例变量的区别与内存分析.mp4
  02 静态成员变量的应用场景.mp4
  03 静态方法与非静态方法的区别与静态方法的应用场景.mp4
  04 static要注意的事项.mp4
  05 构造代码块.mp4
  06 静态代码块与局部代码块.mp4
  07 饿汉单例设计模式.mp4
  08 懒汉单例设计模式.mp4
  09 继承的入门.mp4
  10 权限修饰符.mp4
  11 java的单继承.mp4
02 多态,final,抽象类,接口
  01 复习回顾.mp4
  02 方法的重写.mp4
  03 子类访问父类成员特点.mp4
  04 子类访问构造方法的特点.mp4
  05 多态概念.mp4
  06 多态的好处.mp4
  07 多态的类型转换.mp4
  08 final关键字.mp4
  09 抽象类基本使用.mp4
  10 抽象类的应用场景.mp4
  11 模板设计模式.mp4
  12 接口的基本使用.mp4
  13 接口的应用场景.mp4
  14 接口的新特性.mp4
  15 接口的其他细节.mp4
03 内部类,枚举,泛型,自动封箱
  01 复习回顾.mp4
  02 内部类的介绍.mp4
  03 成员内部类.mp4
  04 静态内部类.mp4
  05 局部内部类.mp4
  06 匿名内部类的基本使用.mp4
  07 匿名内部类的应用场景.mp4
  08 枚举类的基本使用.mp4
  09 枚举值的应用场景.mp4
  10 泛型类.mp4
  11 泛型接口.mp4
  12 泛型方法.mp4
  13 泛型上下限.mp4
  14 泛型的擦除.mp4
  15 toString方法的作用.mp4
  16 equals方法.mp4
  17 自动装箱与自动拆箱.mp4
  18 数字与字符串之间转换.mp4
04 常用API,日期类,lambda
  01 复习回顾.mp4
  02 math数学工具类.mp4
  03 system类.mp4
  04 Bigdecimal运算.mp4
  05 simpleDateformat日期格式化对象.mp4
  06 Calendar日期类.mp4
  07 LocalDateTime日期类.mp4
  08 DateTimeFormat的日期格式化对象.mp4
  09 Arrays的基本使用.mp4
  10 Arrays对对象类型数组排序.mp4
  11 Arrays使用比较器Comparator接口去排序.mp4
  12 lambda表达式基本使用.mp4
  13 lambda表达式省略规则.mp4
05 算法,正则表达式,异常处理
  01 复习回顾.mp4
  02 今日内容介绍.mp4
  03 冒泡排序算法.mp4
  04 选择排序算法.mp4
  05 二分法.mp4
  06 正则表达式体验.mp4
  07 正则常用规则.mp4
  08 电话号码的正则表达式.mp4
  09 邮箱的正则表达式.mp4
  10 网络爬虫.mp4
  11 正则表达式替换与切割.mp4
  12 异常的由来.mp4
  13 异常的体系介绍.mp4
  14 捕获处理.mp4
  15 抛出处理.mp4
  16 自定义异常.mp4
06 集合,Collection,List,Set
  01 今日内容介绍.mp4
  02 单例集合的体系介绍.mp4
  03 Collection接口中的常用方法.mp4
  04 迭代器使用步骤与原理.mp4
  05 增强for循环.mp4
  06 foreach遍历方式.mp4
  07 list常用的方法.mp4
  08 List集合特有的遍历方式.mp4
  09 ArrayList的底层实现原理.mp4
  10 LinkedList的底层原理.mp4
  11 使用LinkedList模拟队列与栈数据结.mp4
  12 Set接口的特点.mp4
  13 HashSet底层实现原理.mp4
  14 TreeSet.mp4
  15 并发修改异常.mp4
07 集合进阶,Set,Map
  01 复习回顾.mp4
  02 今日内容介绍.mp4
  03 可变参数.mp4
  04 Collections排序.mp4
  05 Map集合的特点.mp4
  06 Map接口常用的方法.mp4
  07 map集合的第一种遍历方式.mp4
  08 map集合的第二种遍历方式.mp4
  09 map集合的第三种遍历方式.mp4
  10 map的综合练习.mp4
  11 HashMap.mp4
  12 Treemap.mp4
  13 体验stream流.mp4
  14 得到Stream的方法.mp4
  15 终结的方法.mp4
08 Map集合,Stream流,File类
  01 复习回顾.mp4
  02 今日内容介绍.mp4
  03 File对象的构造器.mp4
  04 文件目录分隔符与绝对路径、相对路径.mp4
  05 File类判断与获取的方法.mp4
  06 File创建与删除的方法.mp4
  07 文件遍历的方法.mp4
  08 递归概念与递归实现5的阶乘.mp4
  09 列出一个目录下面的所有子孙文件.mp4
  10 动态搜索一个文件去执行.mp4
  11 删除一个非空目录.mp4
  12 码表的概念.mp4
  13 编码与解码.mp4
09 字符集,IO流
  01 复习回顾.mp4
  02 IO流分类.mp4
  03 字节流读取一个字节的数据.mp4
  04 关闭资源的意义.mp4
  05 输入字节流读取文件数据.mp4
  06 输出字节流写出文件的数据.mp4
  07 文件拷贝.mp4
  08 处理异常的代码.mp4
  09 fileReader读取文本资源.mp4
  10 FileWriter写出字符串的数据.mp4
  11 Filewriter要注意的事项.mp4
10 IO缓存流,序列化
  01 复习回顾.mp4
  02 今日内容介绍.mp4
  03 缓冲输入字节流.mp4
  04 缓冲输出字节流.mp4
  05 缓冲输入字符流.mp4
  06 缓冲输出字符流.mp4
  07 输出字节流的转换流.mp4
  08 输入字节流的转换流.mp4
  09 打印流.mp4
  10 输出序列化流.mp4
  11 输入序列化流.mp4
  12 IO框架.mp4
  13 员工管理系统的要求.mp4
11 properties文件,XML文件,dom4j解析,多线程
  01 员工管理系统改造.mp4
  02 读取properties文件.mp4
  03 生成properties文件.mp4
  04 xml文件的作用.mp4
  05 XML文件的组成.mp4
  06 dom4j解析原理.mp4
  07 xml文件解析.mp4
  08 生成xml文件.mp4
  09 dtd的约束.mp4
  10 schema约束.mp4
  11 线程的创建方式一.mp4
  12 线程的创建方式二.mp4
  13 多线程创建方式三.mp4
12 多线程与并发编程
  01 复习回顾.mp4
  02 今日内容介绍.mp4
  03 线程常用的方法.mp4
  04 线程安全问题演示.mp4
  05 同步代码块.mp4
  06 同步函数.mp4
  07 lock锁.mp4
  08 线程池创建.mp4
  09 线程池提交有返回值的任务.mp4
  10 Executors工具类.mp4
  11 并发与并行.mp4
  12 线程的什么周期状态.mp4
  13 懒汉单例设计模式.mp4
13 网络编程
  01 复习回顾.mp4
  02 今日内容介绍.mp4
  03 网络编程概述与网络通讯三要素.mp4
  04 ip地址对象.mp4
  05 TCP协议与UDP协议的特点.mp4
  06 UDP协议的入门案例.mp4
  07 UDP协议的多发多收.mp4
  08 TCP协议的入门案例.mp4
  09 TCP协议多发多收.mp4
  10 单线程版本的tomcat服务器.mp4
  11 多线程版本的tomcat服务器.mp4
  12 线程池版本的tomcat服务器.mp4
14 Junit单元测试,反射机制,注解,代理模式
  01 今日内容介绍.mp4
  02 junit单元测试.mp4
  03 反射的概念.mp4
  04 获取Class对象的方式.mp4
  05 反射操作构造器.mp4
  06 反射操作成员变量.mp4
  07 反射操作成员方法.mp4
  08 反射的应用场景.mp4
  09 注解的概述.mp4
  10 注解的定义与注解的使用.mp4
  11 元注解.mp4
  12 注解的解析.mp4
  13 自定义junit框架.mp4
  14 动态的角色与需求说明.mp4
  15 proxy生成代理对象.mp4
  16 代理模式生成set代理对象.mp4
  17 代理模式增强UserService的方法.mp4