首页 / 资讯中心 / 文章详情

Java学习第一天:搭建JDK环境、理解JVM与运行Hello World

Java学习第一天:搭建JDK环境、理解JVM与运行Hello World ★ FEATURED ARTICLE
今天算是正式踏上Java学习路线的第一天。说实话定下这个方向之前我在各种语言之间徘徊了很久最后决定把Java作为主攻目标。既然决定认真学我就想用一种能坚持下来的方式记录整个过程所以从第一天开始我会把每天学到的核心知识点、做的练习、踩过的坑全部整理成文既给自己留一份复习资料也能给同样零基础起步的朋友当参考。这篇记录面向的读者大概是这么几类人完全没写过代码、想从零开始学Java的新手有其他语言基础、想快速了解Java特点的转行者已经在学Java但想把基础打得更扎实的同学。不管是哪种情况只要你跟着把第一天的内容过一遍跑通一个Java程序理解变量、数据类型、运算符和流程控制这些地基概念就算入门了。很多人觉得入门难其实难的不是语法而是不知道每天该学什么、学到什么程度算合格。我给自己定的标准很简单每天学完能用自己的话讲清楚当天内容能独立写完当天练习就算达标。后面所有安排都围绕这个标准来。1. 为什么学Java先想明白再动手1.1 Java能做什么为什么值得投入时间我在选语言的时候问过自己一个问题学完它能干什么Java的答案很直接——后端服务、大数据框架、Android应用、企业内部系统这些场景里Java的占有率都很高。哪怕这几年新语言层出不穷Java在大型项目的地位依然稳固原因就是生态成熟、社区庞大、岗位需求量稳定。还有一个现实原因Java的学习资料极其丰富遇到问题基本都能搜到答案。对新手来说资料多意味着试错成本低。我见过不少人一上来就学热门新语言结果遇到问题连排查思路都找不到反而打击信心。Java不太会有这种窘境你踩过的坑大概率别人早就踩过并且留下了解决方案。当然选Java不等于一辈子只写Java。编程思想是相通的把Java的面向对象、集合、异常处理这些学扎实了以后再学其他语言会轻松很多。这也是我把Java当初学语言的原因——它的语法规矩约束多反而能让新手养成好习惯。1.2 第一天的目标拆解不贪多只求跑通我给自己第一天的目标定得很克制就四件事装好JDK理解JVM、JRE、JDK三者的关系选一个顺手的IDE新建并运行第一个Java项目写一个Hello World程序理解类、方法、入口这些基础概念学会变量声明、数据类型、运算符、简单的流程控制为什么不安排更多因为环境搭建和第一个程序往往是劝退重灾区。大部分新手第一天就放弃不是Java难而是卡在环境配置上或者写了一堆代码却不知道为什么能跑、为什么报错。所以第一天宁愿慢一点也要把代码从编写到运行这条链路彻底搞明白。还有一个容易被忽略的点第一天就要养成看官方文档的习惯。很多人遇到问题第一反应是搜中文博客不是不行但官方文档的准确性和更新速度是任何二手资料比不了的。哪怕英文看着累也要学会用翻译工具辅助阅读这是后面长期学习的基本功。1.3 学习工具准备笔记、搜索、代码练习正式开始之前我把学习工具也准备好了。笔记我用的是普通的Markdown编辑器目录按日期和主题分类每天的记录包括今日目标、知识点整理、代码示例、遇到的问题、明日计划。格式不统一没关系重点是坚持记录。搜索资料我给自己定了一个优先级官方文档优先Stack Overflow和社区帖子其次最后才是各种博客。查问题的时候不要只复制答案要看一下报错信息的完整含义弄清楚是哪一层的错误。代码练习我准备了一个独立的文件夹每天新建一个子目录按日期命名。所有当天写过的例子都保存下来哪怕写错了也要留着后面复习的时候能对照自己当时的思路。2. 搭建Java开发环境JDK与IDE2.1 JDK、JRE、JVM到底是什么关系第一次接触Java的人一定会被三个缩写搞晕JDK、JRE、JVM。我用人话解释一下。JVM是Java虚拟机负责把编译后的字节码翻译成当前操作系统能执行的指令。Java号称一次编写到处运行靠的就是JVM——不同平台装对应的JVM同一份字节码就能跑。JRE是Java运行时环境包含了JVM和Java核心类库如果你只是在别人的电脑上运行Java程序装JRE就够了。JDK是Java开发工具包包含了JRE的全部内容还额外提供了编译器、调试工具等开发必需的东西。所以你要写Java代码就得装JDK。这三者的关系用生活类比来说JVM是发动机JRE是带油箱和管路的整车JDK是整车加一整套维修工具和说明书。新手不用纠结太多记住一句话开发装JDK运行有JRE跨平台靠JVM。版本选择上我建议直接用LTS长期支持版本不要追新。我用的是主流的LTS版本稳定、资料多、大部分教程和框架都兼容。安装的时候要注意别装在了带中文或空格的路径下后面排查问题会少很多麻烦。2.2 安装JDK和配置环境变量的完整过程我先说Windows电脑的流程因为我就是在这套环境上操作的。第一步是去官网下载对应操作系统的JDK安装包下载之后直接运行安装程序一路下一步就好。安装目录我改到了D盘纯粹是个人习惯把开发工具和数据分开。装完JDK最重要的一步是配置环境变量。简单说环境变量就是告诉操作系统你去哪找java这个命令。具体操作打开系统属性找到高级系统设置点击环境变量在系统变量里新建一个名为JAVA_HOME的变量变量值填JDK的安装路径。然后在Path变量后面追加%JAVA_HOME%\bin。配置完不要急着高兴一定要打开命令行窗口验证。按WinR输入cmd在命令行里敲java -version如果看到版本信息说明Java命令已经生效。我建议再敲一个javac -version如果javac也能显示版本说明编译工具也没问题。如果提示找不到命令先检查环境变量有没有写错再确认是不是没有重新打开命令行窗口。macOS和Linux用户就简单一些了可以用包管理器安装也可以手动下载解压后配置PATH。我自己的经验是不管什么系统装完一定要做版本验证这一步因为很多后续的问题都源于环境没配好。2.3 IDE怎么选新手友好比功能强大更重要IDE就是写代码的编辑器我试过几个主流的选择。IntelliJ IDEA的社区版对新手非常友好代码提示智能创建项目方便调试工具直观我用它作为主力工具。如果电脑配置一般也可以用Eclipse或者VS Code加Java插件功能上完全够用。我的建议是别在IDE上花太多时间纠结选一个下载量最大的装好就能用。IDE只是工具真正重要的还是语言本身。新手最容易犯的毛病是花一整晚折腾IDE主题、插件、快捷键却一行Java代码都没写过这就本末倒置了。装好IDE之后第一次打开可能会要求配置JDK路径选择刚才设置的JAVA_HOME就行。然后新建一个项目选Java模块一路默认IDE会自动帮你生成项目结构。这时候你不需要理解那些文件夹是干嘛的只需要知道源代码放在src目录下IDE会自动处理编译和运行的事。2.4 跑起第一个Java项目的完整过程在IDE里新建一个类类名我建议就叫Hello这涉及到Java的一个规则如果类是public的类名必须和文件名一致所以类名最好不要用中文也不要用数字开头。我见过不少新手在这个规则上栽跟头。写代码之前先看一眼项目结构IDE会自动创建一个src目录这就是源码目录。右键点击src目录选择新建Java类输入类名IDE会生成一个空的类框架然后我们在里面补上main方法。main方法就是程序的入口JVM运行程序时从main方法的第一行开始执行。写完代码之后点击运行按钮IDE会在下方控制台输出结果。这时候你第一反应应该是程序里面发生了什么为什么控制台会打印出这句话带着这个问题去看下一节你会理解得更深。3. 第一个Java程序逐行理解它在做什么3.1 从Hello World看Java程序的基本结构我先给出第一段完整代码然后逐行拆解public class Hello { public static void main(String[] args) { System.out.println(Hello Java!); } }先看第一行public class Hello。public是访问修饰符表示这个类是公开的class是关键字用来声明一个类Hello是类名。Java要求类名和文件名保持一致所以保存的文件名必须是Hello.java。再看main方法这一行public static void main(String[] args)。这里面的public表示方法可以被外部访问static表示这个方法是静态的不需要创建对象就能调用。void表示方法没有返回值main是方法名String[] args是参数列表表示可以接收命令行传来的字符串数组。这个签名是Java规定的程序入口格式初学者不用深究为什么先记住这个写法就可以。最后一行是System.out.println它就是我们要记住的第一个指令。System是Java提供的系统类out是标准输出流对象println是打印一行文本的方法。括号里的内容是参数我们要输出的文本就是Hello Java!字符串必须用双引号括起来行尾的分号是语句结束符。3.2 编译和运行Java程序执行的三个环节理解Java程序执行过程要从三个环节说起。第一个环节是编写源码也就是刚才我们写的.java文件。这个文件是给人看的计算机看不懂。第二个环节是编译JDK里的javac编译器会把.java文件翻译成.class字节码文件这个文件是给JVM看的。第三个环节是运行JVM加载.class字节码文件把它解释成当前操作系统能执行的指令最终把结果输出到屏幕。有人问我Java为什么要经过中间这一步编译而不是像某些脚本语言那样直接执行因为多出这一步Java程序才能跨平台。编译出来的字节码与具体操作系统无关只要目标机器装有对应的JVM就能运行同一份字节码。这就好比把中文说明书先翻译成国际通用的数学符号哪个国家的人拿到都能理解。我们在IDE里点运行按钮IDE实际上自动帮我们执行了编译和运行两个步骤。如果想知道底层发生了什么可以去命令行手动操作一次在源码目录下执行javac Hello.java会生成一个Hello.class文件再执行java Hello注意这里不带.class后缀程序就运行了。3.3 自己动手改代码从输出到计算跑通HelloWorld之后我给自己加了一个小练习改代码让它做一点简单的计算。比如我想打印两数之和可以这样写public class Hello { public static void main(String[] args) { int a 10; int b 5; System.out.println(结果是 (a b)); } }这里出现了一个新的东西int a 10这就是变量声明。int是整数类型a是变量名10是初始值。System.out.println里面用了加号把字符串和计算结果连接起来Java会自动把数字转成字符串输出。这个练习看起来简单但意义很大它让我第一次体会到编程就是告诉计算机做什么。代码不是背下来的是写出来运行看效果错了再改。第一天就要养成动手改代码的习惯只抄不改的学习方式效率很低。4. 核心语法基础变量、数据类型、运算符、流程控制4.1 Java里的数据类型为什么分为基本类型和引用类型Java是一种强类型语言意思就是任何变量在使用之前必须先声明它的类型而且类型不能随意改变。这和弱类型语言有很大区别一开始会觉得啰嗦但习惯了会发现强类型能减少很多低级错误。Java的数据类型分两大类基本类型和引用类型。基本类型有八种分别是整型的byte、short、int、long浮点型的float、double字符型的char布尔型的boolean。引用类型则包括类、接口、数组我们经常用到的String就是一个类所以它是引用类型。很多新手搞不清int和Integer的区别其实前者是基本类型后者是包装类。我建议第一天先掌握基本类型就好知道怎么声明、怎么赋值、取值范围大概是多少。至于包装类和自动装箱机制后面学到集合的时候再深入理解也不迟。写代码的时候有一个小细节值得注意long类型的字面量要加L后缀float类型要加F后缀不然编译器可能报错或者精度丢失。double是最常用的浮点类型默认小数就是double类型所以float f 3.14;会编译错误必须写成float f 3.14F;。4.2 变量声明和类型转换最容易踩坑的部分声明变量这件事看起来简单但类型转换真的是新手重灾区。我给大家看一个我练习时写的例子int a 10; long b a; // 没问题小的往大的转 double c a; // 没问题整数转小数 int d (int) c; // 这里必须强转因为小数转整数可能丢失精度自动类型转换的规则是小的类型可以自动转成大的类型比如int转long、double。反过来大的类型转小的类型必须强制转换也就是在变量前面加上目标类型的小括号比如(int) c。强制转换有可能丢失数据比如double转int会把小数部分直接砍掉不是四舍五入。还有一个小陷阱整数相除的结果还是整数。比如int result 7 / 2;结果是3不是3.5。这是因为两个int型数据相除时Java直接做了整数除法余数丢弃。想得到小数结果必须让其中一个操作数变成浮点数比如7 / 2.0或者用(double) 7 / 2。4.3 字符串拼接和运算符让程序会说话字符串是Java里最常用的类型之一我说的不是基本类型而是引用类型String。第一天不需要深究它的内部结构但一定要熟练使用字符串拼接。用加号就能把字符串和其他类型的数据连接起来比如年龄 25Java会自动把数字转成字符串接在后面。比较运算符和逻辑运算符也是当天一定要掌握的。比较运算符包括、!、、、、它们的结果都是boolean类型要么是true要么是false。逻辑运算符有三个表示并且||表示或者!表示取反。写条件判断的时候逻辑运算符非常常用。赋值运算符不要只看表面a 5和a a 5在大多数情况下等价但前者的写法更简洁而且在某些隐式类型转换的情境下两者会有细微差别。新手可以先记住等价关系后面循环结构里用i和i的时候再单独搞清楚前后置加加的区别。4.4 流程控制让程序学会判断和重复程序光能按顺序执行还不够得能根据条件做出不同反应这就是分支结构。Java里最常见的分支是if-else。我写了一个练习int score 85; if (score 90) { System.out.println(优秀); } else if (score 80) { System.out.println(良好); } else { System.out.println(继续加油); }条件判断从上往下执行只要某一个条件为真就执行对应的代码块执行完就跳过整个if结构。这里有个容易出错的点条件顺序不能乱如果先判断score 80那么85分就会先被这个条件拦住不会走到90分那个分支。写条件的时候一定要想清楚逻辑顺序把范围更窄的条件放在前面。循环结构也是必须掌握的。for循环是最常用的我写了一个输出1到5的例子for (int i 1; i 5; i) { System.out.println(i); }这段代码的执行逻辑是先执行初始化语句int i 1然后判断i 5是否成立成立就执行循环体执行完执行迭代语句i再判断……循环直到条件不成立才结束。理解这个执行顺序特别重要因为很多逻辑错误就出在循环条件写错上。还有一个while循环它更适合不确定循环次数、只知道循环条件的情况。第一天能把for循环用熟练就足够了while和do-while后面积累更多练习时再深入。4.5 第一天的编程练习从模仿到独立写光看不练等于没学。我给自己安排了三个小练习难度递进这里分享给同样在第一天的人。第一个是输出个人信息要求定义几个变量保存姓名、年龄、身高然后用字符串拼接打印出来。这个练习考察的是变量声明和输出语句的熟练度。第二个是温度转换给定一个摄氏温度算出对应的华氏温度。公式是华氏 摄氏 × 9 / 5 32写代码的时候要注意整数除法的问题如果全部用int计算会出错建议用double类型。第三个是判断一个数是偶数还是奇数用取模运算符%n % 2 0就是偶数。写这个练习时注意和的区别是比较是赋值我第一天就写错过编译器也报错了这其实是个很好的教训。练习的时候我给自己规定每写完一段代码先自己预测输出结果再运行确认。如果结果和预测不一致就说明对代码执行过程的理解有误这时候就要回头仔细看逻辑而不是直接改代码碰运气。这个方法对建立编程思维特别有效。5. 第一天常见问题与排查把报错当朋友5.1 编译错误的常见类型和处理方法第一天的报错基本集中在编译阶段因为还没怎么接触运行期异常。最常见的错误是javac找不到文件、类名和文件名不一致、括号或分号不匹配、中文标点符号混入代码。public class后面的类名必须和文件名一致如果类名是Hello文件名就必须是Hello.java。这个规则在IDE里不是很明显因为IDE通常会自动同步但在命令行手动编译时会直接报错。我建议新手至少手动编译一次把这条规则刻在脑子里。中文标点的问题要特别提醒很多新手在中文输入法状态下打出全角的分号和括号编译器会报出各种看不懂的错。处理办法很简单写代码时把输入法切换到英文模式或者干脆关掉中文输入法。我第一天就因为这个浪费了十几分钟。括号不匹配也是一大常见问题特别是嵌套的括号多了之后很容易少写一个右括号。IDE的代码编辑器一般会用颜色配对括号鼠标点到某个括号时匹配的另一个括号会高亮。用这个功能可以快速定位括号问题。5.2 运行时的空指针和数组越界先知道有这么回事第一天写的基础代码很少遇到运行时错误但有两个概念我建议提前知道因为它们太常见了。第一个是空指针异常英文是NullPointerException指的是访问了一个没有指向任何对象的引用变量。第二个是数组越界异常英文是ArrayIndexOutOfBoundsException指的是访问了数组中不存在的下标。第一次看到这些英文报错不要慌直接看最后一行Exception前面的单词那就是异常类型。然后把堆栈信息里最上面at开头的行找出来那会告诉你出错的位置。这个排查方法从现在到以后都很管用。我把系统输出打印作为最朴素的调试方式在关键节点打印变量的值看程序走到哪一步出了问题。IDE里还有更高级的断点调试功能但第一天的代码量还用不上先把打印调试用熟练就够了。5.3 环境相关的玄学问题重启大法真的有用环境配置经常会遇到一些让人抓狂的问题明明按照教程配好了环境变量命令行还是提示找不到java命令IDE能运行程序命令行却不行版本号很奇怪跟刚装的对不上。遇到这类问题我的排查顺序是先确认安装路径里确实有bin目录和java.exe然后检查JAVA_HOME的路径是否正确注意有没有多一个反斜杠或空格再看Path里追加的是%JAVA_HOME%\bin还是写死了绝对路径最后一定要重新打开命令行窗口再验证。还有一个很多教程不会提的点如果同时装了多个JDK版本环境变量只指向其中一个系统可能会自动选择另一个。这时候需要手动清理多余版本或者在配置里特意指定。我就遇到过这种情况查了半天才发现系统里残留了旧版JDK。如果以上都检查过还不行那就保存好当前配置卸载重装JDK然后重启电脑。重启大法在环境问题上确实有效因为很多环境变量是在系统启动时加载的重启能让新配置彻底生效。5.4 如何高效搜索和提问程序员的基本功学编程越往后越会遇到网上搜不到的问题但第一天遇到的错误几乎100%都能搜到现成答案。关键在于你会不会搜。我总结了一个搜报错信息的模板复制完整的错误信息去掉其中的具体路径和变量名然后加上Java关键词搜索。比如报错Exception in thread main java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5去掉Index 5和ArrayIndexOutOfBoundsException的具体参数搜java.lang.ArrayIndexOutOfBoundsException就能找到大量解释。如果搜了还是不懂就去社区提问。提问的时候要说清楚四件事做了什么操作、用了什么版本、完整报错信息、期望结果是什么。很多新手提问只说一句我的程序报错了别人想帮忙都无从下手。把问题描述清楚本身也是梳理思路的过程有时候描述着描述着自己就发现问题了。6. 第一天总结与后续学习路线6.1 今天学完应该掌握的东西我在第一天的笔记里列了一个复盘清单用来检验自己是不是真的消化了当天的内容。这张清单我现在也分享出来大家可以对着自测。第一能解释JDK、JRE、JVM的区别知道为什么要装JDK而不是只装JRE。第二能在命令行手动完成Java程序的编译和运行亲手执行过javac和java命令。第三能说出Java八种基本类型的名字能区分基本类型和引用类型。第四能独立写出包含变量、运算、if判断、for循环的小程序。第五遇到编译错误时能根据报错信息定位到具体代码行。这五条都做到了第一天才算真正达标。如果哪一条还不熟练不用急着学新内容回头把对应的部分再练习一遍。基础不牢后面学集合和面向对象会相当痛苦。6.2 明天的学习预告进入面向对象的世界第一天的内容全部属于Java语法的基础部分从第二天开始就要进入Java最核心的面向对象思想了。我给自己列了第二天的大致计划理解类和对象的关系、掌握方法定义和调用、学习构造方法的作用、了解封装概念。这些都是理解Java程序设计思想的基石。有人觉得面向对象抽象难懂我的应对办法是先把类和对象的代码写熟再去理解背后的设计思想。比如写一个Student类定义属性和方法然后创建几个Student对象分别给它们不同的属性值。代码写多了自然就能体会到面向对象是把数据和操作数据的方法打包在一起。学习路线不能一口吃成胖子我给自己的安排是第一周专注语法基础第二周进入面向对象第三周开始学习集合和常用类第四周接触异常处理和文件操作。这个节奏不强求每个人都一样但按周设定阶段性目标能有效避免漫无目的地刷视频。今天写这篇记录的时候我心里其实比以前自学的时候踏实很多。因为目标清晰了每一步都知道在学什么、为什么学。Java这条学习路线注定不会短但第一天能顺利地把环境跑通、弄懂程序运行原理、迈出动手写代码的第一步已经是个好开头。之后每一天的坚持都会让今天的这个决定变得更加值得。最后分享一个小小的实操习惯每天学完关上教程把当天最重要的代码不看书重新写一遍。能写出来才算真正学会。明天见。
阅读完成 · 觉得有帮助?
咨询建站