ARTICLE DETAIL

资讯详情

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

Java入门指南:从环境搭建到编写运行第一个Java程序

Java入门指南:从环境搭建到编写运行第一个Java程序 我带过不少零基础想入行Java的朋友也回复过很多类似的求助环境装好了第一个Java程序该怎么写、怎么跑为什么照着教程敲了代码一编译就报错这看起来是最入门的一步但里面藏着的“坑”远比想象中多。这篇就把“入学Java程序及编写第一个Java程序”这件事从头到尾讲透从运行原理讲到环境搭建再讲到第一行代码如何变成屏幕上的一句话最后把常见的报错和排查思路也一并整理了。刚接触Java的初学者或者装了环境但对流程没概念的自学者看完应该能少走很多弯路。1. 动手前的必修课理解Java程序的运行逻辑1.1 Java为什么能一次编写、到处运行很多新手第一次接触Java最先听到的宣传语就是“一次编写到处运行”。这句话说得没错但它背后依赖的机制往往是新人第一个搞不懂的点。Java源代码并不能直接在操作系统上运行普通程序如C或C写出来的代码是直接编译成对应操作系统能识别的机器指令。而Java不同它多了一个中间层编译器先把Java源代码编译成一种叫作“字节码”的中间文件这种字节码不属于任何特定的操作系统。真正执行字节码的是一个叫JVM的虚拟机。每个操作系统上都有针对该系统开发的JVM版本同一个字节码文件丢给Windows上的JVM它能跑丢给Linux上的JVM它也能跑页面看起来还一模一样。举一个生活化的例子方便理解字节码就像一份“国际通用问题清单”JVM就是“本地翻译官”。你在哪个国家就找会说那个国家语言的翻译官翻译官把清单读给当地人听当地人就能帮你办事。你只需要维护好这份通用清单不需要针对每个国家重新写一份。所以写Java程序本质上分两个阶段先用编译器生成字节码再用JVM去解释执行。理解了这一点后面遇到的很多报错就都能对上号了。1.2 JDK、JRE、JVM到底谁是谁我经常在群里看到有人问JDK和JRE有什么区别为什么下载的时候有两个选项这里把关系一次讲清楚。JVM是Java虚拟机负责执行字节码文件是程序能跑起来的最小核心。JRE是Java运行时环境包含JVM和Java程序运行所需的核心类库。只运行别人写好的Java程序装JRE就够了。JDK是Java开发工具包包含完整的JRE还额外提供了编译器javac、打包工具jar、文档生成工具javadoc等开发用工具。三者的关系可以用一句话概括JDK是给开发人员用的JRE是给普通用户运行Java程序用的JVM是藏在底层执行代码的核心引擎。因为你要编写Java程序所以需要的是JDK。JDK体积通常比较大安装时看到好几百兆甚至一个多G不用惊讶它把运行环境、开发工具、类库都打包在一起了。一个常见的误区是我下载了Java并安装了为什么执行java -version没问题一执行javac就提示找不到命令十有八九是你只装了JRE或者装的是不带编译器的精简JDK。写代码必须装完整版JDK这是第一课就要记住的事情。1.3 版本怎么选别一上来就追新Java版本更新非常快新版本几乎每半年出一个。但对初学者来说版本选择不需要追新反而应该选稳定、资料多、企业用得多的版本。目前就业市场和主流教学最常接触的版本是JDK 8、JDK 11和JDK 17。JDK 8虽然“老”但整个生态成熟很多企业存量项目还在用网上的教程、面试题、第三方库兼容性都最全。JDK 11和JDK 17是后续的长期支持版本功能更新也是新项目逐渐迁移的方向。我给初学者的建议是如果只是为了学习和练习选JDK 8或者JDK 17都可以。JDK 8能被绝大多数教程覆盖搜问题基本不会落空JDK 17则更贴近当下的新项目环境也不会遇到所谓“版本太老”的焦虑。最怕的是装了一个刚发布的非长期支持版本结果某个第三方工具还不兼容排查半天也找不到原因平白浪费精力。稳定大于一切。2. JDK安装与环境变量配置新手最容易翻车的环节2.1 下载和安装路径选择是第一个坑下载JDK的时候优先从官方渠道获取Linux系统也可以直接通过包管理工具安装。安装本身不复杂双击运行安装包一路Next就能完成但有几个细节如果你不在意后面大概率会踩坑。第一安装路径尽量选择纯英文目录。很多新手电脑用户名就是中文的默认安装目录是C:\Users\中文用户名...或者干脆把JDK装到了“D:\软件\Java”这种带中文的路径下。Java历史上有不少工具对中文路径支持不好虽然现在很多情况下能跑但碰上奇怪报错时中文路径是第一个被怀疑的对象。我习惯的做法是直接在某个盘符根目录建一个简单的文件夹比如D:\Java\jdk-17干净清爽。第二安装过程中如果没有特殊需求默认组件全选即可。老版本JDK安装时还会询问是否安装公共JRE建议取消勾选。因为JDK内部已经包含了一个专用JRE再装公共JRE除了占空间还容易让环境变量更混乱。第三安装完成后最好检查一下安装目录下有没有javac.exe这个文件。如果找遍了整个目录都没有说明你安装的版本有问题或者是精简版需要换一个完整版JDK重装。2.2 环境变量配置详细步骤环境变量是很多新手第一个崩溃点。所谓环境变量本质上是告诉操作系统去哪找Java相关的命令。你平时能在系统里直接敲“notepad”弹出记事本是因为Windows系统目录下本来就有记事本程序。但javac和java不在系统目录里它们在JDK的bin目录下所以需要把这个目录路径登记到PATH环境变量中。以Windows为例配置步骤是右键“此电脑”选择“属性”进入“高级系统设置”点击“环境变量”。在“系统变量”区域点击“新建”变量名填JAVA_HOME变量值填JDK的安装路径比如D:\Java\jdk-17。接着在系统变量列表中找到Path双击“编辑”点击“新建”填入%JAVA_HOME%\bin然后一路确定保存。这里有两个新手容易犯的错误。第一个是只配了JAVA_HOME忘了把%JAVA_HOME%\bin加到Path里。JAVA_HOME只是一个自定义变量系统本身不会自动去读它真正决定命令行能否识别java命令的是Path。第二个是配置Path的时候把原有内容覆盖了这会导致系统原有的命令失效。添加而不是删除这是原则。Linux或macOS上道理类似只是配置文件换成了.bashrc或.zshrc通过export命令指定JAVA_HOME和PATH。2.3 验证环境配置的三个命令配置完成后重新打开一个命令行窗口分别执行java -version、javac -version和echo %JAVA_HOME%。第一条能看到JRE的版本信息第二条能看到编译器的版本信息第三条输出你配置的JDK路径。为什么强调重新打开因为环境变量的改变不会实时生效到已经打开的窗口命令行窗口启动时读取一遍当时的变量状态之后不再自动刷新。太多新手配置完环境变量在旧窗口里执行命令还是报错以为配置失败其实只要重新开一个窗口就好了。java -version能通过而javac -version报错说明JRE存在但JDK的编译器没有关联上请检查Path路径里有没有正确指向%JAVA_HOME%\bin。两个命令都能正常输出版本号环境这关就算过了可以开始写第一个程序了。3. 编写第一个Java程序从HelloWorld到真正理解执行流程3.1 用记事本写还是用IDE写很多教程会让新手用记事本写第一个Java程序这个做法的好处是能强迫你理解Java的运行流程缺点是对现代人来说太过别扭。如果你电脑上没有装任何开发工具完全可以用记事本或者系统自带的任何文本编辑器先体验一遍完整流程这会让后面使用IDE时更有底气。但不建议用记事本长期开发写几行代码还可以代码量一多就是个灾难。市面上的主流Java开发工具不少Eclipse、IntelliJ IDEA是见得最多的。对新手来说社区版IDE完全够用安装过程没有技术门槛。但我不建议你在刚装完环境的第一天就一头扎进IDE因为IDE帮你屏蔽了大量底层细节编译命令怎么执行的、类路径怎么设置的你根本看不到。先用记事本配合命令行写完第一个HelloWorld再切换到IDE你会发现自己对整个过程有很强的掌控感。还有一种中间形态是使用在线编译器打开网页就能写Java代码。这种工具适合临时验证一个语法问题但我不建议靠它做日常练习毕竟实际开发环境在本地命令行和IDE的操作必须尽早熟悉。3.2 HelloWorld代码逐行拆解用一个文本编辑器新建文件输入以下内容保存为HelloWorld.java。注意文件名必须和类名一致这是Java编译器强制的约束为的是让编译器能在文件系统中快速定位到对应的类定义。public class HelloWorld { public static void main(String[] args) { System.out.println(Hello, Java!); } }第一行public class HelloWorld声明了一个公共类类名叫HelloWorld。Java对类名的命名惯例是首字母大写文件名与此保持一致。关键字public表示这个类可以被外部访问class表示这是一个类定义。花括号里是main方法public static void main(String[] args)是Java程序的入口点JVM在执行程序时会从这个方法开始。static关键字让这个方法能脱离实例直接调用void表示这个方法不返回任何值。String[] args是命令行参数会把运行时传递过来的参数放进这个数组里前面写上String和args只是约定俗成真正需要理解的是这个格式不能乱改。System.out.println(Hello, Java!);这行代码负责向控制台输出一条文本。System是一个类out是它内部的一个标准输出流对象println是输出并换行的方法。很多新手第一次写代码把System的S写成小写或者把String写成了string编译器直接报错。Java是大小写敏感的语言这一点从第一天就要刻进脑子里。3.3 编译与运行javac和java的分工文件保存好后打开命令行用cd命令切换到HelloWorld.java所在的目录然后执行编译命令。javac HelloWorld.java这一行命令调用编译器把HelloWorld.java编译成字节码文件HelloWorld.class。如果代码没有语法错误命令行不会输出任何信息但磁盘上会多出一个class文件。这是Java程序执行的第一阶段。接着执行运行命令。java HelloWorld注意这里千万不要写java HelloWorld.classJVM会找不到主类的。java命令后面跟的是类名不是文件名当然更不能带.java后缀。执行成功后屏幕上就会输出一行文本Hello, Java!到这里你的第一个Java程序就已经完整跑通了。有两点值得展开。第一编译和运行是两步不同的工作编译阶段负责把人类写的源代码转换成字节码运行阶段由JVM解释执行字节码。如果跳过编译直接运行JVM根本不知道该执行什么。第二为什么javac后面要带.java而java后面不带因为javac接收的是源文件而java接收的是已经编译好的类名这个细节几乎是每个新手的必经报错点。3.4 让程序“说话”第一个能交互的小程序HelloWorld只是验证环境通了它没有任何交互。想感受一下Java程序的真实运转逻辑可以写一个稍微进阶一点的小程序用Scanner接收键盘输入然后输出一段话。import java.util.Scanner; public class Greeting { public static void main(String[] args) { Scanner scanner new Scanner(System.in); System.out.print(请输入你的名字); String name scanner.nextLine(); System.out.println(你好 name 欢迎开始学习Java); scanner.close(); } }这个程序里的import java.util.Scanner是引入一个工具类用来读取用户在命令行里输入的内容。程序执行到scanner.nextLine()时会暂停等待用户输入回车之后继续执行。看着程序能根据输入做出不同回应你对“代码在运行”这件事的感受会比单纯的HelloWorld深得多。程序里的号在Java中做字符串拼接把固定文本和用户输入的变量拼成一句话。学习Java之初遇到不懂的语法先动手试把System.out.print改成println看看区别把scanner.nextLine()换成nextInt()试试眼见为实比背概念有用得多。4. 常见问题与排查技巧实录4.1 典型报错速查表初学阶段碰到的报错就集中在几类我整理了一个速查表方便你对照排查。报错现象常见原因解决办法javac不是内部或外部命令PATH环境变量未配置或配置后未重开窗口检查JAVA_HOME和Path重新打开命令行java不是内部或外部命令JDK安装不完整或Path缺失安装完整JDK将bin目录加入Path错误找不到或无法加载主类HelloWorld未先编译直接运行或java指令后带了.class先执行javac编译再用java HelloWorld运行类HelloWorld是公共的应在名为HelloWorld.java的文件中声明文件名与public类名不一致将文件名改为和类名完全相同的.java文件程序包xxx不存在import路径写错或缺少类库检查import语句和classpath设置非法字符\uff1b混入了中文标点符号检查代码将全角分号、括号改为半角这里最容易被忽略的是编译后运行目录的问题。如果你的源代码在D:\code编译后也在这个目录但当前命令行还停留在C:\user直接运行java HelloWorld同样会报“找不到主类”。解决方案是用cd切换回class文件所在目录或者用java -cp D:\code HelloWorld指定类路径。类路径这个概念现在有个大致印象即可后面会越来越常用。4.2 “找不到主类”的排查思路在所有报错里“找不到或无法加载主类”的咨询量最大。这个报错的字面意思是JVM在指定的位置没有找到包含main方法的类。排查顺序应该固定下来按顺序检查通常五分钟内能定位问题。第一步检查是否执行了编译命令。如果目录下没有HelloWorld.class那你运行java HelloWorld必然失败。先执行javac HelloWorld.java再运行java HelloWorld。第二步检查java命令后面的类名是否拼写正确、大小写是否一致。第三步检查当前所在目录是否真的包含这个class文件在命令行里输入dir命令查看。第四步检查代码里是否确实定义了main方法并且方法签名是public static void main(String[] args)签名稍微写错一个词JVM也会报告找不到主类。按照这四步走一遍绝大多数“找不到主类”的问题都能解决。剩下的极个别情况是与类路径、特殊配置有关那就可以借助搜索引擎把完整报错信息贴上去查。4.3 环境变量配置的通用避坑指南环境变量配置这一关很多初学者会反复折腾。除了前面提到的重开命令行窗口、不要覆盖原有Path之外还有几个隐藏问题值得说。Windows下JAVA_HOME的值不要带结尾的反斜杠比如D:\Java\jdk-17是对的D:\Java\jdk-17\虽然也能用但某些工具解析时会出现路径拼接错误。配置完环境变量后如果验证命令仍然提示找不到检查一下是不是修改了“用户变量”而验证时用的却是管理员的“系统变量”窗口或者反过来。两个作用域都能用但要把配置做在同一个作用域下否则容易混乱。另外提醒一点不要随意下载不知名网站所谓的“绿色版JDK”“优化版JDK”。这些版本可能被修改过指不定带点什么东西。JDK就用官方安装包省心安全这是底线。市面上也有开源的OpenJDK发行版可以用比如一些社区维护的版本对学习来说完全没问题同样建议从可信渠道获取。4.4 一个容易被忽略的窗口重开问题我在前面反复提到“重开命令行窗口”这个操作的价值值得单独拿出来说一说。环境变量是在窗口启动时读取的改过之后旧窗口不会自动同步最新值。如果你在配置环境变量之前就开着的命令行窗口里执行java -version系统看到的仍然是旧的环境甚至根本找不到。很多新手教程没强调这一点导致好多人配置完环境变量接着用同一个窗口测试怎么试都报错以为自己配置错了甚至卸载重装JDK好几遍。解决办法只有一个字关掉终端再重新打开一个。Linux和macOS上同理改完环境变量如果不重启终端或者不执行source ~/.bashrc刷新一下新配置也不会生效。如果你已经重新打开了窗口还是不行再检查环境变量内容是否真的保存成功特别是“系统变量”和“用户变量”别改错地方。5. 入门后的下一步学习路线与项目练手建议5.1 不要急着学框架很多新手跑通HelloWorld之后马上就想学Spring Boot想尽快能做出一个网页后端项目。这个热情能理解但思路会让自己陷入困境。框架建立在Java基础之上如果你连面向对象、集合、异常处理这些核心语法都没掌握直接上框架只会看到满屏的注解和配置根本不知道它们在干什么出了问题也毫无排查头绪。我的建议是HelloWorld跑通之后先老老实实把基础语法过一遍。变量与数据类型、运算符、流程控制语句、数组、类和对象、继承与多态、接口、异常、集合框架、泛型、IO流、多线程。这些内容看起来多但每一样都是地基。地基不扎实往上堆的东西越高越危险。“Java八股文”这个概念在面试圈流传很广指的是那些高频出现的面试题和知识点。有些同学一开始就背八股文我没有资格绝对说它不好但建议你在有基础之后再去系统刷题和理解原理。死记硬背没有意义真正理解过一遍的东西面试时才能灵活表达。5.2 推荐的学习顺序结合带新人的经验我整理了一条比较平滑的路径。第一阶段是语法基础重点写控制台小程序比如计算器、猜数字、学生成绩管理不用图形界面不用数据库就练语法和逻辑。第二阶段是面向对象把学生、图书、订单这些现实事物抽象成类理解封装、继承、多态并且开始接触集合框架。第三阶段是更进一步的核心API包括异常处理、IO流、多线程、网络编程这个阶段可以尝试写一个简单的聊天室或者文件管理器的控制台版本。第四阶段是数据库学习如何使用JDBC操作MySQL这时候你已经能把数据持久化下来了。第五阶段才是Web开发和框架从Java基础迈向实际业务开发。这个顺序是我个人比较推荐的只代表我实践下来体验较好的一条路。你也可以根据自身节奏调整但总的原则不变每一个阶段都配大量的动手练习代码量上去了很多概念不用背自然就理解了。5.3 用几个“小项目”检验学习成果练习不是非要做出多完整的项目几个小题目就能很好地检验掌握程度。第一个项目是“学生信息管理系统”要求用集合存储学生对象支持增删改查数据可以保存到文件里。这个项目能覆盖类与对象、集合、IO流和异常处理练完基础能力会有明显提升。第二个项目是“图书借阅系统”加上了简单的借书还书流程和日期计算。第三个项目可以试着做一个“命令行贪吃蛇”或者“猜拳游戏”主要锻炼逻辑思维能力。练完这些你会发现自己再去看招聘网站上常见的Java初级要求比如“熟悉Java基础、集合、多线程”“了解数据库”你已经能把每一条对应到具体代码上。这时候再决定要继续深入Java的哪个方向是走后端开发还是转大数据方向选择权就在你自己手里了。说回“入学Java程序”这件事本身我个人的体会是环境配置和第一个程序的运行考验的并不是智力而是细心和耐心。你提前把类名和文件名不一致、环境变量没刷新、运行带上了.class这些坑都记牢了后面学Java的底气就足了很多。第一次在控制台上看到输出了“Hello, Java!”的时候那种兴奋感是真切的。保持住这种感觉多做几个小程序多写几段代码学习Java的上手速度一定会快过绝大多数人。
返回列表