Java的基础知识就像我们所住的房子的地基,如果地基不稳,上面所盖的楼房再宏伟,也是没人敢去入住的,同理Java的基础不牢固,以后也很难成为真正意义上的高手或独当一面的工程师。
Java语言自身来看,主要的学习难点集中在基础部分,所以通常Java基础部分的学习是整个Java语言学习的重点。
Java基础学习
Java基础的学习我总结为三个阶段:
环境和工具准备
准备一台电脑,要能联网
下载、安装 JDK,配置 Java 开发环境
下载、配置 Maven
下载、安装 IntelliJ IDEA
准备一个 GitHub 仓库(或者码云),管理 Java 源代码
既然要学 Java,JDK 是必须要先安装的,否则 Java 程序就没法编译和执行。
Maven 也是需要提前安装和配置的,因为后面进阶的话,需要一些练手项目,它们通常都需要 Maven 来加载第三方类库。
使用集成开发环境 IntelliJ IDEA 来敲 Java 代码吧,比 Eclipse 更流行。千万不要使用记事本编写源代码了,对于小白来说,时间是宝贵的,记事本不适合小白用来编程(入门)。
有了 IDEA,后面学习源码的话,就会方便很多,包括反编译字节码。
如果英语功底不太好的话,建议安装这两款 IDEA 插件:chinese 和 translation。
如果注重编码规范的话,建议安装这两款 IDEA 插件:Alibaba 和 SonarLint。
为什么还需要GitHub 仓库或者码云仓库呢?它们可以用来在线云同步源代码,防止版本丢失。学到最后,还可以形成一套自己的工具库,轮子就有了,上班的时候工作效率就会高很多,能直接用的代码再也不用重新写了。
书的话,我推荐两本,一本《Java 核心技术卷》,一本《Head First Java》。
《Java 核心技术卷》分为上下两册,上册的难度较低,可以在最短时间内刷完,尤其是有了 C语言的编程基础后,再刷这本书可以说是手到擒来。下册涉及到的内容有流与文件(☆)、XML、网络(☆)、数据库编程、国际化、Swing、AWT、JavaBean、安全(☆)、脚本编译和注解处理、分布式对象、本地方法(☆),没有标星的内容我认为可以略过。
《Head First Java》更有趣一些,里面有很多小游戏,很活泼的一本书。
两本书之间的风格差别比较大,之前就有读者给我反馈说,《Head First Java》有点驾驭不了,那就挑《Java 核心技术卷》。
Java在线学习教程,动力节点的的Java零基础,适合Java小白入门,基础+进阶都有。
Java全套学习资料需要的小伙伴,私信扣“1”
8 种基本数据类型(boolean、char、byte、short、int、long、float、double)
整形中 byte、short、int、long 的取值范围
单精度和双精度
为什么不能使用“==”比较浮点数
基本类型和包装类型的区别
自动拆箱与装箱
Integer 的缓存机制
算术运算符
逻辑运算符
比较运算符
条件分支(if/else/else if、三元运算符、switch)
循环或者遍历(for、while、do-while)
break 和 continue
创建包
导入包
包全名
public 关键字
static 关键字
void 关键字
main 方法
字符串数组参数(String[] args)
什么是数组?
访问数组
遍历数组
打印数组
可变参数
数组排序
数组转成 Stream
数组转成 List
数组搜索
java.util.Arrays
数组越界
单行注释
多行注释
文档注释
注释真的不会被执行吗?
优秀的程序员真的不写注释吗
双引号字符串和 new 字符串对象
字符串为什么是不可变的?
String、StringBuilder 和 StringBuffer 之间的区别
字符串拼接的几种方式
字符串常量池
关于 intern
字符串比较(== 和 equals)
字符串拆分
字符串操作小技巧
字符串转整形
生成 UUID
字符串可以引用传递吗?
字符串长度
关于 substring
面向对象和面向过程
封装
继承
多态
接口
抽象类
重写和重载
构造方法
局部变量、成员变量、静态变量、常量
值传递还是引用传递
final 关键字
this 关键字
super 关键字
不可变对象
equals() 和 hashCode()
打印 Java 对象
NullPointerException
字符串相关的工具类
日期时间相关的工具类
枚举
随机数
正则表达式
Apache-commons 工具库
Guava 工具库
ArrayList
LinkedList
ArrayList 和 LinkedList 之间的区别
不可变 List
CopyOnWriteArrayList
HashMap
LinkedHashMap
TreeMap
ConcurrentHashMap
fail-fast
什么是反射?
反射有什么用?
Class 类
为什么需要异常处理机制?
Error 和 Exception
try-catch-finally
try-with-resource
自定义异常
尽量捕获原始异常
不要打印堆栈后再抛出异常
不要用异常处理机制代替判断
不要过早捕获异常
注解是什么?
注解的生命周期
注解装饰的目标
自定义注解
使用注解
字符流、字节流
输入流、输出流
同步、异步
阻塞、非阻塞
BIO、NIO 和 AIO
NIO 2.0
什么是序列化和反序列化
Java 如何实现序列化和反序列化
Serializbale 和 Externalizable
serialVersionUID
什么是泛型?
类型擦除
泛型带来的问题
泛型中 K T V E 这些特殊字幕的含义
通配符
上下界限定符 extends 和 super
不要在集合中使用 Java 原始类型
Junit
TestNG
ASCII
Unicode
UTF-8
GBK、GB2312
如何解决乱码问题
什么是并发
什么是并行
什么是线程
什么是进程
线程的状态
线程的优先级
创建线程
创建线程池
什么是线程安全
多级缓存和一致性问题
CPU 时间片和原子性问题
指令重排和有序性问题
线程安全和内存模型
happens-before
可重入锁
阻塞锁
乐观锁
悲观锁
分布式锁
CAS
ABA
偏向锁
轻量级锁
重量级锁
自旋锁
什么是死锁
如果避免死锁
synchronized
volatile
ThreadLocal
Executors
CountDownLatch
Thread
Runnable
Callable
ReentrantLock
ReentrantReadWriteLock
Atomic 相关类
Lambda 表达式
Stream流
Optional
String
Integer
ArrayList
LinkedList
CopyOnWriteArrayList
HashMap
TreeMap
LinkedHashMap
ConcurrentHashMap
CopyOnWriteArrayList
按照以上的基础知识路线学完了,就可以继续学数据库…后边再分享给大家数据库的学习
技术是没有终点的,也是学不完的。
最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。
自学最怕的就是缺乏自驱力,一定要自律,杜绝“三天打鱼两天晒网”,到最后白忙活一场。
高度自律的同时,要保持耐心,不抛弃不放弃,切勿自怨自艾,每天给自己一点点鼓励,学习的劲头就会很足。