ARTICLE DETAIL

资讯详情

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

Java零基础入门:IDEA运行HelloWorld与基础语法详解

Java零基础入门:IDEA运行HelloWorld与基础语法详解 这一篇是Java零基础入门系列笔记的第二篇。如果你从第一篇跟过来那该装的JDK和IntelliJ IDEA应该都已经躺好了如果你是直接搜到这篇笔记也没关系这套笔记的原则很简单不折腾环境先把代码跑起来术语后面慢慢补。所以第二篇我会聚焦两件事一是怎么在IDEA里把第一个Java程序顺利跑起来二是把Java基础语法里最常用的一批概念——变量、数据类型、运算符、流程控制——用最直白的方式讲透。除此之外我会把零基础阶段在IDEA里最容易碰到的几个坑单独拎出来帮你提前绕开。1. 第一个Java程序跑不起来的三个原因从HelloWorld开始排雷很多人学Java的第一步不是写代码而是“折腾半天写了个HelloWorld怎么就是跑不起来”。这一节把最常见的三个雷区挨个排掉顺便把IDEA运行Java程序的基本逻辑讲清楚。1.1 最小可运行代码长什么样先看这段代码这是全篇的基准public class HelloWorld { public static void main(String[] args) { System.out.println(Hello, Java!); } }在IDEA里你不需要手动用javac和java命令去编译运行全部交给IDE。但“IDE帮你干活”不等于“什么都不用管”。你要先明白一个最小结构外面用public class声明一个类类名要和文件名一致里面必须有一个main方法这是整个程序的入口。类名和文件名一致这条规则我特意放在第一条说。Java编译器是根据类名去找对应文件的你文件叫HelloWorld.java里面却写public class Hello编译阶段就直接报错。新手最容易犯这个错因为很多人是从记事本复制的代码文件名随手一敲。1.2 没有main方法点了运行却毫无反应另一种常见情况是代码没有报红但点了运行后控制台什么都没有或者弹出一个提示说找不到主类。原因通常是忘了写main方法或者把main写成了mian、Main这类变体。Java虚拟机启动程序时会去指定的类里找这样的方法签名public static void main(String[] args)少一个static都不行参数名args改成别的也可以但初学者最好别改。你要把这一行理解成“整个程序的电源开关”IDEA运行任何Java程序本质都是启动JVM并调用这个入口方法。开了项目却找不到入口自然跑不起来。1.3 正确的运行方式右键或者绿色三角在IDEA里运行一个带main方法的类最直观的方式是点击行号旁边的绿色三角或者在代码区右键选择Run HelloWorld.main()。如果你习惯键盘操作Windows/Linux下是Shift F10Mac是Control R。这里有个非常典型的小白问题代码没写错右键却只有Run HelloWorld没有main()字样。这通常意味着IDEA没把你的类识别成“可运行主类”十有八九是main方法签名写错了。建议对照1.2小节的准确写法检查一遍比反复重装IDEA管用得多。如果你发现点绿色三角跑的永远是一个旧程序可以在IDEA右上角的运行配置下拉框里看看是不是选中了别的类。这类“工具比代码先卡住”的问题和学习语法没关系但特别劝退新手。1.4 编译报错的红波浪线和cannot find symbolIDEA里代码下方出现红色波浪线属于编译期错误。最常见的两种是cannot find symbol和incompatible types。说白了就是类型或符号对不上比如你写System.out.println结果把println拼成了printIn大写IIDE立刻会标红。看到红色波浪线先别慌把鼠标移到上面IDEA会直接告诉你原因。大部分情况下这种错误不是“你不会Java”而是“手滑拼错了”。养成一个习惯写完代码先低头看一眼有没有红色下划线再点运行。这样能帮你省下一大堆无意义的报错时间。2. 在IDEA里先养成这几个操作习惯后面能少受很多罪工具顺手了语法学起来才有动力。这一节不是教你花式快捷键而是针对零基础最容易在IDEA里卡住的地方逐个给解决办法。这几个习惯早养成后面学面向对象、集合、IO时能省很多事。2.1 把IDEA界面换成中文别把时间耗在认按钮上如果你看到满屏英文菜单头疼可以直接安装官方中文语言包。打开Settings - Plugins在Marketplace里搜索Chinese找到Chinese Language Pack安装后重启即可。这个插件对新手很友好菜单、右键、提示都能变成中文不影响任何代码功能。我不主张“一定要用英文界面”尤其零基础阶段英语本来就有压力再把IDE菜单都变成第二门外语纯属给自己上强度。先把操作路径混熟等代码量上来之后再切英文界面对照着熟悉术语也不迟。2.2 三个高频操作比背快捷键表更实用第一Alt Enter。这是IDEA的万能修复键代码报红时可以调用提示也可以快速补充缺失的导入、生成局部变量、改名重构。遇到任何红色提示先试试按它很多时候它已经把解决方案给到你了。第二psvm和sout。在代码区输入这两个缩写再按回车IDEA会自动补全public static void main(String[] args)和System.out.println()。很多老手写Java也用这套模板不是为了炫技而是太熟了敲缩写比全写快得多。第三Shift F10运行当前程序。初学阶段所有代码都在一个类里折腾用这一个快捷键就够了不用每次去点鼠标找绿色三角。2.3 代码格式化快捷键失效不是软件坏了是快捷键被占了这是一个很经典的IDEA坑。你按Ctrl Alt L想整理代码格式结果毫无反应有的机器上反而弹出了“搜狗拼音简繁切换”之类的提示。这是典型的快捷键冲突这个组合键被输入法或其他软件占用了。解决方案分两步第一去输入法设置里关掉对应的全局快捷键第二如果不想动输入法就在IDEA里改KeymapSettings - Keymap搜索Reformat Code把它改成Ctrl Alt Shift L。从此再也不会按了没反应。类似的问题还有Alt 1打不开文件树、Ctrl Shift F10突然失灵排查思路都一样先想想是不是别的软件抢了快捷键再改IDEA的Keymap而不是重装软件。2.4 target目录“不存在”和内置HTTP服务起不来的问题很多初学者建Maven项目后会发现项目目录里找不到target目录但自己明明编译运行过。这不是你的项目坏了而是IDEA默认把target这类编译输出目录标记为“排除显示”功能上不显示但不影响编译结果。真想看的话在Project工具窗口右上角齿轮里勾选Show Excluded Files即可实际上里面装的就是编译产生的class文件和打包产物。另外有个报错偶尔会蹦出来Cannot start internal HTTP server多见于某些运行配置依赖IDEA内置服务时端口被占用或hosts文件异常。入门阶段你不需要深究如果某天弹出来先考虑关掉占用了本地端口的程序或者重启IDEA多数情况下能恢复正常。真有持续报错就去检查IDEA设置里的HTTP代理是否为“无代理”这一步对解决这类诡异问题很有效。3. 变量、数据类型与运算符Java基础语法的主干工具理顺了语法才是正菜。第二篇笔记不需要你一口气啃完整个Java语法先掌握“变量、数据类型、运算符”这三块就足够支撑后面学的流程控制和方法了。这一节我尽量少讲术语多给例子你看完就能在IDE里跑。3.1 变量先声明再使用Java是强类型语言变量必须先声明类型再使用。这句话初学者往往不理解。我用生活里的例子说明你放东西前得先准备一个盒子盒子上写明能装什么类型的东西鸡蛋盒不能用来装西瓜变量就是这个盒子。int age 18; // 整数类型用于年龄 double price 19.9; // 小数类型用于价格 String name 张三; // 字符串类型注意用双引号 boolean isOk true; // 布尔类型只有true或false char gender M; // 字符类型注意用单引号只能一个字符新手最容易在String和char的单双引号上翻车。char只能放一个字符String可以放一串字符。单引号写成双引号、或者给char塞了两个字符都会导致编译错误。3.2 基础数据类型速查表Java的基础数据类型一共有八种初学阶段你真正高频用到的主要是int、double、char、boolean其他用到时再查也不迟。类型位数取值范围/特点典型示例byte8-128 到 127byte b 100;short16-32768 到 32767short s 2000;int32约正负21亿int a 1000;long64很大需要加L后缀long big 10000000000L;float32小数需要加F后缀float f 3.14F;double64默认小数类型double d 3.14;char16单个字符char c A;boolean1true或falseboolean flag false;特别注意long和float这两个整数默认按int处理超出int范围就要加L小数默认按double处理想存成float必须加F。你要是不加后缀IDEA会直接报错“无法将int/double转换为long/float”。3.3 类型转换自动提升和强制转换的不同后果Java里类型转换分两种。第一种是自动类型转换从小范围转大范围编译器帮你完成比如int赋值给double没问题。第二种是强制类型转换从大范围转小范围会造成精度丢失int n (int) 3.99; // 结果是3小数直接丢掉 double price 10; // 自动转换结果是10.0初学者最容易踩的坑叫做“除法丢精度”int result 7 / 2; // 结果是3不是3.5两个整数相除结果仍然是整数。如果你想要小数结果至少要让其中一个操作数变成小数double result 7 / 2.0; // 3.5 double result2 (double) 7 / 2; // 3.5这种问题在真实开发里也很常见尤其是计算平均值、比例、金额时。两个int一除小数点后全没了数据就错了。以后只要在Java里做数学计算先想清楚结果有没有小数。3.4 运算符和、前置后置、字符串拼接运算符里最要命的不是加减乘除而是三个概念。第一是赋值才是判断相等。写if (age 18)在Java里直接编译不过因为age不是布尔类型。这个错靠直觉是找不出来的必须靠眼睛仔细看。第二n和n的区别。单独使用时没区别一旦混入表达式就有差异n是“先使用n再加1”n是“先加1再使用n”。int a 5; int b a; // b5a变成了6 int c a; // a先变成7c7初学阶段分不清没关系先记住不要在复杂表达式里混用自增除非你特别有把握。团队里很多人写代码被同事吐槽“有味道的代码”多半就是这种。第三字符串用拼接当数字和字符串混合相加时结果会变成字符串System.out.println(1 2 3); // 结果是33不是123 System.out.println(1 2 3); // 123因为开头就是字符串这里没有玄学规则就一条从左往右算一旦遇到字符串后面的数字全部变成字符串拼接。4. 流程控制让程序学会自己判断和循环如果没有流程控制程序只能从上到下一行行执行和复读机没区别。这一节学完你就能写出带逻辑的小程序了。我选了一个零基础最容易做出成就感的组合条件判断、循环、再加一个猜数字小游戏。4.1 if-else判断先分清“等号”再谈逻辑if语句的完整形态是这样的int score 78; if (score 90) { System.out.println(优秀); } else if (score 60) { System.out.println(及格); } else { System.out.println(不及格); }逻辑很好懂满足哪个条件就执行哪个分支都不满足就走else。但新手写if有三个常见问题。一是把写成这点前面提到过编译都过不去。二是字符串比较直接用这是个更隐蔽的坑。Java里比较字符串内容要用equalsString s hello; if (s hello) { } // 很可能不成立 if (s.equals(hello)) { } // 正确写法三是条件顺序写反把小范围放前面导致后面分支永远执行不到。比如先判断score 60再判断score 90那90分以上永远走“及格”分支。条件判断要从大范围往小范围排。4.2 switch适合处理“一个变量的多值匹配”如果你要判断星期几、月份、菜单编号这类场景if-else会写出一长串这时候switch更清晰int day 3; switch (day) { case 1: System.out.println(星期一); break; case 2: System.out.println(星期二); break; // 其他case省略 default: System.out.println(无效数字); }注意两个关键点。第一每个case末尾要加break否则会“穿透”到下一个case这是新手最容易踩的坑。第二从Java 7开始switch支持字符串所以你可以用switch直接判断String类型用来做简单的菜单选择很顺手。4.3 for循环和九九乘法表for循环是初学阶段用得最多的循环结构格式是for (初始化; 条件; 更新)。只看不练等于没学建议你亲手敲出这个九九乘法表for (int i 1; i 9; i) { for (int j 1; j i; j) { System.out.print(j x i (i * j) \t); } System.out.println(); }这个例子把很多关键点都串起来了外层循环控制行内层循环控制列字符串拼接生成输出\t是制表符用来对齐。写完跑一遍你会突然觉得“原来代码是真的能控制程序做事的”。写循环时我建议你养成一个习惯把循环变量命名成i、j没问题但对“什么时候跳出循环”要心里有数。i 9到底是还是直接决定循环次数数字题特别容易在这里翻车。4.4 while循环与猜数字小游戏while适合“不知道要循环多少次直到满足某个条件才停”的场景。最典型的入门实战就是猜数字游戏import java.util.Random; import java.util.Scanner; public class GuessNumber { public static void main(String[] args) { Random random new Random(); int target random.nextInt(100) 1; // 生成1~100的随机数 Scanner scanner new Scanner(System.in); int guess; System.out.println(我已经想好一个1~100的数字猜猜它是多少); while (true) { guess scanner.nextInt(); if (guess target) { System.out.println(太大了再猜一次); } else if (guess target) { System.out.println(太小了再猜一次); } else { System.out.println(恭喜你猜对了); break; } } scanner.close(); } }这个程序你尝试着不看答案手敲一遍收获会非常大。它把Random随机数、Scanner键盘输入、while循环、break跳出、if-else条件判断全部揉到了一起恰好是零基础第二阶段最该掌握的综合练习。Random和Scanner这两个类的使用方式你暂时不用深究先记住“用到就导入照着代码写”就行。等后面学到面向对象你再回头看会发现这就是“创建对象调用方法”的标准操作。4.5 break和continue一个管退出一个管跳过break的作用是直接终止整层循环于是猜数字游戏里猜对后立即跳出while。continue的作用是跳过本次循环的剩余代码直接进入下一次循环。举一个最简单的例子打印1到10之间不是3的倍数的数字。for (int i 1; i 10; i) { if (i % 3 0) { continue; } System.out.println(i); }i % 3 0就是“i能被3整除”的判断。用continue跳过这些数字剩下的正常打印。很多初学者在这里会混break是彻底不干了continue是这次算了下次照常。多写两遍就能分出区别。5. 第一次面对报错信息学会按套路排查零基础阶段最劝退人的不是复杂语法而是英文报错。很多人在报错面前的第一反应是“完了我不适合学编程”其实大部分报错只是代码的“体检报告”每一行都告诉你了问题在哪。这一节教你怎么读IDEA里的报错让报错帮你学Java而不是吓退你。5.1 编译错误和运行异常是两回事IDEA里你可能会遇到两类问题。第一类是编译错误代码下方直接划红色波浪线程序根本没法运行第二类是运行异常代码能编译但运行到某一行时程序意外终止Console窗口会出现一大段红色文字。两类问题的排查思路不同。编译错误靠IDEA的提示就能定位鼠标移到红波浪线上基本能看懂是什么问题大不了Alt Enter看看建议。运行异常则需要学会读异常栈这是重点。5.2 异常信息怎么读从第一行Exception往下看一段典型的运行异常长这样Exception in thread main java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5 at com.sange.Main.main(Main.java:6)新手看到一堆英文会慌其实只需要看三处地方。第一行是异常类型这里是ArrayIndexOutOfBoundsException翻译过来就是数组下标越界冒号后面是细节下标用了5但数组长度是5合法下标只能从0到4第二行告诉你出错的代码位置类Main的第6行。所以排查套路就一句话先看异常类型再看冒号后的描述最后点at后面的文件行号跳转到代码。大部分时候问题就出在你访问的那个变量上。5.3 入门阶段的高频异常速查异常类型含义常见原因修复方向NullPointerException空指针对一个null对象调方法/属性检查对象是否被正确new了ArrayIndexOutOfBoundsException数组下标越界访问了超出数组长度的下标检查循环条件和下标范围NumberFormatException数字格式异常把非数字字符串转成了数字检查输入内容是否为数字InputMismatchException输入不匹配Scanner用nextInt()读到了字母先校验输入再转换ArithmeticException算术异常整数除以0除数先判0再参与运算以NullPointerException为例初学者最容易犯的错是定义了一个变量但没初始化然后就直接调用它的方法。比如String s null; s.length();一运行立刻报空指针。看到这个异常第一反应不是“完蛋了”而是问自己哪个对象还没被赋值。修复方式就是在调用前给它赋一个有效的对象。ArithmeticException最经典的触发原因是除数为0。比如你写int a 10 / 0;编译不会报错运行立刻炸。这种错误用现实类比就是“让机器去算一个除以零的式子”数学上没意义程序自然跑不下去。5.4 用Debug代替println逐步看清程序执行过程很多新手排查逻辑问题时习惯在代码里到处加System.out.println打印变量。这方法有效但效率低。IDEA自带的Debug功能其实才是你该早点学会的利器。用法很简单在代码行号后面点一下出现一个红点就叫断点然后不要点运行按钮点旁边那个像甲虫一样的Debug按钮运行程序程序执行到断点会停下来你按F8让程序逐行执行同时观察变量面板里每个变量的变化。这一招对理解循环尤其有用。比如九九乘法表你可以把断点设在System.out.print那一行然后一行行看i和j怎么变化比看十篇讲解都直观。Debug不是后期才学的技能从第二篇笔记开始养成习惯后面所有代码排查都会轻松很多。5.5 IDEA里的几个“看似吓人其实不用慌”的提示除了代码报错IDEA本身还会弹一些提示比如“Project SDK is not defined”意思是项目还没配置JDK第一篇文章应该处理过如果出现检查File - Project Structure - Project SDK是否选到了你安装的JDK版本。还有一个常见提示是“Unused declaration”这只是在提醒你某个变量或方法声明了但没用过不是错误。在语法上完全合法等以后代码规范熟悉了再清理也不迟。总之任何提示出现时先把提示的完整文字复制到搜索引擎里搜一下比凭着感觉乱猜高效得多。结尾第二篇笔记之后你需要完成的“通关任务”这套笔记的进度设计是按周来的。第二篇笔记学完之后我给你的实操目标是能不看答案默写HelloWorld会独立运行一个带main方法的类手敲出九九乘法表独立完成猜数字小游戏遇到报错时能自己从异常信息里定位到出错的那一行。我在带新人的过程中有一个体会多数人学Java坚持不下去不是因为语法难度而是“工具不顺手”和“读不懂报错”这两件事把热情消磨没了。你可以把IDEA当成一个会说话的老师它用红色提示告诉你哪里错了用异常信息告诉你错在什么方向关键是你得愿意去读它而不是一看到英文就关掉重启。关于练习频率我的建议是每天拿20到30分钟敲一遍已经学过的代码不复制粘贴一句一句打。打得多了psvm、sout这些模板的肌肉记忆自然形成下一篇文章进入方法、数组、面向对象之后你就不会一边学新概念一边还得反复查旧语法了。先把这篇笔记里的内容和IDE运行逻辑完全吃透我们再进入第三篇。
返回列表