网络宝典
第二套高阶模板 · 更大气的阅读体验

运行时和编译时区别:程序员必须搞懂的基本概念

发布时间:2025-12-16 07:50:32 阅读:115 次

写代码的时候,经常会听到“编译时出错了”或者“运行时报错了”,听起来差不多,其实完全是两回事。搞清楚运行时和编译时的区别,对排查问题、理解程序执行流程特别有帮助。

什么是编译时

编译时指的是代码被翻译成计算机能执行的指令的阶段。像C、C++、Java这类语言,需要先通过编译器把源代码转换成字节码或机器码。这个过程就是编译时。

比如你写了一行 Java 代码:

int num = "hello";
这种明显类型不匹配的问题,编译器在编译时就能发现,直接报错,根本不会让你生成可执行文件。

这时候还没开始运行程序,所以这类错误叫“编译时错误”。它就像写作文时语法不通,老师一眼就看出来,不用等你演讲那天才说。

什么是运行时

运行时是程序真正跑起来之后的阶段。代码已经通过了编译,生成了可执行文件,现在由操作系统加载并执行。

有些问题在编译时发现不了。比如下面这段 Java 代码:

int[] arr = new int[5];
arr[10] = 100;
语法完全合法,数组定义也没错,但运行到第二行时会触发“数组下标越界”异常,这就是运行时错误。

再比如用户输入了一个非法值,网络连接突然断开,文件找不到——这些外部情况无法在编译阶段预知,只能在运行中暴露出来。

两种错误的典型场景

编译时错误常见于拼写错误、语法错误、类型不匹配等。例如把 if 写成 iff,或者漏了个分号,编译器立马报红,程序压根没法生成。

运行时错误则更隐蔽。比如你的App上线后,某个按钮点一下就闪退,开发时没测到这个路径,只有用户操作时才触发。这种问题往往需要日志、调试工具来定位。

脚本语言的情况有点不一样

像 Python、JavaScript 这类解释型语言,没有明显的编译步骤,但不代表没有“编译时”。它们会在运行前先做语法解析,这一步其实也算编译时。

比如你写了个 Python 脚本:

prin("hello")
运行时会提示函数未定义,但如果是:
if True
    print("ok")
少了个冒号,Python 在解析阶段就会报语法错误,这属于编译时范畴。

所以别以为脚本语言就没有编译过程,只是这个过程和运行绑在一起了,普通人感觉不到。

实际开发中的应对方式

编译时错误好办,IDE 通常实时标红,改对了才能运行。重点是运行时错误,得靠经验预防。

比如访问数组前判断下标范围,打开文件前检查路径是否存在,网络请求加个超时机制。多写些防御性代码,程序才不容易崩。

现在很多语言也提供了静态分析工具,在编码阶段就能模拟部分运行时行为,提前发现潜在风险,算是把一些运行时问题往前挪。