问题：﻿自学 Java 怎么入门？ 在大学自学 Java。看视频教程和代码能看懂 自己写就写不出来，怎么样能够入门？
话题：﻿生活方式、Java、Java编程、Java程序员、Java入门
回答：﻿在下是985硕士一枚，本科是非科班，所以研究生期间花了两年时间自学Java，最后在校招拿到了BAT等大厂的研发offer，恰好我最近写了四篇Java工程师学习指南，讲述了如何从入门到进阶学习Java，也是我自己两年以来学习java的一些心得体会。如果想成为专业的Java后端工程师，自学是要花需要时间和精力的，那么如何进行入门的呢。问题问的是如何入门，那么我决定选择前两篇文章来回答这一问题，分别是如何学习Java基础知识，以及如何开始做一个JavaWeb项目接下来就是具体的文章，建议大家按顺序阅读，有点长，收藏的时候记得点赞或者评论哈。笔芯！Java工程师学习指南入门篇最近有很多小伙伴来问我，Java小白如何入门，如何安排学习路线，每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了，其实不然，因为我之前写的文章都是站在Java后端的全局上进行思考和总结的，忽略了很多小白们的感受，而很多朋友都需要更加基础，更加详细的学习路线。所以，今天我们重新开一个新的专题，分别按照四篇文章讲述Java的学习路线（分别是入门篇，初级篇，中级篇，高级篇），笔者也打算趁此机会，回忆一下自己的Java学习历程。今天我们要讲的是，小白同学如何入门Java。先声明一点，文章内容不会详细到每一步怎么操作，只会提供大致的思路和方向，给大家以启发，如果真的要一步一步指导操作的话，那至少需要一本书的厚度啦。本文所述的方法不一定适合所有人，如有错误敬请谅解。01前期准备工作开发环境搭建这一步我们往往会直接跳过，但既然是面向小白的教程，这里就提一下吧。首先你需要一台电脑，然后安装好JDK和JRE，JDK提供的是Java开发工具，也就是一些必备的jar包，JRE则是Java的运行环境组件，我们熟悉的JVM就在这里面。安装好这两个东东之后，一般还要配置一下环境变量，否则有一些目录可能无法被正确找到。IDE选择和安装IDE指的就是本地开发编辑器，没有了它，你就只能直接在记事本这类工具里敲代码了。IDE最大的好处就是整合了大量的工具和功能模块，让你非常轻松地完成开发。以前大家都用eclipse，不过eclipse已经不流行了，现在我推荐你直接用intellijidea作为你的第一个代码编辑器。如果是用过eclipse的同学，基本上也可以无痛切换。intellijidea可以直接在官网上下载，试用版30天，如果想要永久使用，网上也有一些办法滴。关于jar包jar包是什么，其实就是将一堆class格式文件打包，Java中把它称为jar包，这些jar包在编译器中能被直接识别，让开发者使用。对于新手来说，可能只需要用到JDK自带的一些API，但是如果你要引用外部jar包，可能就会遇到一些困难了。对于idea来说，导入外部jar包有两种办法，一种是手动导入jar包，一种是使用maven。后者会在JavaWeb相关的文章中讲起。手动导入jar包其实也不难，你需要先下载好jar包，然后在对应的项目下选择导入jar包即可，具体的方法这里就不展开说了，因为在网上都找得到。02学习Java基础的几种方法了解基础语法学习一门语言，最开始要做的事情就是学习它的语法。我最早学习Java语法是在Runoob，这个网站可以让你对任意一门语言完成最快速的语法入门，当然，这只是相当于你浏览了一遍基础语法。想要真正掌握Java语言基础，光看基础语法还远远不够，我在大三第一次接触Java课程，听老师讲面向对象三大特征听得一头雾水，连数组的初始化方式都理不清楚，但这些内容都是我们需要掌握的。所以，为了学好Java基础，我们还需要看视频或者看书进行学习。看视频视频的话，可以到极客学院或者慕课网听Java基础课程，当然也可以看我分享的Java视频课程。大家也都知道，现在Java的培训班非常多，基本上学的东西也都大同小异，不过它们的有些课程还不错，大家有渠道的话也可以去看一看。看视频的好处是你可以更好地接收知识，同时也会耗费你更多实践，所以，有时候你也可以选择看书。看书看书的话，对于小白来说不推荐太复杂的书，比如《Java编程思想》这种书，新手千万不要看。我个人建议，你只需要先看看《Java入门到精通》这种类型的书就足够了，因为这个部分的学习只是为你后面的学习开个头，你以后可能还要回过头来重新研究这些内容。现在市面上介绍Java基础的书籍实在太多了，质量参差不齐，内容同质化严重，笔者看过的其实也不多。给大家一个建议，你只需要挑一两本书来看即可，这里推荐两本最简单的吧，《headfirstjava》和《Java从入门到精通》。看博客这里再推荐另一种学习方式，就是看博客，博客比起书籍来说，更适合对于某个技术点的学习，你可以很容易地在网上找到这个知识点相关的原理，实现方法，以及代码范例。我的博客里没有讲解特别基础的东西，如果你看一些比较基础的文章，可以到Runoob等网站上查看。如果你有一个很明确的知识点想要学习，相信搜搜引擎会给你更好的答案。代码实践除此之外，一般的Java书籍或者视频课程都会要求你相应完成一些练习题，这部分内容你需要自己在电脑里使用IDE完成。在IDE里，你可以很好地熟悉Java语言的使用，基本代码的实现，同时可以尝试各种各样的API,并且测试一些语言特性，比如继承，封装，多态等等。另外，这也是你熟悉IDE的一个好机会，因为在公司里做开发可能要用到IDE各种各样的功能，提前熟悉好IDE绝对是有益无害的。03Java入门必备知识点梳理在Java入门阶段，你可能需要接触到以下这部分知识，不管你是从通过哪种方式学习，这些内容都是你学习Java基础时绕不过的重点。Java基础知识这部分内容是你必须要掌握的内容，在入门阶段你需要把这些基础打扎实，以便于在学习后面的内容时可以更上一层楼。如何把基础打扎实呢，最好的办法就是在IDE上把书上或者视频上的每个例子都实现一遍，当然有的时候你也可以自己写一些有意思的例子。1基本数据类型比如int，double，char，以及其包装类。熟悉基本数据类型的使用，了解每种类型所占的字节数，以及它们和包装类之间的相互转换。2流程控制比如for循环，ifelse，while循环等等如果是学过c语言的同学，这部分可以跳过了。3字符串类型String的使用字符串类型是Java中很重要的类型，它不是基本数据类型，但却很常用，熟悉和实践String相关的api，开始你对字符串的学习吧。4数组数组的初始化方式有哪些，二维数组应该怎么写，把数组当成方法参数又该怎么处理？5类和对象Java中最重要的两个概念：类和对象，它们有什么用呢，有什么区别和联系呢，请在代码中实践它们吧。Java核心技术对于这部分内容，我相信很多小白只能了解它们的基本使用方法，但是并不明白其背后的一些原理：比如为什么接口和抽象类有这些区别，多态的意义是什么，为什么要有反射。新手在学习这部分内容时，只需要知道怎么用就可以了。当然，你最好把这些特性都实现一遍，以加深印象。至于为什么有这些特性，这些特性背后的原理是什么，不是我们现在讨论的内容，这些内容我们将在初级和中级篇中讲述。因为，要了解这些原理，你得了解JVM，了解并发技术的基础，了解网络基础，甚至更多。显然，这不是你现在能做到的。1接口和抽象类写一些接口，同时写一些实现类去实现这些接口，并且了解一下为什么我们需要接口，为什么子类需要实现接口里的方法。同理，去实现一些抽象类吧。然后，看看它和接口有什么不同。2继承，封装和多态如何理解继承，子类和父类之间有什么联系呢。封装是一种保护代码的方式，有哪些方式可以实现封装呢。多态一般分为重载和重写，它们分别怎么使用？3异常处理Java中的异常处理主要用于捕获和处理错误，请你写一些trycatch代码块去捕获错误吧。4集合类集合类是我们经常需要打交道的东西，List，Map，Set等等，赶快去熟悉API，然后写一些测试例子吧。5IO输入流和输出流IO输入流和输出流可以操作文件，网络数据等内容，如何在Java代码中完成这么复杂的操作呢，其实只需要简单的几个api就可以了。6多线程为了让系统资源最合理地分配和调度，我们需要多线程，多线程会让程序变得有趣，也会带来很多问题，使用Thread和相关API，去尝试这些有趣的事情吧。可选内容：1反射（了解即可，不是入门必须）2枚举类型和泛型（了解即可，不是入门必须）3网络通信（了解基本的socket使用即可，需要网络基础）4数据库操作（了解基本的JDBC即可，需要数据库基础）04总结总而言之，对于一个Java小白来说，入门Java可以分为这几步：1首先搭建好Java开发环境2通过Runoob等一些网站熟悉Java的基本语法3通过看书看视频等方式熟悉Java基础知识，通过代码实践加深理解4通过看书看视频等方式初步了解Java核心技术，通过代码实践加深理解。本文主要是为大家提供一个学习的思路，以及推荐一些学习方法，如果你能够按照这样的步骤去学习，并且配合上一些适合你自己的学习方法来完成学习计划，相信你可以很好地完成对Java的入门。Java工程师学习指南初级篇最近有很多小伙伴来问我，Java小白如何入门，如何安排学习路线，每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了，其实不然，因为我之前写的文章都是站在Java后端的全局上进行思考和总结的，忽略了很多小白们的感受，而很多朋友都需要更加基础，更加详细的学习路线。所以，今天我们重新开一个新的专题，分别按照四篇文章讲述Java的学习路线（分别是入门篇，初级篇，中级篇，高级篇），笔者也打算趁此机会，回忆一下自己的Java学习历程。今天我们要讲的是，小白同学如何入门Java。先声明一点，文章内容不会详细到每一步怎么操作，只会提供大致的思路和方向，给大家以启发，如果真的要一步一步指导操作的话，那至少需要一本书的厚度啦。本文所述的方法不一定适合所有人，如有错误敬请谅解。01JavaWeb项目指南jav在上一篇文章中，我们讲到了入门Java的几个步骤，先搭建好环境，然后熟悉基本语法，接着熟悉Java的一些核心技术，并且在代码中进行实现。如果你已经完成了这部分内容的学习，应该会感觉自己对Java已经有一定了解了，可以轻松地写出一些Java代码，比如实现多线程输出数字，再如操作IO流等等。当然，这些代码通常只是一些demo，我们在实际的项目中可能并不会这么简单地使用这些技术，我们可能会同时使用集合类，多线程，以及操作数据库的API。所以，在今天的初级篇中，我们就来谈谈怎么做项目吧。JavaWeb项目对于大部分Java新手来说，最适合他们入门的项目就是JavaWeb了。因为Java天然适合做Web应用，并且生态完善，更有很多开源的工具和框架去支撑这些应用，比如Spring，Hibernate，SpringMVC等等。那么，如何开始着手做一个JavaWeb项目呢。个人认为最好的方式就是看视频了。因为，看书的话，很多内容比较过时，并且一般不会提供源代码。也有一些大佬喜欢推荐开源的项目（在GitHub上面的项目），但是对于小白来说，如果没有很完整的文档去指导他们，那也是毫无意义的。曾几何时，JavaWeb的项目还在使用JSP+Servlet进行开发，后来出现了Struts2，再后来，出现了我们现在也一直在用的SpringMVC，说实话，不论使用哪种开发框架，你都需要先花一些时间去学习相关的技术，否则你会发现，即使是看视频，你也不知道里面在讲什么。要想做好一个JavaWeb项目，你不仅需要一个好的项目课程，还需要足够的知识储备，下面就让我们来理一理这些内容把。知识储备Java基础部分的内容咱们上次说过了，这里就不再重复啦~下面我们分别来说说其他几方面的知识储备把02前端知识推荐资源：在w3cschool学习html，css和js，支持在线测试代码。既然是做Web，就难免要涉及到前端技术，不过，现在前后端分离已经是一种趋势，所以，如果你对前端不感兴趣，也没必要花太多时间去学习。对于大部分同学来说，你最好要了解html的基本标签和格式，自己能够写一些简单页面，CSS的话，也可以稍微接触一些。相对于前面两个服务于样式的技术，我们倒是更应该去学习一下JavaScript，了解它的一些基本语法，以及ajax的使用，因为在前后端交互时，ajax是非常重要的。所以，做一个JavaWeb项目，你不需要花太多时间在写前端页面上，如果有源代码可以直接使用，当然，对于一些需要修改的前端页面，你得怎么去做修改它，因为有时候你需要使用JSP，JSP既包括前端代码也包括Java代码，如果你完全看不懂前端代码的话，那就很尴尬了。03JavaWeb常用技术JavaWeb的技术栈其实比较庞大，所以我们不要求面面俱到，只是希望你能够熟悉一下项目中可能用到的技术。下面列举一些常见的技术，大家最好要了解一下。1JSP和Servlet推荐资源：《JavaWeb入门到精通》，慕课网、极客学院等网站上的JavaWeb基础课程这是JavaWeb开发最原始的形态，现在很少直接使用了，但是后来的各种框架其实也是建立在servlet之上来做的。你们需要了解这两个技术分别是用来干什么的，最好能写一些demo来实践。对于JSP，有时候你可能还要学习jstl等标签语言，因为这些标签可以让你更方便地往JSP中插入Java代码。2Spring和SpringMVC推荐资源：《Spring实战》，慕课网、极客学院等网站上的SpringMVC基础课程。事实上，除了上述资源之外，你也可以直接到官网上查看快速开始文档。Struts2早已被时代抛弃，Spring则是当今的霸主，你需要了解Spring如何使用，以及SpringMVC如何使用，并且学会在项目中使用它。由于SpringBoot最近很火，并且搭建方式比SpringMVC更简单，你也可以先学习SpringBoot，以便更快速地搭建起你的第一个JavaWeb项目。3MySQL推荐资源：《Sql必知必会》，Runoob上的MySQL基础教程，慕课网、极客学院等网站上的视频课程一个JavaWeb应用一定要有数据啊，所以我们需要用到数据库，其实搭一个mysql数据库是非常简单的，但是对于初学者来说最麻烦的就是写sql了，所以，先学会建表，熟悉sql，对你以后做项目也是大有裨益的。4Hibernate和Mybatis推荐资源：Runoob上的Hibernate和Mybatis基础教程，慕课网、极客学院等网站上的视频课程当你学会了使用sql去查询数据，可能还不足以让你在项目中很方便地处理数据，因为我们还需要一个步骤，就是把数据库的数据转化成Java里的对象。orm框架就是为了解决这一问题而出现的，它可以让一张表和Java类一一对应，让数据查询变得非常方便。Hibernate和Mybatis都是orm框架，只不过现在mybatis越来越火了。所以，你需要了解这一技术，因为它会广泛地运用到大部分JavaWeb项目中。5Maven推荐资源：《maven实战》，易百教程里的maven教程，慕课网、极客学院等网站上的视频课程刚才咱们已经说过了Spring，orm框架，以及MySQL等方面的技术了。实际上，一个简单的JavaWeb项目也只需要这些东西了。但是，有一个问题，就是：一个项目里用到这么多技术，所需要的jar包也会很多，我们如何管理这些jar包呢。如果直接导入所需jar包，那当jar包更新或者需要替换时，每次都要手动操作，非常麻烦。另外，当jar包很多时，项目打包后的war格式文件也会很大，不利于传输。为了解决上述问题，maven应运而生了。maven通过pom.xml文件来指定所需的jar包，并且自带了很多构建相关的功能，比如编译，打包，运行单元测试等等，因为它本身就是一个构建工具。当然，新手可能还难以理解这些概念，你必须要知道的是，大部分JavaWeb项目需要用maven来管理，你需要学会maven的基本用法，最基本的用法就是：学会修改pom.xml文件。6Tomcat推荐资源：慕课网、极客学院等网站上的视频课程。对于小白来说，Tomcat相关的技术是非常复杂的，毕竟它是一个应用服务器啊，事实上这个时候，你只需要学会如何安装Tomcat即可。毕竟，它在项目中的作用就是提供一个运行环境而已。正常来说，你只要下载解压Tomcat的压缩包即可。由于现在的IDE都支持集成Tomcat，所以一般情况下你都可以在IDE中配置好你的Tomcat路径，然后设置好你的项目路径，IDE会自动把你的工程代码部署到Tomcat服务器上。如果你使用想跳过IDE直接部署工程到Tomcat上，也可以直接编译工程并且打包得到war格式的文件（这个步骤可以使用maven来完成），然后拷贝war文件到Tomcat下的特定目录即可。上述两种部署方式的详细步骤请到搜索引擎寻找答案。7Git和GitHub推荐资源：廖雪峰的Git教程，GitHub官网，慕课网、极客学院等网站上的视频课程。既然要做项目，为什么不把它发布在GitHub上。当你熟悉了Git指令之后，你可以很方便地发布你项目中的每一次更新，并且同步到GitHub上，这样既可以让你更好地管理项目版本，又可以让你GitHub更加活跃，为你未来的面试加分。所以，赶紧学好Git指令，然后开启你的项目之旅吧。04其他常用组件除了上面几种必备的技术之外，有时候我们在项目中还会用到其他东西，在这里我们把它们叫做组件。这里只做简单的介绍，至于具体怎么使用，在网上都可以很容易地找到相关文章。1日志系统当项目代码比较多的时候，容易发生错误，日志可以很好地记录代码运行时的错误，常用的日志系统有log4j,logging等等，另外你还需要了解一下slf4j。2单元测试日志系统可以记录代码问题，单元测试则是为了避免代码出错，常用的单元测试组件主要是JUnit，建议你找个文档看一看，然后下载下来玩一下。3JSONJSON逐渐成为前后端数据交互的标准格式，为了在项目中使用JSON的API，你也需要导入它的jar包，一般我们都会使用阿里提供的fastjson，赶快下载来玩一玩吧。当然，常用的JavaWeb组件还有很多，比如HTTPClient，再比如一些加密工具，一些压缩工具等等，这里就不再一一列举了。5总结今天的内容就到这里了，与其说是初级篇，反而更像是“项目篇”呢。因为学完基础内容之后，做项目是最好的复习和实践方式了。所以这篇文章围绕着做项目来展开，也就不足为奇了。今天我们主要讲的是，做好一个JavaWeb项目，需要哪些知识储备，需要了解哪些技术，并且我也推荐一些比较精品的视频课程。后面我还会写一篇文章，专门讲一讲怎么做项目，会更加详细，更加侧重怎么去做，敬请期待吧。总结以下今天说的几个要点吧：1Java基础知识储备2前端知识储备3了解和使用JavaWeb常用技术4JavaWeb常用组件介绍5视频课程推荐俗话说的好，磨刀不误砍柴工，相信你看了本文之后，可以更好地做好知识储备，然后开始JavaWeb的项目实践，希望你能够顺利地完成你的第一个项目。