news 2026/9/9 7:16:58

Java新手入门指南:从JDK环境配置到IDEA运行第一个程序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java新手入门指南:从JDK环境配置到IDEA运行第一个程序

1. 为什么那么多初学者卡在“还没开始写代码”这一步

先说一个我观察了很久的现象:很多Java零基础的人,不是被语法难住的,而是被“环境准备”劝退的。Java语法再复杂,也就是几个关键字、几种结构的事,真正让人崩溃的是——JDK装好了但javac不是内部或外部命令、IDEA装好了但新建项目找不到JDK、代码写完一运行报一串ClassNotFoundException。这些坑,每一个我都踩过,每一个都有办法避开。

这篇内容适合谁看?适合完全没接触过Java、想用IDEA写第一个程序的人,也适合那种“装过好几次环境但每次换电脑都要重新折腾一遍”的人。我会把从JDK下载、环境变量配置、IDEA安装到新建项目、运行调试的完整链路讲清楚,并且把那些文档里不会写、但实际中一定会遇到的坑提前告诉你。

先纠正一个最普遍的认知偏差:安装JDK不等于配置好Java环境。JDK是Java开发工具包,它里面确实带了编译器和运行环境,但你的操作系统(Windows也好,macOS也好)并不知道这个工具包放在哪里。环境变量就是告诉操作系统“JDK在这,你去这里找javac和java”。很多人卡在这一步,不是没装JDK,而是环境变量配错了,或者配完了没生效。

还有一个容易被忽略的点:JDK版本的选择。现在Oracle JDK和OpenJDK都能用,版本上8、11、17、21这些LTS(长期支持)版本都有人用。我的建议很直接——不要纠结,直接用最新的LTS版本。因为Java 8虽然经典,但新项目已经很少用了;而Java 17和21不仅性能更好,很多新语法特性(比如switch表达式、文本块、record)能让你写代码舒服很多。学习阶段用新版本,知识不会那么快过时。

再说IDEA的选择。IntelliJ IDEA有社区版(Community)和旗舰版(Ultimate)两个版本,很多人一上来就去找破解版或者激活码,这完全没有必要。社区版免费、开源、支持Java开发的所有核心功能,学习和做普通项目完全够用。破解激活这种事,一方面不稳定,另一方面也没必要——毕竟你是来学Java的,不是来学破解的。

接下来我把完整流程一步步拆开,每一步都说明“为什么这么做”,而不是只告诉你“点这里点那里”。

2. JDK下载安装与环境变量配置:把最劝退的一步彻底讲透

2.1 下载JDK时的一个细节:架构和安装包类型

去Oracle官网或者Adoptium(也就是Eclipse Adoptium项目,提供OpenJDK构建版)下载JDK时,你会看到一堆选项。这里有两个容易选错的地方。

第一个是操作系统架构。现在绝大多数电脑都是64位系统,选择x64或者amd64的安装包就行。怎么确认你的系统是不是64位?Windows下右键“此电脑”选“属性”就能看到系统类型。arm架构的Mac电脑,也就是M1、M2、M3芯片的,需要下载macOS的aarch64版本,这个要特别注意,下载错了安装时会报“无法安装”或者运行时出现奇怪的问题。

第二个是安装包类型。Windows下会有.exe安装版和.zip压缩版。这里我建议新手用.exe安装版,因为它会自动帮你把Java的注册表信息写进去,后面配环境变量省不少事。.zip解压版适合喜欢手动控制一切的高级用户,新手没必要折腾。

安装过程中有个细节:安装路径不要带空格和中文。我见过有人把JDK装到C:\Program Files\Java\jdk-17,这个路径本身没问题,因为Program Files之间确实有空格,但有些老工具在处理带空格的路径时会出幺蛾子。我的习惯是建一个简单的路径,比如D:\Java\jdk-17C:\Java\jdk-17,干净利落。注意,安装路径要记住,后面配环境变量要用

2.2 环境变量配置的三个关键变量:JAVA_HOME、Path、CLASSPATH

配置环境变量是新手觉得最难、但其实最有规律可循的一步。先理解一个原则:环境变量就是给操作系统看的“路标”

  • JAVA_HOME:告诉系统JDK装在哪。它是你自己新建的一个变量,值就是JDK的安装路径,比如D:\Java\jdk-17
  • Path:系统原本就有的变量,你要在它后面追加%JAVA_HOME%\binbin目录里放着javac(编译器)和java(运行器)这些可执行文件。这样做的意义是:无论你在哪个目录下打开命令行,输入javac或java,系统都能找到对应的程序。为什么用%JAVA_HOME%\bin而不是直接写D:\Java\jdk-17\bin?因为以后如果你升级JDK版本,只需要改JAVA_HOME这一个变量,Path里的内容不用动。这是很多老程序员推荐的做法,本质上是把“变化的部分”单独拎出来管理。
  • CLASSPATH:这个变量现在其实已经不需要手动配置了。Java 5之后,JVM会默认在当前目录和JDK的lib目录下查找类文件。我特意提这个是因为网上大量教程还在让人配CLASSPATH,配了不仅没用,有时候还会干扰程序运行。如果你是新手,直接跳过CLASSPATH,这一点非常重要。

具体操作步骤,Windows系统是这样的:

  1. 按下Win + R,输入sysdm.cpl回车,打开系统属性。
  2. 切换到“高级”选项卡,点击“环境变量”。
  3. 在“系统变量”区域,点击“新建”,变量名填JAVA_HOME,变量值填你的JDK安装路径(比如D:\Java\jdk-17),确定。
  4. 在“系统变量”里找到Path,选中它,点“编辑”,在打开的编辑窗口里点“新建”,输入%JAVA_HOME%\bin,确定。注意是追加,不要把原来的内容删掉。
  5. 所有窗口点“确定”关闭。

配完之后怎么验证?关键一步:必须重新打开一个命令行窗口,因为环境变量的修改只会对之后启动的程序生效。打开命令行(Win + R输入cmd回车),输入java -version,如果看到版本信息,说明Java运行环境好了;再输入javac -version,如果也能正常输出版本,说明编译环境也好了。这两个命令都返回正常,才算环境配好。

如果输入javac提示“不是内部或外部命令”,但java -version正常,通常是Path里的%JAVA_HOME%\bin没配好,或者配完没开新窗口。检查一下这两点,90%的问题都能解决。

2.3 验证环境时容易被忽略的两个命令

很多教程只让你验证java -version,我建议同时验证javac -version。这两者的区别是什么?java运行的是已经编译好的字节码文件,而javac负责把.java源码编译成.class字节码文件。如果你没有写代码的能力,java能跑起来,但javac不行。所以这俩都要验证。

另外有个小技巧:配置完环境变量后,可以用echo %JAVA_HOME%来确认JAVA_HOME有没有被正确读到。如果输出的是%JAVA_HOME%本身而不是路径,说明变量没设置成功;如果输出的是路径,说明没问题。这个命令能帮你快速诊断问题出在变量定义还是Path配置上。

3. IDEA安装与首次启动配置:社区版、项目的概念、字体与主题

3.1 去官网下载社区版,别碰破解版

IDEA的官方网站是jetbrains.com,进入后找到“Developer Tools”里的“IntelliJ IDEA”页面,就能看到Community(社区版)和Ultimate(旗舰版)的下载按钮。社区版直接点Download,下载下来的是一个.exe安装包(Windows)或者.dmg(macOS)。

安装过程基本一路Next,但有几个选项要注意:

  • “Create Desktop Shortcut”建议勾上,后面用起来方便。
  • “Update PATH variable (restart needed)”这里,建议选“IDEA”,这样以后在命令行里可以直接用idea命令打开项目。
  • “Download and install JRE by JetBrains”这个选项,如果你已经装了JDK,可以不勾,但勾了也没坏处,它会装一个独立的JRE,不冲突。

安装完成后第一次启动,会有一个“Import Settings”的界面,里面内容可以忽略,直接选“Do not import settings”点OK,然后进入欢迎界面。

3.2 首次启动必须做的三个设置

进入IDEA后,我先建议做三个基础设置,不做的话后面写代码会很难受。

第一个是Maven的配置(虽然这是后面学依赖管理的事,但IDEA首次启动就会问你):

打开File -> Settings(macOS是IDEA -> Preferences),搜索“Maven”,把“Maven home path”指向你自己下载的Maven目录,或者先用IDEA自带的Maven也可以。重点是设置“User settings file”和“Local repository”,把本地仓库配置到一个非C盘的位置。原因很现实:Maven会下载大量jar包到本地仓库,默认位置在C盘用户目录下,时间长了C盘会爆掉。我的习惯是建一个D:\MavenRepository目录作为本地仓库,干净好找。

第二个是字体和主题:

在Settings里搜索“Font”,把编辑器字体调大一点,推荐14或16号。我用的是“JetBrains Mono”字体,IDEA自带,等宽且易读,写代码眼睛不累。主题方面,Darcula是默认的深色主题,如果你眼睛敏感,也可以选IntelliJ Light浅色主题。这个纯属个人偏好,没有对错。

第三个是“Auto Import”(自动导入)设置:

在Settings里搜索“Auto Import”,把“Add unambiguous imports on the fly”和“Optimize imports on the fly”都勾上。这样当你写代码需要用到某个类时,IDEA会自动帮你引入对应的包,不需要手打import语句,效率高很多。

3.3 新建Project时,“空项目”和“Maven项目”怎么选

首次用IDEA新建项目,会有好几种选项:Empty Project、Java Project、Maven Project、Spring Initializr等。新手容易懵,到底选哪个?

我的建议是:如果你只是想学Java基础语法,直接选“Empty Project”或者“Java Project”。新建Java Project时,IDEA会让你选择Project SDK,这里选你已经装好的JDK版本(比如17或者21)。IDEA会自动帮你建好src目录和一个默认的Module,你只需要在src下新建Java类,就能开始写代码。

这里要理解一个概念:Module(模块)。Java项目里一个Project可以包含多个Module,每个Module是一套独立的代码和资源。IDEA新建的Project默认会带一个Module,你在这个Module下的src目录里写代码就行。

为什么前面提到Maven?因为等你学到用第三方库(比如数据库驱动、JSON处理库)的时候,Maven能帮你自动下载和管理这些依赖。但那是后话。一开始学基础,没必要让Maven的配置干扰你,等需要的时候再引入,反而更清晰。

3.4 新建第一个Java类并运行:从代码到输出的完整过程

新建了Project后,在左侧的项目结构面板里找到src目录,右键选择New -> Java Class,输入类名(比如HelloWorld),点回车。IDEA会自动生成一个类模板:

public class HelloWorld { public static void main(String[] args) { } }

这时你在main方法里输入一行输出语句:

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, Java!"); } }

然后点击右上角的绿色三角形,或者右键选择Run 'HelloWorld.main()',IDEA就会编译并运行这个程序,在下方控制台输出Hello, Java!

这里有几个值得解释的点:

  • public class HelloWorld里的类名必须和文件名一致。这是Java的硬性规定,写helloWorld.java或者HelloWorld.java但class名不一致,编译会直接报错。
  • main方法是程序的入口,JVM启动后会从这个方法开始执行。方法签名public static void main(String[] args)是固定写法,不需要理解每个关键字的深层含义,先背下来,后面慢慢就懂了。
  • System.out.println是Java提供的标准输出方法,System是Java标准库里的类,out是它的一个静态字段(代表标准输出流),println是方法名。现在不需要完全理解为什么,只需要知道这个组合能在控制台打印东西。

我第一次教朋友的时候,都会特别强调:先跑通这个最简单程序,再谈语法细节。因为“能跑起来”给人的正反馈是巨大的,它会帮你建立信心,让你愿意继续深入。

4. 新手写Java最容易栽的语法坑:从编译错误到运行时报错

4.1 编译错误 vs 运行错误的本质区别

很多新手在IDEA里看到代码下面有红色波浪线就慌,其实完全没必要。红色波浪线是编译错误,意味着代码写错了,IDEA在编译前就帮你发现了,纠正后就好了。真正需要警惕的是运行时报错——代码编译没问题,但程序跑起来的时候才报错,这类错误往往更隐蔽、更难查。

这两类的区别,用开车类比就是:编译错误是仪表盘亮红灯,告诉你车哪里坏了,先修好再上路;运行错误是开在半路上突然爆胎,你在出发前根本想不到会出这个问题。

常见的编译错误有:

  • 中英文符号混用:System.out.println("Hello");里如果用中文引号或者中文分号,编译直接挂。你写代码的时候输入法是中文状态,很容易打出来中文分号,IDEA会标红,删掉重打英文分号就行。
  • 类名和文件名不一致:上面说过了,类名和文件名必须精确匹配。
  • 缺少分号:Java语句以分号结尾,漏掉就编译不过。

常见的运行错误有:

  • 空指针异常(NullPointerException):最常见,没有之一。你调用了一个对象的方法,但这个对象是null,程序就崩了。新手经常在还没给对象赋值时就调用它的方法,就会碰见。
  • 数组下标越界(ArrayIndexOutOfBoundsException):你访问数组的第10个元素,但数组只有9个元素,运行时报错。
  • 类型转换异常(ClassCastException):把一个对象强制转换成它本来不是的类型。

遇到这些错误,别慌。IDEA的报错信息虽然看起来很长,但关键信息就在前面几行,它会告诉你在哪个文件的第几行出了问题,你双击报错信息也能直接跳转到对应代码行。记住一个排查思路:从最后往上找Caused by,这是错误真正的根因

4.2 写代码时的命名规范:不只是“好看”

Java的命名规范,面试的时候会被问,实际工作里也会被review。我在这里帮你建立正确的习惯:

  • 类名:大驼峰(PascalCase),每个单词首字母大写,比如HelloWorldStudentManager
  • 方法名和变量名:小驼峰(camelCase),首字母小写、后面每个单词首字母大写,比如getName()studentAge
  • 常量名:全大写加下划线,比如MAX_VALUEDEFAULT_TIMEOUT
  • 包名:全小写,用点号分隔,比如com.example.demo

这套规范不是为了好看,而是为了可读性。你写的代码首先是给人看的,其次才是给机器执行。三个月后你回头看自己写的代码,如果命名清清楚楚,你一眼就知道这段代码是干嘛的;如果命名毫无规律,你自己都会崩溃。

一个小技巧:IDEA的代码补全功能特别智能。你输入sout回车,它会自动补全System.out.println();输入psvm回车,它会自动补全main方法。这些缩写能帮你省很多时间,入门的时候可以刻意记一下。

4.3 用IDEA的Debug功能理解程序执行流程

很多新手学了语法但总觉得“代码是凭空运行出来的”,对执行流程没有直观感受。我强烈建议你从一开始就学会用IDEA的Debug功能——它不会咬人,反而会帮你大忙。

具体操作很简单:在代码左侧的行号旁边点击一下,会出现一个红色圆点,这叫“断点”。然后点击右上角那只“小虫子”图标(Debug),而不是绿色三角形,程序就会运行到断点处停下,进入调试模式。

在调试模式下,你可以看到左侧面板里所有变量的当前值,也可以点击“Step Over”(快捷键F8)让程序一行一行往下执行。这么做最大的好处是:你能亲眼看到变量是怎么变化的,程序是怎么一步步走完的。比如你写一个for循环,通过Debug能看到i从0变到9的每一步过程,比在纸上空想要直观得多。

我教新手的时候常说一句话:如果你看不懂一个代码的运行逻辑,就打断点Debug一遍,比自己瞎猜快十倍。

5. 基础语法核心知识点串讲:变量、运算符、流程控制、数组和循环

5.1 数据类型和变量:Java是强类型语言意味着什么

Java是强类型语言,这句话在入门时好像只是一句定义,但实际写代码时影响很大。强类型意味着每个变量在声明时必须明确指定类型,而且类型不能随意转换。

基础的八种基本数据类型,我建议你用一个表记住:

数据类型大小取值范围使用场景
byte8位-128到127小整数,文件流的字节读取
short16位-32768到32767极少用,基本可以忽略
int32位约±21亿最常用的整数类型
long64位约±9.2×10^18大整数,时间戳等
float32位约±3.4×10^38精度低,不推荐直接用于计算
double64位约±1.8×10^308默认的浮点数类型
char16位0到65535单个字符
boolean1位true/false逻辑判断

这里面最需要注意的就是longfloat的字面量写法。声明long类型的变量,数值后面要加大写L或小写l(建议大写):long timestamp = 1710000000000L;。声明float类型的变量,数值后面要加Ff,否则小数默认被当作double处理,会编译报错。

intlong是安全的,因为范围变大了;但反过来long直接赋给int会编译报错,因为可能溢出。这叫做“类型转换的自动提升和强制转换”,你用几次就会记住。

5.2 运算符、if-else和switch:判断逻辑的两种写法

运算符没什么特别神秘的,算术运算符+ - * / %,比较运算符> < == != >= <=,逻辑运算符&& || !,这些和其他语言基本一致。

我重点说一下==equals()的区别。基本数据类型用==比较值,引用数据类型用equals()比较内容。用字符串举例:

String a = new String("hello"); String b = new String("hello"); System.out.println(a == b); // false,因为a和b的引用地址不同 System.out.println(a.equals(b)); // true,因为内容相同

这个点,你以后面试一定会被问到,现在理解清楚,后面省心。

流程控制里,if-else是最常用的。有一个小建议:如果if和else里的代码只有一行,虽然Java允许省略花括号,但我建议永远带上花括号。因为省略花括号后,后续添加代码时很容易出现逻辑错误,而且代码的可读性也差一些。我踩过这个坑,之后就再也不敢省略了。

switch分支判断在多值匹配时比多重if-else清晰。Java 14之后的新语法里,switch还有了“箭头表达式”的写法,可以直接返回值,非常简洁:

String result = switch (day) { case 1, 2, 3, 4, 5 -> "工作日"; case 6, 7 -> "周末"; default -> "非法输入"; };

这种写法不用写break,不会出现“case穿透”的问题,比老式写法好太多。学的时候可以直接学新语法。

5.3 数组和循环的几个常见误区

数组在Java里的声明方式有两种:int[] arrint arr[],功能完全一样,但业界惯例推荐写int[] arr,因为这样读起来是“一个int数组”,语义更清晰。

数组的长度是固定的,一旦new int[10]确定大小,就不能再改变。很多新手想给数组“动态添加元素”而不知所措,其实如果真的需要动态大小,应该用ArrayList(后面学到集合时自然会接触)。

循环方面,for循环、while循环、do-while循环的区别和应用场景:

  • for循环:循环次数明确时用,比如遍历数组、循环固定次数。
  • while循环:循环次数不明确、只知道结束条件时用,比如读取输入的每行内容直到EOF。
  • do-while循环:无论条件是否成立,至少执行一次时用。这个在实际开发中用的比较少,但面试偶尔会问。

还有一个非常常用的增强for循环,也叫foreach,遍历数组时最清晰:

int[] numbers = {1, 2, 3, 4, 5}; for (int num : numbers) { System.out.println(num); }

用增强for时需要注意:你不能在循环体内修改数组元素的值,因为num只是数组元素的一个副本。要修改数组里的值,必须用带下标的普通for循环。

5.4 面向对象:类、对象、继承、多态这四件事

面向对象是Java的核心中的核心,面试八股文里翻来覆去就考这些。我建议你用一个极简框架理解:

  • :蓝图。描述一类事物有什么属性(成员变量)和什么行为(方法)。
  • 对象:根据蓝图创建出来的具体实例。比如Student是一个类,张三是一个具体的对象。
  • 继承:子类拥有父类的属性和方法,还可以扩展自己的独有内容。用extends关键字实现。
  • 多态:同一个方法,在不同对象上执行时表现出不同的行为。

构造方法是面试里必问的一个点。要注意:构造方法的方法名和类名一样,没有返回类型,通过new关键字调用,主要用来初始化对象。如果你不写任何构造方法,Java会默认给你一个无参构造方法;但如果你写了有参构造方法,默认的无参构造方法就没有了,这时候还想用new Student()就会编译报错。这是一个很容易踩的坑,也是一个经典的入门问题

继承里的另一个关键点是方法重写(Override)。子类可以重写父类的方法,用@Override注解标识。重写必须保证方法名、参数列表、返回类型都兼容,否则报错。IDEA里写重写方法有个快捷键,在类体里输入Ctrl + O(macOS是Cmd + O),会弹出可重写的方法列表,选中回车就能自动生成模板。

6. 从基础走向进阶:Lambda、集合框架与Maven的引入时机

6.1 Lambda表达式和函数式编程思维

热搜词里出现了“lambda函数 java”,可见这是很多人学习Java时比较关心的一个点。理解Lambda,要先理解一个概念:在Java里,方法不能独立存在,必须属于某个类或某个对象。而Lambda表达式提供了一种简洁的方式,让你把一段代码(行为)当作参数传递。

一个经典例子是排序。以前用匿名内部类:

list.sort(new Comparator<String>() { @Override public int compare(String a, String b) { return a.length() - b.length(); } });

用Lambda:

list.sort((a, b) -> a.length() - b.length());

后者简洁了非常多的样板代码。Lambda只在“函数式接口”上使用,也就是只有一个抽象方法的接口,比如RunnableComparator。这个知识点,你学到集合里的stream操作时会更深入体会。没什么好怕的,先记语法,再理解原理。

6.2 集合框架:ArrayList、HashMap是面试高频词

Java集合框架是整个Java语言中使用频率最高的类库。新手阶段,我建议先掌握两个最常用的:

  • ArrayList:动态数组,可以随时添加、删除、访问元素。底层是Object数组,满了自动扩容。遍历和按下标访问很快,在中间插入和删除较慢。
  • HashMap:键值对存储,可以根据key快速找到value。底层是哈希表,查找时间复杂度平均是O(1)。遍历无序,每个key只能对应一个value,key不能重复。

用HashMap最常见的坑有两种:一种是遍历时修改结构导致ConcurrentModificationException;另一种是没有处理key不存在的情况导致返回null,后续使用这个null时出现空指针。我在写代码前总会习惯性地问自己:这个key一定存在吗?不存在会怎么样?这个习惯能避免很多运行时的意外。

找一本好的Java入门书或者一套成体系的视频教程来学集合框架是值得的,因为集合框架里的List、Set、Map接口层级关系、各种实现类的适用场景,是需要付出时间反复熟悉的知识。

6.3 Maven:从什么时候开始学、怎么学最合理

回到前面提到的Maven。我的建议是:当你开始需要用第三方库的时候,再学Maven。比如你想用Gson解析JSON,想用Apache Commons处理字符串,你需要一种工具自动下载这些库并管理它们的依赖关系,这就是Maven的价值。

Maven的核心概念只有三个:

  • pom.xml:项目的配置文件,声明了项目所有依赖。
  • 本地仓库:依赖库下载后存储在本地的目录。
  • 中央仓库:Maven默认从网上拉取依赖库的地方。

在IDEA里用Maven非常顺滑。新建项目时选择“Maven Archetype”或者直接建一个普通Maven项目,然后在pom.xml里写依赖坐标,IDEA会自动下载并导入这些库。刚开始学时,你只需要知道<dependencies>标签下的<dependency>长什么样、如何处理仓库源的问题就够了。

值得提醒的是:如果国内网络拉取中央仓库的依赖慢,可以配置阿里云Maven镜像,这个操作在IDEA的Settings里搜Maven,找到Repositories那边的镜像URL填一下就好。具体镜像地址你搜索一下就有,这里不赘述。

6.4 面试高频题里,真正常考的基础点有哪些

呼应热搜词里的“java面试八股文”“java基础面试题”,我再说几个真正常考的基础知识点:

  • String的不可变性:String在Java中是不可变对象。每次对String进行+拼接或substring等操作,都会产生新的String对象,而不是修改原对象。这有什么影响?你在循环里大量拼接字符串,效率会很低,正确做法是用StringBuilder
  • ==equals的区别:前面说过了,基本类型比数值,引用类型比引用地址,内容比较用equals
  • 方法重载(Overload)和重写(Override)的区别:重载是同一个类里方法名相同但参数列表不同;重写是子类里对父类方法重新实现,参数和返回类型必须兼容。
  • 值传递和引用传递:Java里方法参数永远是值传递。基础类型传的是值的副本,引用类型传的是对象的引用副本。很多人误以为Java有引用传递,实际上没有。
  • final关键字的作用:修饰变量时表示变量值不可变(基础类型值不可变、引用类型引用不可变);修饰方法时表示方法不可被重写;修饰类时表示类不可被继承。

这些点看起来是死记硬背的“八股文”,但只要你动手写过代码,它们背后都是实际规律的总结。不要为了背而背,写多了悟透了,这些就是自然存在的常识。

7. 常见报错排查清单:从“看不懂报错”到“快速定位”

我把新手阶段最常见的报错信息、原因和解决方案整理成一个清单,方便你遇到问题时对照排查。

报错信息原因解决方案
Error: Could not find or load main class类名和文件名不一致,或者编译生成的.class文件不在classpath里检查类名大小写,确认运行的主类正确
ClassNotFoundException程序运行时找不到某个类,通常是依赖缺失检查是否引入了对应的jar依赖
NullPointerException调用了null对象的方法检查对象是否已初始化,加非空判断
ArrayIndexOutOfBoundsException数组下标越界检查循环边界,确认索引范围
Exception in thread "main" java.lang.Error通常是JVM级别的错误,比Exception严重重新编译或重启IDEA,清理缓存
中文乱码编码不一致,源码文件是UTF-8,控制台是GBKSettings里统一编码格式为UTF-8

排查报错的通用方法论,我的经验是三步走:

  1. 读完整报错,不要只看第一行。报错信息里通常包含错误类型、出错文件、出错行号三个关键信息。IDEA控制台里红色的文字,几乎都给出了具体位置。
  2. 双击报错信息,跳到出错代码行。在IDEA里,报错信息通常是可以点击的,点一下会自动跳到对应代码行。先看那行代码,再顺着往上追溯调用关系。
  3. 从Caused by看根因。复杂异常会有多层“Caused by”,从最下面那层开始看,那才是问题真正发生的地方,上面的层级只是一个又一个的叠加过程。

IDEA本身也提供了缓存清理的选项,File -> Invalidate Caches,有时候代码没有任何改动但运行结果不对,清理一下缓存重启IDEA就好了。这个操作有奇效,你以后会用得上。

最后说一个我个人的体会:很多人学Java,一开始就抱着“把所有语法都学完再看项目”的心态,结果学了两周连一个完整程序都没写出来。我建议你反过来——先动手做,再补理论。第一个程序哪怕只是打印一串字符、做一道简单的计算题,都远比看十遍语法讲解有用得多。编程是技能,技能只有练了才会。把这篇内容里的环境配好、第一个程序跑通、几个小练习题做完,你就已经站在Java这条赛道的起跑线上了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 7:14:58

RS-485缓存集线器实战:多设备组网丢包与反射解决方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/9 7:11:45

2026年AI办公工具精选:12款真正提升效率的实用清单

每年都会有人来问我&#xff1a;现在AI办公工具这么多&#xff0c;到底哪些是真正值得天天用的&#xff1f;不瞒你说&#xff0c;我2024年开始重度使用AI处理日常事务&#xff0c;到现在2026年&#xff0c;办公室电脑里装了删、删了装的工具少说也有四五十款&#xff0c;最后真…

作者头像 李华
网站建设 2026/9/9 7:10:07

Calico IPIP 深度解析:原理、模式选型与生产排障实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/9 7:09:33

STM32智能输液监护调控系统:闭环滴速控制与安全监测实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/9 7:09:30

从零开始学力扣中道崩殂?一份刷题复盘与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华