文章导读

【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调试步骤_Java程序的开发过程及基本调试方法相关推荐

  1. 学习java的步骤_java学习的基本步骤

    Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了.但有一些基本的步骤: 熟悉一种文本编辑器, 比如:Vim, Emacs, Notepad++, TextMate等.知道哪些 ...

  2. java 复制对象_Java程序员必备:序列化全方位解析

    前言 相信大家日常开发中,经常看到Java对象"implements Serializable".那么,它到底有什么用呢?本文从以下几个角度来解析序列这一块知识点~ 什么是Java ...

  3. web开发的java语言步骤_java web开发入门一(servlet和jsp)基于eclispe

    servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomc ...

  4. java运行原理_Java程序的加载与运行原理详解

    Java程序的运行包括两个非常重要的阶段: 一.编译阶段 第一步:程序员需要在计算机硬盘中任意位置创建一个.java扩展名的文件,该文件被称为 java源文件,源文件当中编写的是java源代码/源程序 ...

  5. Java 匿名存储过程_Java程序员的存储过程

    存储过程是指保存在数据库并在数据库端执行的程序.你可以使用特殊的语法在Java类中调用存储过程.在调用时,存储过程的名称及指定的参数通过JDBC连接发送给DBMS,执行存储过程并通过连接(如果有)返回 ...

  6. java hive查询_java程序调用hive查询的一个异常

    最近在java程序中调用hive做查询时,碰到一个异常,被困扰了许久,经过几番调试,逐步把问题定位清楚. 在异常描述前先给出异常信息:java.sql.SQLException: Error whil ...

  7. java整数翻转_Java程序反转数字

    Java程序反转数字 在此程序中,您将学习在Java中使用while循环和for循环来反转数字. 示例:在Java中使用while循环反转数字 public class ReverseNumber { ...

  8. java ide排名_Java程序员的困惑,Java IDE到底怎么选

    Eclipse和IntelliJ IDEA可以说是程序员们最常用的两个IDE开发工具了.IntelliJ IDEA被认为是目前Java开发效率最快的IDE工具,Eclipse却是大多数Java程序员使 ...

  9. java手动输入函数_Java程序如何添加一个函数,如果玩家输入错误,它将返回代码。...

    我的程序有问题,不是代码问题,而是我要怎么做,这是我一直困惑的部分.只是为了让你知道我是一个基本的Java编码器,我不理解复杂的东西,所以请记住,我的代码不是最好的. ---------------- ...

  10. 容易答错的java面试题_Java程序员面试中最容易答错的8道面试题,你中招了吗?...

    1. static 和 final 的用法 static 的作用从三个方面来谈,分别是静态变量.静态方法.静态类. 静态变量:声明为 static 的静态变量实质上就是全局变量,当声明一个对象时,并不 ...

最新文章

  1. _linux运维正确安装oracle流程
  2. 十三五乐山全力推进智慧城市和新能源汽车等项目
  3. 单目摄像头光学图像测距_摄像头与毫米波雷达(Radar)融合解析
  4. 从入门到入土(十)RocketMQ集群流程以及核心概念
  5. 《南溪的目标检测学习笔记》——PyTorch模型搭建模板
  6. 追踪盗窃12亿用户登录数据的网络犯罪团伙
  7. jQuery开发之windows边栏小工具开发(Gadget development)- wi...
  8. 解决进入XP系统无法响应故障
  9. 文本文档如何运行c语言代码,C程序员如何创建、打开、关闭文本文件或二进制文件...
  10. 使用Python在指定文件夹新建一个文本文档(其他类型文件也可)
  11. ASP.NET Core 和 EF Core 系列教程——入门
  12. 计算机管理 未分配磁盘,磁盘显示未分配怎么办?
  13. 【Matlab代码】Sierpinsk地毯
  14. 如何做好线上活动策划及执行的思路与框架
  15. ubuntu18.04安装与更新NVIDIA驱动
  16. 淘宝美工设计就业前景怎么样?有发展前途吗?
  17. android本地化,Android本地化
  18. 熊市赚取被动收入:质押NFT带来高达30%收益回报!
  19. 研二师弟拿下微信 offer
  20. 零工经济时代来临 灵活用工平台崛起

热门文章

  1. 在Redhat9下安装Oracle9
  2. 【人事】性格内向的人面试注意事项
  3. 虚拟机中Deepin v20 配置共享文件夹及修改Linux系统环境PATH
  4. emule中节点加入Kad网络过程(源代码详解)
  5. instagram动态网页图片内容爬取(一)
  6. 关于后端接口测试没问题,HTTP500错误
  7. DevExpress VCL Subscription 版本:21.1.5
  8. 基于JSP的购物网站系统
  9. 数据结构与算法(陈越版)第一讲 基本概念
  10. 【TensorFlow】tf.expand_dims()函数