😀Java的基础知识就像我们所住的房子的地基,如果地基不稳,上面所盖的楼房再宏伟,也是没人敢去入住的,同理Java的基础不牢固,以后也很难成为真正意义上的高手或独当一面的工程师。
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自学全套学习资料分享:http://www.bjpowernode.com/?niukejava.chai
第二阶段:Java 基础入门
1)基本数据类型
-
8 种基本数据类型(boolean、char、byte、short、int、long、float、double)
-
整形中 byte、short、int、long 的取值范围
-
单精度和双精度
-
为什么不能使用“==”比较浮点数
-
基本类型和包装类型的区别
-
自动拆箱与装箱
-
Integer 的缓存机制
2)操作符
-
算术运算符
-
逻辑运算符
-
比较运算符
3)流程控制语句
-
条件分支(if/else/else if、三元运算符、switch)
-
循环或者遍历(for、while、do-while)
-
break 和 continue
4)包
-
创建包
-
导入包
-
包全名
5)main 方法详解
-
public 关键字
-
static 关键字
-
void 关键字
-
main 方法
-
字符串数组参数(String[] args)
6)数组
-
什么是数组?
-
访问数组
-
遍历数组
-
打印数组
-
可变参数
-
数组排序
-
数组转成 Stream
-
数组转成 List
-
数组搜索
-
java.util.Arrays
-
数组越界
7)注释
-
单行注释
-
多行注释
-
文档注释
-
注释真的不会被执行吗?
-
优秀的程序员真的不写注释吗
8)字符串
-
双引号字符串和 new 字符串对象
-
字符串为什么是不可变的?
-
String、StringBuilder 和 StringBuffer 之间的区别
-
字符串拼接的几种方式
-
字符串常量池
-
关于 intern
-
字符串比较(== 和 equals)
-
字符串拆分
-
字符串操作小技巧
-
字符串转整形
-
生成 UUID
-
字符串可以引用传递吗?
-
字符串长度
-
关于 substring
第三阶段:Java 核心技术
1)面向对象
-
面向对象和面向过程
-
封装
-
继承
-
多态
-
接口
-
抽象类
-
重写和重载
-
构造方法
-
局部变量、成员变量、静态变量、常量
-
值传递还是引用传递
-
final 关键字
-
this 关键字
-
super 关键字
-
不可变对象
-
equals() 和 hashCode()
-
打印 Java 对象
-
NullPointerException
2)常用工具类
-
字符串相关的工具类
-
日期时间相关的工具类
-
枚举
-
随机数
-
正则表达式
-
Apache-commons 工具库
-
Guava 工具库
3)集合框架
-
ArrayList
-
LinkedList
-
ArrayList 和 LinkedList 之间的区别
-
不可变 List
-
CopyOnWriteArrayList
-
HashMap
-
LinkedHashMap
-
TreeMap
-
ConcurrentHashMap
-
fail-fast
4)反射机制
-
什么是反射?
-
反射有什么用?
-
Class 类
5)异常处理
-
为什么需要异常处理机制?
-
Error 和 Exception
-
try-catch-finally
-
try-with-resource
-
自定义异常
-
尽量捕获原始异常
-
不要打印堆栈后再抛出异常
-
不要用异常处理机制代替判断
-
不要过早捕获异常
6)注解
-
注解是什么?
-
注解的生命周期
-
注解装饰的目标
-
自定义注解
-
使用注解
7)IO 流
-
字符流、字节流
-
输入流、输出流
-
同步、异步
-
阻塞、非阻塞
-
BIO、NIO 和 AIO
-
NIO 2.0
8)序列化
-
什么是序列化和反序列化
-
Java 如何实现序列化和反序列化
-
Serializbale 和 Externalizable
-
serialVersionUID
9)泛型
-
什么是泛型?
-
类型擦除
-
泛型带来的问题
-
泛型中 K T V E 这些特殊字幕的含义
-
通配符
-
上下界限定符 extends 和 super
-
不要在集合中使用 Java 原始类型
10)单元测试
-
Junit
-
TestNG
11)编码方式
-
ASCII
-
Unicode
-
UTF-8
-
GBK、GB2312
-
如何解决乱码问题
12)并发编程
-
什么是并发
-
什么是并行
-
什么是线程
-
什么是进程
-
线程的状态
-
线程的优先级
-
创建线程
-
创建线程池
-
什么是线程安全
-
多级缓存和一致性问题
-
CPU 时间片和原子性问题
-
指令重排和有序性问题
-
线程安全和内存模型
-
happens-before
-
可重入锁
-
阻塞锁
-
乐观锁
-
悲观锁
-
分布式锁
-
CAS
-
ABA
-
偏向锁
-
轻量级锁
-
重量级锁
-
自旋锁
-
什么是死锁
-
如果避免死锁
-
synchronized
-
volatile
-
ThreadLocal
-
Executors
-
CountDownLatch
-
Thread
-
Runnable
-
Callable
-
ReentrantLock
-
ReentrantReadWriteLock
-
Atomic 相关类
13)Java 8 新特性
-
Lambda 表达式
-
Stream流
-
Optional
14)源码阅读
-
String
-
Integer
-
ArrayList
-
LinkedList
-
CopyOnWriteArrayList
-
HashMap
-
TreeMap
-
LinkedHashMap
-
ConcurrentHashMap
-
CopyOnWriteArrayList
按照以上的基础知识路线学完了,就可以继续学数据库...后边再分享给大家数据库的学习
技术是没有终点的,也是学不完的。
最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。
自学最怕的就是缺乏自驱力,一定要自律,杜绝“三天打鱼两天晒网”,到最后白忙活一场。
高度自律的同时,要保持耐心,不抛弃不放弃,切勿自怨自艾,每天给自己一点点鼓励,学习的劲头就会很足。