资讯动态

Java入门第一步:JDK安装与环境变量配置全攻略(含HelloWorld编译运行)

发布时间:2026/9/15 8:15:08 来源:尧图企业网站定制
1. 上手前的认知准备1.1 为什么每个Java初学者都要先过“环境配置”这道坎关于“入学Java程序”这件事我见过太多人一上来就打开IDE准备敲代码结果卡在第一步就心态崩了——JDK装好了但打开命令行敲java -version提示“不是内部或外部命令”或者代码明明照着抄的一运行就报“找不到或无法加载主类”。这些问题的根源绝大多数都不是Java本身难而是你对Java程序的编译和运行机制没有一个直观的认知。Java程序的运行和你在记事本里写字、然后双击打开是完全不同的逻辑。一个.java源文件写完之后要先经过javac编译器生成.class字节码文件再由Java虚拟机JVM去解释执行。这个过程里操作系统需要知道javac和java这两个命令到底在哪个目录下否则它就只能干瞪眼。“入学Java程序”这个阶段的核心任务就是把这条从源码到字节码再到执行的链路彻底打通。用一个通俗的类比你买了一台游戏机JDK拆开包装之后得先通电、接上电视环境变量然后才能插卡运行游戏你的第一个程序。很多人不是不会玩游戏而是压根没把电源插上。1.2 这篇文章能帮你解决什么如果你是零基础的小白或者之前装过Java但一直没跑通第一个HelloWorld那这篇教程非常合适。我会把JDK选型、下载安装、环境变量配置、第一个程序的编译运行这整条链路完整走一遍每一步都解释清楚“为什么这么做”而不是只扔给你一堆命令让人照着敲。文章不会讲太深的理论但会精细到你容易踩坑的每一个细节包括JDK版本怎么选才不会被培训机构或者老旧的视频教程带偏、环境变量到底配置哪几个、编译用的javac和运行用的java到底有什么区别、为什么别人推荐你用IDEA但你一开始最好先用记事本来写。2. JDK的选型、下载与安装2.1 搞清楚JDK、JRE和JVM之间的父子关系在动手安装之前有必要把三个最常见的Java名词理清楚否则你在网上搜安装教程时会被各种说法绕晕。JVM的全称是Java Virtual Machine也就是Java虚拟机它的职责是负责运行字节码文件。JRE是Java Runtime Environment除了包含JVM还提供了一系列运行时需要的类库比如你后面会学到的java.lang包下的String、Math这些基础类都在JRE里。JDK是Java Development Kit它是面向开发者的完整工具包除了包含JRE还有一些开发工具。这三个的关系用房子来类比很贴切JVM是卧室JRE是一整套房子JDK则是房子加装修工具包。你要运行Java程序光有JVM不够得装JRE你要开发Java程序只在JRE里装个卧室也不行需要JDK。好消息是你不需要分别下载它们现在装一个JDK就已经把JRE和JVM都包含了。我再补充一个细节很多老教程会跟你说“装完JDK之后还要单独配置JRE”那是基于JDK 8以前的安装逻辑。到了JDK 9之后官方已经把JRE和JDK合并到一个整体里了你再单独去找JRE安装包反而容易装出问题。所以网上那些标注“JDK 8安装教程”的文章很多操作步骤放在今天已经过时了看的时候要有意识地甄别版本。2.2 JDK版本到底怎么选别被“最新版本”忽悠了版本选择是新手第一个容易纠结的地方。我的建议很简单能用LTS版本就不用最新的短期版本。LTS是Long-Term Support的意思也就是长期支持版本。Oracle官方每隔一段时间才推一个LTS版本这种版本会有长达数年的安全补丁和性能更新适合生产环境使用。而非LTS版本比如你现在去官网看到的JDK 23、JDK 24它们的功能确实很新但只提供六个月的短暂支持之后就不再维护了。对于想稳扎稳打打好基础的你来说选一个长期支持的版本才是王道。我推荐直接选择JDK 17这是目前市面上主流的LTS版本也是很多企业和面试官默认使用的版本。很多培训机构到现在还在用JDK 8那是因为他们用的老框架、老代码一时半会改不过来但你现在从头学起没必要学一套即将过时的体系。如果你已经装了JDK 8也不用卸载学基础语法阶段两者差别不大但建议后面新开的项目逐渐迁移到17版本。2.3 安装过程中的三个隐蔽大坑确定版本后去Oracle官网或者AdoptiumEclipse基金会名下的OpenJDK发行版下载对应你操作系统的安装包。这里我不推荐去第三方网站下载所谓“绿色版”或者“优化版”因为你永远不知道安装包里被做了哪些手脚。用官方渠道或者Adoptium这类正规发行版安全性和后续升级都有保障。安装时的第一个坑是在Windows下安装路径不能包含中文和空格。比如你装在D:\编程软件\Java\jdk-17这个路径看起来很清晰但某些命令行工具在解析中文路径时会报“编码GBK的不可映射字符”之类的错误排查起来相当痛苦。最稳妥的路径是D:\Java\jdk-17或者C:\Java\jdk-17这种纯英文的简单目录。第二个坑是安装过程中不要顺手勾选安装“公共JRE”。我之前提到过JDK 9之后JRE已经集成在JDK里了如果你在安装过程中额外勾选JRE会在系统中留下两套Java运行时环境后面配置环境变量时PATH指向哪一套、JAVA_HOME指向哪一套容易产生混乱运行java -version时显示的是JRE的版本运行javac -version却提示找不到命令。为了避免这种分裂状态安装时能取消的附带选项都取消掉。第三个坑是安装完成后Oracle有些版本的安装向导会在最后让你填写注册信息这部分可以跳过。安装结束后系统可能不会让你立刻看到效果你需要通过命令行验证是否安装成功我后面会单独讲。3. 环境变量配置从原理到实操3.1 你要配置的其实只有两个变量安装完JDK之后漫长的配置环节才真正开始。打开Windows的环境变量设置窗口你会发现里面有一堆系统变量其中我们要操作的只有两个JAVA_HOME和PATH。JAVA_HOME从名字就能看出来这是一个“指向你JDK安装目录”的变量。它的价值在于让其他依赖Java的软件比如后面会用到的Maven、Tomcat能够按图索骥找到JRE和JDK。这类软件启动时会先去环境变量里找JAVA_HOME找到了就用它指引的路径去加载Java运行时环境。所以JAVA_HOME这个变量名的写法是约定俗成的不能改名成JAVA_PATH之类的。PATH变量的逻辑则是给系统一条“查找命令”的路径清单。当你打开命令行敲下javac或者java操作系统会从当前目录开始找这两个命令。当前目录找不到就会按PATH里列出的目录一个个去翻。这就是为什么你配好了JAVA_HOME却不往PATH里添加的话系统照样报“不是内部或外部命令”因为它不知道该去哪找你刚装好的javac.exe。简而言之PATH配置的目的是让操作系统能找到编译器javac和启动器javaJAVA_HOME是给其他软件一个标准查询入口。两者缺一不可。3.2 一步步教你配置JAVA_HOME右键点击“此电脑”-“属性”-“高级系统设置”-“环境变量”这一步人人都能找到不再赘述。在系统变量区域下如果已经有JAVA_HOME选中并点击“编辑”如果没有就点“新建”。变量名填写JAVA_HOME变量值填写你的JDK安装目录比如D:\Java\jdk-17。这里有一个常见错误是有人把变量值填成了jdk安装目录下的bin子目录这是不对的。bin目录是之后配置PATH时会用到的JAVA_HOME只需要指到JDK根目录即可。还有一个小细节路径的层级一定要检查清楚确保这个目录下直接就能看到bin、lib、conf这些子文件夹而不是点进去又套了一层别的目录。3.3 PATH变量的追加与顺序问题在系统变量里找到PATH双击进入编辑界面。现在Windows提供了比较友好的图形化编辑界面了你不需要跟老版本一样用分号把路径串成一条长字符串。点击“新建”把%JAVA_HOME%\bin这个变量给填进去。这里用%JAVA_HOME%这种写法是引用前面配置的变量值好处是以后你升级JDK版本时只需要修改JAVA_HOME一个地方PATH就自动跟着变了。如果你直接把D:\Java\jdk-17\bin写死在PATH里那下次升级JDK还得回来改PATH等于多了一处需要维护的状态。PATH中还有一个小细节值得注意把%JAVA_HOME%\bin放在列表最前面会更保险。某些开发软件会自带老版本的Java运行环境并且它们安装时也会向PATH添加自己的路径。如果你在命令行执行java -version发现版本不对很有可能是系统先从PATH前面找到了其他软件自带的java。把%JAVA_HOME%\bin顶到最前可以让系统优先使用你指定的JDK。3.4 配置完成后的验证方法完成上述配置后一定不能跳过验证这一步。重新打开一个CMD窗口注意是重新打开因为之前已经打开的命令行窗口不会自动刷新环境变量你直接输入命令还是会找不到java。依次执行以下三个命令java -version javac -version echo %JAVA_HOME%第一行输出类似java version 17.0.x就说明运行环境没问题。第二行输出javac 17.0.x则说明编译工具没问题。第三行用来确认JAVA_HOME被正确解析能看到D:\Java\jdk-17就对了。我见过不少人卡在第二步上java -version输出了正确的版本号但javac -version却提示“不是内部或外部命令”。这种情况百分之百是PATH里只配了JDK的bin目录或者配错了路径导致运行时环境被找到了但编译工具没被找到。还有一种是JDK版本较高时某些精简版安装包会提示你“找不到javac”那是因为安装时SKIP了开发工具的安装选项建议直接重装完整版JDK。4. 第一个Java程序的完整实现思路4.1 为什么第一步不要用IDEA很多人在配好环境之后就急着去下载IntelliJ IDEA这类集成开发环境试图在图形化窗口中运行第一个程序。说实话用IDE写代码很爽但我不建议零基础的人从头就用IDE。原因在于IDE把太多底层细节隐藏掉了。你点击一个绿色的运行按钮程序就跑起来了但你完全看不到编译和运行实际上是两个独立的步骤。一旦程序报错IDE弹出的那一大坨英文异常信息会让人不知所措。而在命令行下一切从头到尾都是透明的你执行javac HelloWorld.java会看到是否生成了HelloWorld.class文件执行java HelloWorld能看到程序输出的结果或正在报的错误。只有先把这条透明链路跑通你才对这个行业的基石有真实的掌控感。当然我并不是让你永远待在记事本里。等你理解了编译、运行、报错、排查这一整套流程是什么感觉之后再切换到IDEA你会发现它只是在推进这些环节更自动化而已底层的逻辑你心里已经有数了。4.2 用记事本手写一个HelloWorld在D:\Java\demo目录下新建一个文本文档命名为HelloWorld.java。注意文件名和里面的类名必须严格一致大小写敏感。我见过有人把文件名写成helloworld.java类名却写成HelloWorld编译时报“类HelloWorld是公共的应在名为HelloWorld.java的文件中声明”这种错误属于Java的硬性语法规定没有任何回旋余地。文件内容如下public class HelloWorld { public static void main(String[] args) { System.out.println(Hello, Java!); } }这段代码里第一行的public class HelloWorld声明了一个公共类这个类的名字要和文件名一致。第二行是Java的入口方法JVM启动时会从这里开始执行代码。这里的public static void main(String[] args)你暂时不需要完全理解每个词的含义但必须记住这行是“程序的入口”少了它JVM就会报“类中找不到main方法”。第三行的System.out.println是把括号里的内容原样输出到控制台从双引号这里开始你要特别注意必须使用英文半角双引号。如果没法记住代码也没关系前期练习阶段抄写几遍后面慢慢就会理解每个部分的作用。真正要用力记住的是两句话java源文件中的类名必须与文件名一致main方法是程序执行的入口。4.3 手动编译与运行亲历一遍完整流程文件保存之后打开命令行窗口切换到demo目录cd /d D:\Java\demo然后先执行编译命令javac HelloWorld.java这个命令不会输出任何内容如果它安安静静地返回了命令行提示符说明编译成功。这时你再去资源管理器里看会发现目录下多了一个HelloWorld.class文件。这就是Java程序员口中的“字节码文件”是Java跨平台本事的基础——你只需要把.class文件丢到任何安装了JVM的机器上它就能跑起来。如果编译报错先别急着改代码把错误信息念三遍。绝大多数新人报错都集中在分号、大小写和括号这两个问题上。我把常见的新手报错整理成了一张速查表放在文章后面你对照着排查就行。编译成功后再执行java HelloWorld注意运行指令后面不带.class后缀只写类名。你如果习惯性地写成java HelloWorld.classJVM会一本正经地告诉你“找不到或无法加载主类 HelloWorld.class”。这是Java入门阶段出现频率最高的一个低级错误我现在提一次希望你能少踩一次。运行后如果控制台输出Hello, Java!恭喜你你第一个亲手交付的Java程序跑通了。4.4 完整的“电风扇”思维模型为了帮你把刚才的多步操作刻进记忆里我建议你脑中建立这样一个模型写Java程序就像夏天制造风扇的过程你拿塑料、电机、扇叶做出一台完整的物理风扇这对应你看得见的代码文件然后“通电”配置好环境变量设备运转起来风扇吹出强风控制台输出的结果。javac这个编译器担任的角色就是把你的源码从人类可读的文本翻译成机器能懂的字节码指令类。java这个命令则担任启动器的角色把字节码拉进JVM里跑起来。环境变量在这里面就是“通电接口”如果你没有把JDK的bin目录加入PATH操作系统就不知道去哪给你找编译器和启动器整个风扇就无法运转。5. 常见报错与排查新手必走的弯路5.1 最典型的新手报错速查表我录过不少Java入门的小班课总结下来新手头两周遇到的报错九成都是以下几个这里直接整理成一个速查表报错内容含义原因解决方案javac不是内部或外部命令找不到编译器PATH没有配置或配置错误检查PATH是否包含%JAVA_HOME%\binjava不是内部或外部命令找不到运行环境同上同上错误: 找不到或无法加载主类 HelloWorld.class运行参数错误运行命令带了.class后缀改为java HelloWorld类HelloWorld是公共的应在名为HelloWorld.java的文件中声明文件名类名不匹配两者名称或大小写不一致统一文件名与类名程序缺少public static void main方法缺失入口代码拼写错误对照模板检查编码GBK的不可映射字符编码不兼容文件用了UTF-8Windows命令行默认GBK保存文件时选择ANSI编码或配置统一的控制台编码非法字符: \ufeff开头存在BOM头记事本保存为带BOM的UTF-8另存为不带BOM的UTF-8或用其他编辑器处理其中“错误: 找不到或无法加载主类”绝对是最容易让人崩溃的一条。它已经超越了语法错误是一个运行层面的问题新人几乎每天都会遇到。最常见的原因是你在运行指令时把自己给绕进去了一会儿写java HelloWorld.java一会儿写java HelloWorld.class甚至还有人把路径也一并贴在命令后面。这里你只需要记住铁律编译带后缀运行不带后缀。5.2 编码问题为什么你的注释全是乱码Java文件保存时的编码编码问题是默认新人必考的一道暗坑题。Windows系统的中文环境默认使用GBK编码而现代代码编辑器默认保存的是UTF-8编码。当你用记事本新建文件写代码并且保存时中文注释会以UTF-8格式写入文件。但Windows自带的奇妙之处在于它有时会在文件开头插入一个看不见的BOM标记运行或编译时这个隐藏字符就会变成“非法字符: ‘\ufeff’”的报错。处理这个问题最简单的办法是前期学习时把源码文件统一保存为ANSI编码。你在记事本的“文件”-“另存为”里把编码从UTF-8改成ANSI就避开了GBK和UTF-8的纷争。等你后面用上IDEA之后再统一走UTF-8不会再有这些烦恼。如果坚持用UTF-8来保存代码也可以但你需要把命令行窗口的代码页改成UTF-8。在CMD窗口执行chcp 65001就能把控制台代码页临时切到UTF-8。不过这个设置是临时性的关闭窗口后又回到GBK了对新手来说不如直接存档为ANSI省心。5.3 编译成功但运行报错的奇葩场景有一种情况编译时一切正常运行时报“找不到或无法加载主类”但类名确实没写错运行命令也不带后缀。这种场景让人抓狂我来说说它背后可能的原因。一个是当前目录问题。你的命令行当前工作目录不在HelloWorld.class所在目录JVM在默认的classpath里找不到这个类。你用dir命令查看一下当前目录下有没有这个class文件确认路径就行。另一个是classpath变量的影响。老版本Java教程可能让你配置过一个名为CLASSPATH的环境变量。这个变量如果配置不当反而会限制JVM查找类的范围。在JDK 9以后的版本中classpath默认设置已经足够合理了我建议就不要再去配置CLASSPATH这个环境变量了免得画蛇添足。还有一个容易忽略的点是文件名里藏了空格比如你新建的目录名叫做Java demo运行java HelloWorld时没有影响但编译或运行命令里出现了没有被正确转义的空格就可能瞬间把文件名拆成了两段。学习中尽量用不含空格的目录名和文件名能省掉太多无谓的排查时间。6. 从第一个程序到Java进阶之路6.1 理解JVM在后台做了什么当你第一个程序成功输出Hello, Java!时你应该趁热打铁先搞清楚JVM在这短短几秒里干了什么。JVM启动了类加载器把HelloWorld.class文件读入内存然后校验字节码是否符合Java规范接着分配内存给main方法中的局部变量ava最后调用执行引擎逐条执行机器指令把字符串输出到控制台。之所以要强调这一点是因为Java一直宣传“一次编写到处运行”的理念。你本机编译出的HelloWorld.class文件可以在任何装有对应版本JVM的机器上运行不需要重新编译。这一点和C、C有本质区别C语言编译后生成的是当前操作系统的专属可执行文件而Java编译后则是面向JVM的通用字节码。理解了这一层你再看网上讨论“Java跨平台为什么慢”之类的话题就不会人云亦云了。6.2 为什么建议你尽快换用IDEA用记事本学HelloWorld是刻意为之但不能一直停留在这种原始状态里。大概花上一到两天把编译运行链路跑熟之后就可以切换到IntelliJ IDEA社区版了社区版对个人免费功能足够你学完整个Java基础阶段。IDEA能帮你减少大量无意义的体力劳动。你不再需要每次手动创建文件、拼写包名IDE会根据工程结构自动生成合理的目录层级。代码书写过程中IDE会即时提示语法错误、补全方法名、自动引入包这比在命令行里一遍遍地编译排查效率高太多了。但有个前提你在记事本阶段必须真的理解了“编译”和“运行”是两回事。这样你用IDEA时点击那个绿色运行按钮才知道背后发生了哪些步骤遇到报错才不至于两眼一抹黑。6.3 首个程序之后的三个月学习路线跑通了HelloWorld意味着Java的大门向你敞开了一只脚。接下来学习顺序的安排依然重要我自己当年的路线是这样的可以作为参考第一个月主攻Java基础语法。变量、数据类型、运算符、流程控制、数组、方法这些构成了Java语言的地基学的时候一定要配合练习光看不写等于白学。第二个月转向面向对象编程。类与对象、封装继承多态、接口、异常处理这些概念是Java的立身之本也是后面所有框架的地基。面试时被问到八股文的很大一部分内容比如动态代理、反射、集合都在面向对象这条支线上长出来。第三个月开始了解常用工具和框架。集合框架、IO操作、JDBC、MySQL、Java Web基础然后逐步过渡到Sping Boot这样的主流框架。到这一步你的Java学习才算真正进入了应用层面。具体的深度可以根据你要从事的方向是后端开发还是大数据开发再做差异化安排。讲一个我很赞成的学习观点不要等基础100%掌握才进入下一个环节。Java的知识是无边界的所谓“掌握基础”就是你能徒手写好数组排序和类的继承同时理解了反射和泛型的核心思想就可以往前走了。如果你一直停留在抄代码、看视频的舒适区永远都在入门。6.4 个人经验新手阶段最值得养成的三个习惯最后分享三个我认为对入门最有帮助的习惯它们让我后面几年少加了很多班。第一多敲命令少依赖IDE一键运行。哪怕切换到IDEA之后我也会偶尔在终端手敲javac和java去感受底层工具的存在。这不是给自己找罪受而是为了保留排查问题的能力。如果哪天IDE抽风了、项目构建不上你能从命令行一步步定位问题。第二报错不可怕关键是学会读日志。新生报错时的第一反应是回头狂审代码但其实先读完异常信息的前三行几乎就能锁定问题。Java的报错信息写得相当直白它甚至会把错误出现的行号标注出来。学会定位“它在文件的第几行向左指向哪里报错”比反复盯代码目测靠谱得多。第三刻意练习手写代码。面试时手写冒泡排序之类的小算法几乎是所有Java岗位的保留项目这说明动手写代码的能力是硬通货。我建议每天在纸上或纯文本编辑器里写一段不查资料的代码比如对一个整型数组排序、计算字符串长度、反转链表这些经典小题目。这种训练练的是你对语法的主动记忆和逻辑打通的熟练度实力会在一个多月后明显拉开差距。跑通第一个Java程序只是入场券接下来的路还长但每跨过一个坎你能调度的能力就多一层。希望你折腾环境时多一些耐心跑通程序时多一些认真体会Java这条路值得你走下去。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价