java调试步骤_Java程序的开发过程及基本调试方法

文章导读

【Java开发环境和运行环境都已部署完成,下一步就要进入编程环节的学习了。在学习之前呢,同学们有必要了解程序的完整开发流程,前面说过程序是用来解决现实世界问题的。那么,从问题到可运行的程序需要哪些方法和技术,需要遵循什么样的开发流程,这都是同学们要清楚和明白的,也是从编程小白到系统架构师的必经之路,而不仅仅是单纯的编码人员。本篇与同学们探讨程序的开发方法及如何编写第一个Java程序。通过本篇的学习,你将了解如何从问题的开始到程序编写的整个开发流程,尝试编写第一个Java程序,并能初步了解程序的调试方法。】

1、Java程序的开发流程

程序开发是从问题域入手,识别问题域中实体、实体属性、行为以及实体与实体之间的关系,将现实世界的实体及关系通过数据结构、算法映射到计算机世界,并利用编程语言控制计算机的行为及操作,协助人类解决现实中的问题。

程序开发基本过程如下图示所示:

图1 程序设计基本过程

无论用什么语言编写程序,编写的无论是企业级程序还是计算两数和的最简单程序,程序开发过程都需要经历需求分析、程序设计、编写阶段、测试阶段、运行阶段五个基本过程。

假设需要设计一个交通红绿灯自控程序,其程序开发过程可分为如下步骤:

需求分析

(1)识别问题域:在城市十字路口控制南北方向和东西方向的红绿灯自动切换;

(2)识别问题域的实体:实体可以从问题域描述内容提取出来,问题域要求控制红绿灯的自动切换,其中南北方向有红、黄、绿三个灯,东西方向也有红、黄、绿三个灯,因此该问题域只有一个实体“灯”;

(3)识别实体属性:灯的属性有颜色(红、黄、绿)、亮度(强光、弱光);

(4)识别实体行为:关灯和开灯是灯的行为;

(5)识别实体与实体间的关系:该问题域中,只有灯一个实体,不存在与其它实体的关系。但其自身实体之间存在关系,南北方向和东西方向的红绿灯同一时间只允许各有一个灯亮;且遵循南北方向红灯亮时,东西方向绿灯亮、红灯→黄灯→绿灯→黄灯→红灯、红灯与绿灯点亮时间间隔等规则。

识别问题域(需求分析)完成后,需要形成需求分析文档。

程序设计

对识别的问题域实体建立对象模型,并建立实体关系模型。对象模型可以把已经识别的问题域映射到能够被编程语言识别和描述的对象、对象功能和对象行为域。

映射工具就是面向对象建模语言,当前流行的有多种建模语言,其中被广泛使用的是UML建模语言,UML从问题域的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、部署图等九种图。这些图从不同的侧面对问题域进行描述。通过对象建模语言将问题域映射为对象、对象功能和对象行为域,也就是映射为系统(程序)。

针对交通红绿灯自控程序问题域,UML类图(对象图)如下图所示:

图2 交通灯自控程序类图

UML模型完成后,需要形成设计文档。

注意:UML模型同学们可以课外阅读,对该模型有一个初步了解。

编码阶段

UML模型设计完成后,基本可以参照UML模型或设计文档进入编码阶段。编码阶段主要包括代码编写、编译及单元测试。

测试阶段

程序完成后,需要经过有效测试,排除潜在的程序BUG后,才能对外发布。

运行阶段

虽然经过严格测试,程序运行过程中,依然会出现各种各样的问题需要维护,同时新的需求也要求程序不断地升级版本。

2、Java编码阶段需要准备的工作

前面谈到常用的Java开发工具有文本编辑器、Java集成开发工具等软件。如果开发者初学Java程序设计,应从最简单的文本编辑器入手。掌握Java编程的基础语法、基础类库的使用及设计思想后,再逐步接触Java开发集成环境和Java开发框架。

Windows操作系统下用文本编辑器编写Java代码可以分为三步走,如下图所示:

图3 编写Java代码过程图

通过文本编辑器编写Java代码(源程序),在命令行窗口运行Java编译器编译Java代码,编译通过后输出class文件,运行Java程序,加载已编译完成的类文件。

3、编写第一个Java程序

1、打开Windows记事本,输入下面的内容,并保存文本文件到D盘Java目录,如果D盘没有Java目录,可以新建一个Java目录,并命名文件为“HelloWorld.java”。也可以将文件保存到其它目录。

需要注意的是,如果将文件保存到其它目录,后面内容涉及到目录的,需要将目录切换到该文件保存的目录下。

public class HelloWorld {

public static void main(String args[])

{

System.out.println("HelloWorld");

}

}

编写代码注意事项:

① 保存的文件名称和类名一定要一致。例如:类名是“HelloWorld”,保存的文件名称一定也是“HelloWorld”;

② Java对字母大小写敏感,大写字母一定要大写,小写字母一定要小写。例如:语句中的“System”不能写成“system”;

③ 每条Java语句必须以分号结束。例如:语句“System.out.println("HelloWorld")”后面必须加“;”,没有分号编译器会报错;

④ “{”和“}”必须成对;

⑤ “public”、“static”、“void”、“main”是Java保留的关键字,不能有任何改动;

⑥ “main”是Java程序的执行的入口点,不能改变“main”方法名称。

2、进入Windows命令行窗口,将D盘Java目录设置为当前工作目录,具体步骤如下:

在Windows命令行窗口输入“d:”命令,并按下回车键(Enter),当前工作目录被设置为D盘,继续输入“cd java”命令,并按下回车键(Enter),当前工作目录被设置为“d:/java”目录,如下图所示:

如果Java代码被保存到其它目录,可以用同样方法将Java代码所在目录设置为当前工作目录,不同的是输入的盘符和“cd”命令后的目录不同;

(3)在当前工作目录下输入“javac HelloWorld.java”命令,注意“javac”和“HelloWorld.java”之间有空格,并按下回车键(Enter),Javac是Java编译器程序,此命令是执行对“HelloWorld.java”的编译。如果代码没有错误,在当前目录下会生成“HelloWorld.classs”文件;如果编译过程中,Java程序给出提示,则需要按照提示修改Java代码文件,修改完成后再次执行编译命令,直至编译成功。

(4)在当前工作目录下输入“java HelloWorld”命令,并按下回车键(Enter),屏幕显示“HelloWorld”语句。输入命令时,注意大小写以及“java”与“HelloWorld”之间的空格。

至此,第一个Java程序编写完成并成功运行。

4、 在命令行窗口进行Java程序调试

初学者刚开始编写程序,编译时错误可能会比较多,这时就需要学会查看编译器给出的错误信息,根据编译器给出的错误信息修改相应代码,然后再次编译,发现问题再返回修改,如此往复,直至代码编译通过,往复编译修改代码的过程就是程序调试。

初学者写的代码,被编译时出的错误比较多,主要是对编程语言的语法不熟悉、丢三拉四、关键字拼错、大小写没有区分、括号没有成对匹配等错误。编译器一般都会在命令行窗口对这些错误给出比较确切的描述,并能指出错误所在的位置,给修改代码带来了极大的方便。下面以前面编写的第一个Java程序“HelloWorld”为例,列举几个调试程序的实例。

示例1:编译文件名拼写错误

以前面的“HelloWorld.java”为例。在命令行窗口切换到当前工作目录D盘Java目录下,如果被编译的文件在其它目录存储,将当前工作目录切换到被编译文件所在的目录。

编译“HelloWorld.java”文件,在命令行窗口输入“javac Helloworl.java”并执行命令(输入错误的文件名),编译器显示如下信息:

编译器给出“找不到文件:Helloworl.java”出错信息,重新输入正确的文件名称就可以纠正该错误了。

示例2:当前工作目录下没有被编译的文件

将D盘Java目录下的HelloWorld.java文件暂时移除,在命令行窗口输入“javac HelloWorld.java”并执行命令,编译器显示如下信息:

编译器同样给出“找不到文件:HelloWorld.java”出错信息,将“HelloWorld.java”文件恢复到D盘Java目录下,就可以纠正该错误。

示例3:类声明的Java关键字拼写错误

“HelloWorld.java”文件类声明“class”关键字被错误拼写为“claas”。在命令行窗口输入“javac HelloWorld.java”并执行命令,编译器显示如下信息:

编译器给出了三个错误描述,其实都指向同一个错误。错误信息分为四个部分。错误信息构成描述见下图:

图4 编译错误信息构成

第一部分指出出错的Java文件名称;

第二部分指出错误所在Java文件中的行号,“1”表示错误出现在Java文件中的第一行代码;

第三部分指出错误原因描述,同学们可以根据此错误描述修改错误代码;

第四部分指出具体的错误内容,可以更好地定位错误所在具体位置。

第一个错误信息是“需要class,interface或enum”,错误信息表示的意思是类声明需要“class”、“interface”、“enum”关键字中的一个,从图中可以看出,编译器已经指出了具体错误位置所在,在第三行“claas”下面有一个向上的箭头指向该“claas”,可以明显看出,关键字“class”被错误拼写为“claas”,改正此错误,编译即可通过。

第二和第三个错误都是由第一个错误引起的。

示例4:类文件名称与类名称不一致

“HelloWorld.java”文件名称与类名称不一致,将“HelloWorld.java”文件名称重新命名为“HelloWorld1.java”,文件重命名后,导致文件名称与类名称不一致。在命令行窗口输入“javac HelloWorld1.java”并执行命令,编译器显示如下信息:

编译器给出“HelloWorld”应在“HelloWorld1.java”中声明,检查文件名称与类名称是否一致。

示例5:类体的花括号没有匹配

用记事本打开“HelloWorld.java”文件,去掉最后的花括号(类的匹配花括号),保存文件。

在命令行窗口输入“javac HelloWorld.java”并执行命令,编译器显示如下信息:

编译器给出语法分析时没有找到文件尾部错误信息,用记事本打开“HelloWorld.java”文件,定位到第5行,检查是否缺少与类匹配的“}”括号。

示例6:Java类库名拼写错误

用记事本打开“HelloWorld.java”文件,修改Java类库“System”为“system”,保存文件,退出记事本。

在命令行窗口输入“javac HelloWorld.java”并执行命令,编译器显示如下信息:

编译器给出程序包system不存在错误信息,用记事本打开“HelloWorld.java”文件,定位到代码第4行,检查Java类库“System”是否拼写错误,Java对字母大小写敏感,大写字母一定要大写,小写字母一定要小写。语句中的“System”不能写成“system”。

示例7:字符串没有用""引起来

Java的字符串必须用英文双引号""引起来,不能是中文双引号“”,也不能是中文单引号’’。用记事本打开“HelloWorld.java”文件,修改Java代码。

System.out.println("HelloWorld");

修改为:

System.out.println("HelloWorld);

然后保存文件,退出记事本。

在命令行窗口输入“javac HelloWorld.java”并执行命令,编译器显示如下信息:

编译器给出未结束的字符串文字错误信息,用记事本打开“HelloWorld.java”文件,定位到代码第4行,检查字符串是否在””之内。

示例8:Java语句包含非法字符

Java语句的“;”、“.”必须是英文字符,不能写成中文字符,如把“;”写成“;”,“.”写成“。”。用记事本打开“HelloWorld.java”文件,修改代码“System.out”为“System。out”,保存文件,退出记事本。

在命令行窗口输入“javac HelloWorld.java”并执行命令,编译器显示如下信息:

编译器给出非法字符的错误信息,用记事本打开“HelloWorld.java”文件,定位到代码第4行,检查是否存在把英文字符写成中文字符的情况。

内容小结

1、程序是用来解决现实世界所存在的问题,如何把问题转化为程序呢(解决问题的算法)?首先要识别问题,也就是需求分析,分析要解决问题的实质(算法核心),然后根据需求分析的结果,用映射工具(如UML)把分析问题的结果用模型描述出来(算法模型),最后用编程语言将模型(算法)转化为程序。

2、编写Java程序可以利用记事本、集成开发工具软件。初学者建议用记事本编写Java程序,可以把精力集中在Java语言的基础语法上,等掌握了Java基础语法后,再使用集成开发工具。

3、Java程序调试是辅助Java程序开发的一个重要技术,通过调试可以很快定位程序所出现的问题。在Windows命令行窗口编译和运行Java程序时,编译器一般都会在命令行窗口对这些错误给出比较确切的描述,并能指出错误所在的位置,给修改代码带来了极大的方便。

思考与练习

1、如何把现实世界的问题转化为程序?

2、在Windows命令行窗口如何编译Java文件?

3、在命令行窗口如何运行已编译好的Java程序?

4、当javac编译器报出“找不到文件错误”时,程序可能出现了什么问题?

你可能感兴趣的:(java调试步骤)