ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Java入门学习路线:从环境配置到项目实战的避坑指南

Java入门学习路线:从环境配置到项目实战的避坑指南 不少刚接触Java的朋友都问过同一个问题网上Java资料太多了java基础教程收藏了一堆java学习路线图也看了七八张结果还是不知道明天该打开哪个页面。这个感受我特别理解因为我刚入行的时候也被各种“必看清单”轰炸过——有人让你背java面试题有人让你直接学Spring Boot结果很多人连环境配置都没跑通就放弃了。这篇文章没有那么多花哨的东西只讲一件事给“初入Java”的你一条不折腾的路线并把路上最容易踩的坑提前标出来。适合完全零基础的纯小白也适合学过一点但到处碰壁、想系统梳理一遍的人。1. 先搞清楚Java生态再动手它到底解决什么问题1.1 Java为什么这么多年来还在招人不少新手会困惑现在新语言这么多为什么还有人推荐Java我的答案是四个字存量太大。企业级系统一旦用Java写了三五年内不太可能整体换语言。换语言意味着重写业务、重构数据层、重新培训团队成本远超语言本身的优劣。所以只要这些系统还在跑就需要大量Java开发去维护、加功能、做接口。这也是Java岗位常年稳定、且大厂后端依然大面积使用Java的核心原因。另外Java的生态是真的全。从Spring Boot到Dubbo从MyBatis到各种中间件哪个环节都有成熟的轮子和现成的踩坑记录。对新手来说遇到问题能搜到大量同类答案本身就是一种优势。java工程师这个岗位听起来好像很卷但需求基数摆在那里只要你基础扎实机会一直都在。1.2 Python和Java怎么选不是非此即彼很多人在入门时被“Java还是Python”这个问题卡住。两者不是敌人。如果你目标是后端开发、进互联网公司找技术岗位Java的主线地位依然很稳如果你更想做数据分析、机器学习这类方向Python明显更对口。我整理了一张对比表方便你按方向挑对比维度JavaPython上手速度前期略陡强类型约束多语法自由写起来快性能表现有JIT优化适合高并发后端解释执行多线程受GIL限制应用生态Web后台、微服务、大数据AI、数据分析、DevOps脚本岗位分布后端java工程师岗位基数大AI/数据相关岗位为主工程化程度编译期检查IDE支持强团队规范依赖更高我的建议是刚开始别纠结选定一条主线先走满一个月。Java学到能写增删改查、了解Spring Boot基本流程后再花一周学Python做辅助脚本完全不冲突。真到了业务里多语言协作才是常态多会一门从来不是坏事。1.3 从游戏启动器到企业后台Java生态的真实版图Java程序并不是传统意义上“编译成机器码直接跑”而是先把源码编译成字节码.class再由JVM在运行时加载和执行。很多人问“java是静态链接的”这句话对不对其实是误解——Java采用的是运行期类加载机制更接近“动态链接”的思路这也是它跨平台的根源。这种机制带来了巨大的生态想象力。你的电脑上就可能有不少Java程序比如Minecraft这个游戏以及它的经典启动器PCL都是用Java写的再比如埋单排队时后台的电商订单接口很大概率跑在Spring Boot上还有大数据领域常见的Elasticsearch、Hadoop、Flink底层都是JVM系的。所以“初入Java”不只是学一门语法而是在学一整个生态的入口。理解了这个背景你后面遇到“类找不到”“编译失败”“内存溢出”这些报错时至少不会慌到怀疑人生。2. 环境配置劝退点JDK、环境变量和你的第一个Hello World先说实话环境配置是初学Java的第一个分水岭。我见过太多人前三天全耗在装环境上装完JDK又去配IDEA最后命令行跑Hello World还报“找不到主类”直接放弃。环境配置其实就三件事装JDK、配PATH、理解编译运行。把这三件事搞明白比记住一堆快捷键都重要因为后面启动任何项目、排查任何运行问题都要回到这三件事上来。2.1 JDK版本怎么选官方下载别踩坑先分清两个词JDK是开发工具包包含编译器javac和运行环境JRE只是运行环境。JDK安装包里就带了运行环境所以新手只需要装JDK不用单独装JRE。版本建议很明确学习阶段选JDK 17或者JDK 21它们都是LTS长期支持版本稳定且社区资料多。如果未来入职的公司还在用JDK 8工作后再装一套8就行先学17不会白学。别装最新发布的非LTS版本追求新鲜感新人没必要替官方踩新版本的雷。下载渠道认准两类Oracle官网的JDK下载入口或者OpenJDK发行版比如Adoptium Temurin。我个人推荐学习阶段用Temurin免费、更新稳定。Windows装.msi一路下一步macOS选.pkgLinux解压tar包或者用包管理器。尽量不要从网上下载“绿色精简版”JDK来路不明的包被植入什么你根本不知道这是安全底线问题。2.2 环境变量PATH和JAVA_HOME的配置原理与多JDK切换配置环境变量之前先理解PATH和JAVA_HOME各自干什么否则配完只会抄报错还是不会排。PATH是操作系统找命令的路径列表。你把JDK的bin目录加进PATH系统才能在任意目录直接打出java、javac命令。JAVA_HOME是给Maven、Gradle、Tomcat、IDEA这些外部工具用的它们不自己去翻文件而是读JAVA_HOME这个变量找到JDK的位置。Windows大致是这样系统属性 - 高级 - 环境变量新建JAVA_HOME值填JDK安装路径再编辑Path新增一行%JAVA_HOME%\bin把原来的C:\Program Files\Java\jdk-17\bin这类绝对路径删掉避免重复配置。最后新开一个cmd窗口敲java -version和javac -version验证。注意一定要新开终端已经打开的窗口不会重新读环境变量这个问题被问过无数次。多JDK切换是这个阶段最容易乱的地方。Windows上临时切换就改JAVA_HOME的值再新开终端macOS或Linux强烈推荐sdkman一行命令就能装多个JDK并来回切换。IDEA里则可以为每个项目单独指定JDK版本没必要全局改来改去。所谓“java环境变量使用多个jdk”本质上就是把环境变量的指向和IDE的项目SDK分开管理各管各的。2.3 第一个Java程序编译与运行的本质装好环境后先用记事本或者最简单的文本编辑器写一段代码不要直接开IDEA。这一步不是为了体验原始生活而是为了看清Java从源码到运行到底经历了什么。写一个Hello.java内容很简单public class Hello { public static void main(String[] args) { System.out.println(Hello, Java); } }保存后打开命令行先执行javac Hello.java你会看到多出一个Hello.class文件这就是字节码再执行java Hello控制台输出Hello, Java。整个过程里文件名必须和public class的类名完全一致包括大小写这是新手第一号报错来源。理解这背后的流程javac负责把.java源码编译成.class字节码JVM的类加载器再把.class加载进内存最后由执行引擎逐行把字节码“翻译”成机器能跑的东西。后面不管是在Spring Boot里启动项目还是排查“类找不到”的报错本质都是在跟这套机制打交道。建议你前一周坚持用命令行编译运行真正理解了再切IDEA。IDEA帮你屏蔽了太多底层细节如果一开始就依赖它遇到复杂工程报错时会无从下手。3. 语言基础必修课数据类型、命名规范和面向对象环境通了接下来就是语言本身。Java基础内容不少但真正拦住新手的就三块数据类型、命名规范、面向对象。这三块不是背下来就能会的是要在写代码过程中反复踩坑、反复体会的。我先讲原理再配上实操中容易踩的坑这样你学完至少知道哪些地方要格外小心。3.1 八种基本数据类型与引用类型Java有八种基本数据类型先把它们的容量记住后面写代码才不会莫名其妙丢精度或者内存爆掉。可以用一张表快速过一遍类型字节数取值范围byte1-128 ~ 127short2-32768 ~ 32767int4约-21亿 ~ 21亿long8更大范围字面量要加Lfloat4单精度浮点double8双精度浮点char2单个字符boolean不定true/false除基本类型外其余都是引用类型比如类、接口、数组、枚举。新手最容易踩的坑是基本类型和包装类的混用。比如Integer a 127Integer b 127a b的结果是true但改成128结果就成了false。原因是Integer对-128到127做了缓存。结论很直接包装类判断值相等一律用equals不要用。另外Java的char是16位的处理中文字符基本没问题但涉及emoji这类扩展字符时会用两个char表示一个字符遍历字符串时很容易踩坑。以后做输入参数校验时留意这一点很多“乱码”问题其实是编码处理方式不对而不是数据本身坏了。3.2 标识符命名规则从“能跑”到“能维护”很多新手觉得命名规则是考试题实际写代码随便打几个字母就行。等你接手过别人的烂代码就明白了命名规则不是形式主义是给未来的自己省时间。硬性规则要记清楚标识符不能以数字开头只能由字母、数字、下划线、美元符号组成大小写敏感不能用Java关键字。中文也可以做标识符但不建议很多团队规范和工具链对中文支持都不友好。规范方面业内通行做法是类名用大驼峰比如OrderService方法名和变量名用小驼峰比如getUserName、maxCount常量全大写加下划线比如MAX_PAGE_SIZE。我接手过一个变量全是a、b、tmp、data1的项目整整花了三天才理清业务逻辑。你初学的时候养成的命名习惯会直接决定你半年后能不能看懂自己写的代码。强烈建议从第一行代码开始就用规范命名这比任何代码规范文档都管用。3.3 面向对象三件套封装、继承、多态面向对象编程是Java的灵魂面试必问后续学Spring也高度依赖这套思维。核心就三件事封装、继承、多态。封装很好理解就是把字段设成私有对外只开放必要的方法。比如银行账户的余额你不能让外部随意set只能通过存钱、取钱这些方法来修改这就是封装保护了数据安全。实际代码里不要一上来就给所有字段加getter/setter应该先想清楚哪些字段需要暴露哪些行为是业务要求的。继承是子类复用父类能力用extends关键字。Java规定一个类只能继承一个直接父类这是和C不一样的地方。方法重写时记得加Override注解编译器会帮你检查方法签名是否写错这个习惯一定要有。多态是同一个父类引用指向不同子类对象表现出来不同行为。你声明一个Animal类型的变量实际放一只Dog进去调用sound()时听到的是狗叫。后面在Spring里到处是用接口编程、用父类引用接对象的写法现在把多态吃透后面会少走很多弯路。4. 集合、字符串和排序写代码和刷题都靠这些基础学完语法接下来就是高频使用的基础库。写业务逻辑、刷算法题、面试被问90%都围绕集合和字符串展开。这一节我把最实用的内容梳理出来每个点都配上选型逻辑和坑方便你直接拿去用。4.1 容器类CollectionList、Set、Map的选择逻辑Java里的集合容器常被简称为“java容器”指的就是java.util包下的那一套。新手不用背整个框架图先记住三个接口和它们的常用实现就够起步了。List是有序、可重复的集合最常用ArrayList底层是数组查询快LinkedList底层是链表增删头尾快但日常业务中用到相对少。Set是无序、不可重复的集合HashSet基于哈希实现去重首选TreeSet可以按自然顺序排序。Map是键值对结构HashMap是默认选择需要保持插入顺序就用LinkedHashMap并发环境用ConcurrentHashMap。选型逻辑其实一句话要按索引找、要保留重复元素用List要不重复用Set要按key快速查value用Map。面试官爱深挖HashMap底层它的结构是数组加链表链表长度到8会转红黑树默认负载因子0.75容量按2的次幂扩容。这个原理不是背的是理解后结合数据量能解释为什么性能稳定。新手还容易在循环里直接list.remove()大概率会抛ConcurrentModificationException。想边遍历边删除用Iterator的remove方法或者直接list.removeIf(条件)。Java 8之后写list.removeIf(item - item.getId() 1)就够了简洁又安全。4.2 字符串处理与正则判断实用小抄字符串在Java里是不可变的每次用加号拼接都会创建新对象。单条拼接无所谓循环里大量拼接一定要用StringBuilder。StringBuffer是线程安全的版本单线程场景性能反而不如StringBuilder。日常处理字符串先记住这几个方法substring截取、indexOf查找位置、split拆分、replaceAll替换、equals比较内容、contains判断包含、matches配合正则匹配。具体场景里校验用户输入特别常用。比如判断“字符串中是否不是字母和数字”这个问题本质就是一个正则表达式的事String s abc123; boolean allAlphaNumeric s.matches([a-zA-Z0-9]); boolean hasOtherChar !allAlphaNumeric;注意如果这个方法在热点路径上被反复调用直接String.matches()每次都会编译正则性能一般。更好的做法是用Pattern.compile预编译再复用来匹配Pattern p Pattern.compile([a-zA-Z0-9]); Matcher m p.matcher(s); boolean ok m.matches();这套写法在写接口入参校验时非常常见值得早学会。4.3 排序与常用库sort函数、Collections和基础算法排序是初学绕不过去的内容面试和刷题都会用到。Java标准库里直接提供了Arrays.sort对数组排序Collections.sort给List排序。默认都是升序想要自定义规则时用Comparator加lambda表达式就能搞定ListUser users ...; users.sort((a, b) - a.getAge() - b.getAge());有人问“常用库函数algorithm java”其实Java没有像C那样单独叫algorithm的库它把这些工具分散在java.util.Arrays、java.util.Collections、java.util.Objects这几个类里。习惯按类查API就好。基础算法里冒泡排序是每个新手都会手写一段的。原理是每轮把相邻元素两两比较大的往后沉小的往前浮for (int i 0; i arr.length - 1; i) { for (int j 0; j arr.length - 1 - i; j) { if (arr[j] arr[j 1]) { int temp arr[j]; arr[j] arr[j 1]; arr[j 1] temp; } } }冒泡的时间复杂度是O(n^2)数据量一大就肉眼可见地慢。刷题时数据规模超过一万优先用Arrays.sort这种内置排序它底层是双轴快排加归并的优化实现。冒泡的价值在于帮你理解循环嵌套和交换思想不用在生产环境里手写。想系统补算法推荐一本很经典的书《数据结构与算法分析Java语言描述》网上有些免费资料但版本不一建议直接看原版或购买正版。配合课后题去实现比只背八股理解深得多。5. 从语法到工程Spring Boot、MyBatis-Plus和第一个正经项目语法学得差不多后很多人会陷入迷茫我会写for循环了会建类了然后呢然后就是要从“写玩具程序”跨到“写工程化项目”。Java后端之所以岗位多核心就是Spring这套生态。我按自己学习走过的路线把这一跨拆成三部分讲框架选择、持久层实践、项目练手方法。这三块是相辅相成的缺了哪块都容易学成“半吊子”。5.1 Spring Boot为什么成为Java开发的事实标准Spring最初的核心思想是依赖注入和面向切面。简单说以前对象要自己new依赖关系乱成一团Spring容器帮你管理对象生命周期需要什么就自动注入什么。这套设计看起来抽象但一旦用过就回不去了。Spring Boot是Spring的“开箱即用”版本省掉了大量XML配置自带内嵌Tomcat加依赖就自动配好。创建项目最简单的办法是打开start.spring.io选好构建工具Maven、语言Java、Spring Boot版本再勾选web依赖生成zip包后用IDEA打开就能跑。初学者先引入三个依赖就够spring-boot-starter-web提供Web能力spring-boot-starter-test给单元测试再按需要引入mybatis-plus或spring-boot-starter-jdbc去连数据库。Controller层用来写接口代码虽然看着多但核心就是RestController加RequestMapping加方法体。顺带说一个热词里经常搜到的点——controller层怎么防爬虫。很多新手以为在Controller里加个拦截器就行其实那是最后一道入口。真正有效的防爬要分几层网关层做限流Redis加滑动窗口统计IP请求频率接口层做参数签名校验和验证码应用层对User-Agent、Referer做基础过滤。只靠Controller代码防不住什么最多是增加点成本。5.2 MyBatis-Plus自动建表与行级权限的工程实践持久层是Java后端绕不开的组件。MyBatis-Plus是MyBatis的增强版提供BaseMapper之后单表增删改查可以不用写一条SQL对新手很友好。有朋友问“根据Java实体类生成创建表的SQL语句”怎么做。MyBatis-Plus本身并不直接对外提供一键建表命令常见的做法是下面几种一是用mybatis-plus-generator生成实体类和Mapper代码数据库表提前用工具或者SQL建好二是用Flyway、Liquibase这类数据库迁移工具来维护DDL脚本三是在小项目里自己写一个初始化工具读取实体类上的TableName、TableField注解拼出CREATE TABLE语句。第三种适合内部工具不推荐上线时依赖。行级权限是另一个高频话题。所谓行级权限就是不同角色查同一张表时只能看到自己对应的数据行比如业务员只看自己部门的数据。Java里的常见实现方式是拦截SQLMyBatis拦截器在SQL执行前动一下手脚自动拼接条件。MyBatis-Plus自带TenantLineInnerInterceptor专门做这种多租户行级隔离原理就是拦截SQL追加租户ID条件。有搜索到的朋友还会问“Java怎么保证数据一致性”。这个问题得分场景单数据库里直接用Transactional注解控制事务异常就回滚微服务场景下就需要引入分布式事务比如Seata的AT模式或者用本地消息表加最终一致性。面试常问但初学阶段先把事务的ACID理解透尤其是传播级别和回滚规则比背分布式方案有用。如果你以后要连SQL Server这类老数据库思路也一样换驱动依赖、改JDBC URL再改方言配置但初学阶段建议先学好MySQL生态资料最全。5.3 怎么用开源项目练手商城源码的取舍“初入Java”到一定阶段就需要一个像样的项目来整合知识。很多教程会让你去搜“spring boot mybatis的java开源多商户跨境商城源码下载”这里我得提醒一句这类搜索词很容易把新手带到不明的下载站里面打包的源码可能被植入恶意代码轻则偷配置信息重则直接控制你电脑。更安全的方式是去GitHub或者Gitee搜star数高、文档完善的商城类开源项目。拿到项目后不要急着全部读懂先用文档把项目跑起来然后沿着一个业务链路走通前端发起请求 - Controller - Service - Mapper - 数据库把这条链画成一张图。最后挑一个小功能改一改比如新增一个订单状态、加一个统计接口改通了才算真正理解。如果连商城都嫌大先从个人博客、记事本、会议室预约这种简单系统开始把增删改查完整跑一遍也有很大价值。项目不在大小在“你自己动过手”的深度。6. 面试、竞赛和考证初入Java的进阶路线规划基础语法和项目经验有了之后进阶的路大致分三条面试求职、算法竞赛、考证评级。我不太建议新手一上来就全都要先想清楚自己目前最需要哪条针对性准备。这一节我把三条路的真实情况说清楚帮你少走弯路。6.1 java面试题与“八股文”的真正打开方式很多人口中的“八股文”指的是Java面试中常考的JVM、集合、并发、Spring原理这类题目。听名字像贬义实际上它代表了市场对后端工程师基础能力的基本要求。java面试题、java开发工程师面试题这些搜索词常年热度很高说明这块需求是实打实的。准备面试题不能靠死记硬背。我的方法是按主题整理Java基础、集合、JVM、多线程、Spring、MySQL、Redis、项目每个主题下面列高频题。然后对每一题先写一段自己的理解再对照优质答案补漏。比如HashMap为什么扩容是2的幂次因为这个设计让元素定位时能用位运算替代取模性能更高扩容时元素迁移也更简单。这种题背结论很容易忘理解了设计动机就忘不掉。面试最怕的就是只刷题不写代码。面试官问你项目里怎么用的你光背概念回答不出来印象分直接掉。哪怕是练手项目也要准备两三个技术细节哪里用了缓存、哪张表索引怎么设计、某个报错怎么排查的。这些比“背得多”更能体现实战能力。如果你走测试方向Java接口自动化测试框架也值得提前了解常见组合是RestAssured加TestNG加Allure报告。会写接口测试脚本在很多测试开发岗位里都是加分项。6.2 算法刷题、蓝桥杯与《数据结构与算法分析》算法能力在找工作时越来越重要尤其大厂和竞赛。很多人搜“java 蓝桥杯 数字题目”“java 蓝桥杯算法题目”说明在校生对蓝桥杯很关注。蓝桥杯是面向大学生的算法竞赛官网可以报名比赛分省赛和国赛支持Java组题型覆盖排序、模拟、动态规划、图论等。对Java新手来说这是一个很好的以赛代练机会。刷题平台我推荐力扣、牛客和洛谷。用Java在线提交时别忽略输入输出模板Scanner虽然简单数据量大时性能一般建议用BufferedReader加StringTokenizer。第一阶段不要贪多每天一到两道简单题坚持一个月效果远好于周末猛刷几十道。想系统补算法基础还是推荐那本《数据结构与算法分析Java语言描述》把每个章节的数据结构亲手实现一遍链表、栈、队列、二叉树、堆、哈希表。这个工程量很扎实做完之后你再去看HashMap源码、看集合框架会有一种“原来如此”的通透感。6.3 软考、认证和社区资源哪些值得花钱花时间软考是国内的计算机技术与软件专业技术资格考试里面的软件设计师科目会考Java语法、软件工程、数据库、UML这些内容。如果你想进国企、事业单位或者有些城市落户加分软考有一定价值如果目标是互联网公司它更多是锦上添花不是硬门槛。考不考先看你职业路线。社区资源这块要会筛选。Oracle官方Java Tutorials免费从语言基础到并发都有适合系统阅读GitHub上JavaGuide这类开源知识库整理了常见面试题和路线图可以当参考手册但不能只看它不写代码Stack Overflow和掘金是遇到具体问题去搜答案的好地方。最不划算的是收藏几百个教程视频然后一个都没看完。资料这个东西少而精才有效。把一本好书读透、一个项目亲手做完、一两套在线题库刷下来比囤积资源强太多。7. 常见报错与启动失败的排查顺序照着走能省一天时间前面说的都是知识准备最后补一块实战能力排错。初学Java这段时间你会碰到各种报错有些看一眼就懂有些能把人整崩溃。我把最高频的几类问题和排查顺序整理出来遇到别慌按顺序查。排错这个能力不是靠天赋是靠一套稳定的方法论。7.1 “找不到或无法加载主类”和类路径问题命令行运行时最常见的报错是Error: Could not find or load main class Hello。第一次碰到会以为环境又坏了其实十有八九是类路径或者包名问题。排查顺序先确认编译是否成功即有没有生成对应的.class文件再确认运行时类名是否带了包名。不带包的情况很简单javac Hello.java之后直接java Hello如果类声明里有package com.example那就必须先编译到对应的目录结构再运行java com.example.Hello。理解这个报错要看JVM的类加载机制类加载器会从classpath指定路径里查找类文件。classpath没配对或者目录结构跟包名对不上JVM自然找不到。把“类路径”这个概念搞懂这类报错以后再出现你一眼就能定位。顺带区分一下ClassNotFoundException和NoClassDefFoundError前者是类加载阶段没找到后者是编译期有、运行期丢了或初始化失败它们在排查思路上略有差别。7.2 项目启动失败的通用排查流程用Spring Boot举例写完新手项目最常见的崩溃场景就是启动Spring Boot失败。请不要一上来就怀疑框架坏了绝大多数问题都在自己的配置和依赖上。第一步永远看日志。控制台里的ERROR行会直接描述原因Spring Boot还会给出一段Description和Action照着Action做就行。第二步区分类型端口占用会提示Port 8080 was already in use解决办法是换端口或者找到占用进程kill掉数据库连接失败会提示Failed to configure a DataSource去检查application.yml里的URL、用户名、密码依赖冲突要靠Maven排查运行mvn dependency:tree看重复依赖和版本不一致。排查顺序我一般固定成四步环境JDK版本、Maven版本 - 配置端口、数据库、Redis - 依赖版本冲突、缺失 - 业务代码。这套流程在大多数启动失败场景里都成立按顺序走比瞎猜快得多。遇到日志看不懂时先搜报错原文里最独特的那个短语比如“Port 8080”或“Failed to configure”比整段复制更容易命中答案。7.3 多JDK切换和IDE里默认版本不一致的坑好不容易程序跑起来了可能还会遇到一个很隐蔽的问题命令行java -version显示JDK 17IDEA编译却报“不支持发行版本5”或者编译级别对不上。这种一般是IDE的Project SDK设置和Maven编译器的release版本不一致导致的。做两件事就能解决。第一IDEA里File - Project Structure - Project设置SDK版本并确认Modules语言级别。第二Maven项目在pom.xml里明确指定编译版本properties maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target /properties多JDK切换的坑核心原因是全局JAVA_HOME和IDE项目SDK各管各的。我的习惯是电脑装两个JDK一个最新LTS给全局用一个公司项目要求的版本给特定项目用IDEA里针对不同项目单独指定。这样命令行工具和IDE互不干扰也没有频繁改环境变量的焦虑。最后分享一个我自己的习惯遇到任何报错先读完整日志再拿报错原文去搜尽量不要截图发群里问“怎么办”。初入Java这段时间最重要的不是背多少API而是学会自己找答案。这个能力一旦跑通了后面学Spring、学微服务、甚至转其他语言都会顺很多。
返回列表