第2章简单的Java程序 从本章开始,就要正式学习Java语言的程序设计,除了认识程序的架构外,本章还介绍了修饰符、关键字以及一些基本的数据类型。通过简单的范例,让读者了解到检测与提高程序可读性的方法,以培养读者正确的程序编写观念与习惯。2。1一个简单的例子 首先来看一个简单的Java程序。在介绍程序的内容之前,先简单回顾一下第一章讲解的例子,之后再来看下面这个程序,试试看是否看得出它是在做哪些事情! 范例:TestJava21。java01TestJava21。java,java的简单范例02publicclassTestJava2103{04publicstaticvoidmain(Stringargs〔〕)05{06intnum;声明一个整型变量num07num3;将整型变量赋值为308输出字符串,这里用号连接变量09System。out。println(这是数字num);10System。out。println(我有num本书!);11}12} 输出结果:这是数字3我有3本书! 如果现在看不懂上面的这个程序也没有关系,先将它敲进Java编辑器里,将它存盘、编辑、运行,就可以看到上面的输出结果。 从上面的输出结果中可以看出System。out。println()的作用,就是输出括号内所包含的文字,至于public、class、static、void这些关键字的意思,将在以后的章节中再做更深入一层的探讨。 程序说明: 1、第1行为程序的注释,Java语言的注释是以标志开始的,注释有助于对程序的阅读与检测,被注释的内容在编译时不会被执行。 2、第2行publicclassTestJava21中的public与class是Java的关键字,class为类的意思,后面接上类名称,在本程序中取名为TestJava21。public则是用来表示该类为公有,也就是在整个程序里都可以访问到它。需要注意的是,如果将一个类声明成public,则也要将文件名称取成和这个类一样的名称,如图21所示。本例中的文件名为TestJava21。java,而public之后所接的类名称也为TestJava21。也就是说,在一个Java文件里,最多只能有一个public类,否则。java的文件便无法命名。 图21如果将类声明成public,则也要将文件名称取成和这个类一样的名称 3、第4行publicstaticvoidmain(Stringargs〔〕)为程序运行的起点。第410行的功能类似于一般程序语言中的函数(function),但在Java中称之为method(方法)。因此C语言里的main()函数(主函数),在Java中则被称为main()method(主方法)。 4、main()method的主体(body)从第5行的左大括号{到第11行的右大括号}为止。每一个独立的Java程序一定要有main()method才能运行,因为它是程序开始运行的起点。 5、第6行intnum;的目的是声明num为一个整数类型的变量。在使用变量之前必须先声明其类型。 6、第7行num3;为一赋值语句,即把整数2赋给存放整数的变量num。 7、第8行的语句为:System。out。println(这是数字num);程序运行时会在显示器上输出引号()内所包含的内容。包括这是数字和整数变量num所存放的值两部分内容。 8、System。out是指标准输出,通常与计算机的接口设备有关,如打印机、显示器等。其后所需的文字println,是由print与line所组成的,意思是将后面括号中的内容打印在标准输出设备显示器上。因此第8行的语句执行完后会换行,也就是把光标移到下一行的开头继续输出。读者可以把System。out。println(),改成System。out。print(),看一下换行与不换行的区别。 9、第10行的右大括号则告诉编译器main()method到这儿结束。 10、第11行的右大括号则告诉编译器classTestJava21到这儿结束。 这里只是简单的介绍了一下TestJava21这个程序,相信读者已经对Java语言有了初步的了解。TestJava21程序虽然很短,却是一个相当完整的Java程序!在后面的章节中,将会对Java语言的细节部分,做详细的讨论。 2。2简单的Java程序解析本节将仔细探讨Java语言的一些基本规则及用法。 2。2。1类(class) Java程序是由类(class)所组成,至于类的概念在以后会有详细讲解,读者只要先记住所有的Java程序都是由类组成的就可以了。下面的程序片段即为定义类的典型范例:publicclassTest定义public类Test{} 上面的程序定义了一个新的public类Test,这个类的原始程序的文件名称应取名为Test。java。类Test的范围由一对大括号所包含。public是Java的关键字,指的是对于类的访问方式为公有。需要读者注意的是,由于Java程序是由类所组成,因此在完整的Java程序里,至少需要有一个类。此外,本书曾在前面提到过在Java程序中,其原始程序的文件名不能随意命名,必须和public类名称一样,因此在一个独立的原始程序里,只能有一个public类,却可以有许多nonpublic类。此外,若是在一个Java程序中没有一个类是public,那么该Java程序的文件名就可以随意命名了。 2。2。2大括号、段及主体 将类名称定出之后,就可以开始编写类的内容。左大括号{为类的主体开始标记,而整个类的主体至右大括号}结束。每个命令语句结束时,必须以分号;做结尾。当某个命令的语句不只一行时,必须以一对大括号{}将这些语句包括起来,形成一个程序段(segment)或是块(block)。再以一个简单的程序为例来说明什么是段与主体。若是暂时看不懂TestJava22这个程序,也不用担心,慢慢地都会讲到该程序中所用到的命令。在下面的程序中,可以看到main()method的主体以左右大括号包围起来;for循环中的语句不只一行,所以使用左右大括号将属于for循环的段内容包围起来;整个程序语句的内容又被第3与第13行的左右大括号包围,这个块属于public类TestJava22所有。此外,应该注意到每个语句结束时,都是以分号作为结尾。 范例:TestJava22。java 2。2。3程序运行的起始点main()method Java程序是由一个或一个以上的类组合而成,程序起始的主体也是被包含在类之中。这个起始的地方称为main(),用左右大括号将属于main()段内容包围起来,称之为method(方法)。main()方法为程序的主方法,在一个Java程序中有且只能有一个main()方法,它是程序运行的开端,通常看到的main()method如下面的语句片段所示: publicstaticvoidmain(Stringargs〔〕)main()method,主程序开始{} 如前一节所述,main()method之前必须加上publicstaticvoid这三个标识符。public代表main()公有的method;static表示main()在没有创建类对象的情况下,仍然可以被运行;void则表示main()方法没有返回值。Main后的括号()中的参数Stringargs〔〕表示运行该程序时所需要的参数,这是固定的用法,如果现在不了解也没有关系,在以后的章节中会一一介绍。 2。2。4Java程序的注释 为程序添加注释可以用来解释程序的某些语句的作用和功能,提高程序的可读性。也可以使用注释在原程序中插入设计者的个人信息。此外,还可以用程序注释来暂时屏蔽某些程序语句,让编译器暂时不要处理这部分语句,等到需要处理的时候,只需把注释标记取消就可以了,Java里的注释根据不同的用途分为三种类型: 单行注释多行注释文档注释 单行注释,就是在注释内容前面加双斜线(),Java编译器会忽略掉这部分信息。如下所示:intnum;定义一个整数 多行注释,就是在注释内容前面以单斜线加一个星形标记()开头,并在注释内容末尾以一个星形标记加单斜线()结束。当注释内容超过一行时一般使用这种方法,如下所示: intc10;intx5;文档注释,是以单斜线加两个星形标记()开头,并以一个星形标记加单斜线()结束。用这种方法注释的内容会被解释成程序的正式文档,并能包含进如javadoc之类的工具生成的文档里,用以说明该程序的层次结构及其方法。 2。2。5Java中的标识符 Java中的包、类、方法、参数和变量的名字,可由任意顺序的大小写字母、数字、下划线()和美元符号()组成,但标识符不能以数字开头,不能是Java中的保留关键字。 下面是合法的标识符:yournameyournameyournameyourname 下面是非法的标识符:class67。9HelloCareers !小提示:一些刚接触编程语言的读者可能会觉得记住上面的规则很麻烦,所以在这里提醒读者,标识符最好永远用字母开头,而且尽量不要包含其他的符号。 2。2。6Java的关键字 和其他语言一样,Java中也有许多保留关键字,如public、static等,这些保留关键字不能当作标识符使用。下面列出了Java中的保留关键字,这些关键字并不需要读者去强记,因为一旦使用了这些关键字做标识符时,编辑器会自动提示错误。Java中的保留关键字:abstractbooleabreakbytecasecatchcharclasscontinuedefauldodoubleelseextendfalsefinalfinallyfloatforforifimplementimportinstanceofintinterfacelongnativenewnullpackageprivateprotectedpublicreturnshortstaticsynchronizedsuperthisthrowthrowstransienttruetryvoidvolatilewhile 要特别注意的是,虽然goto、const在Java中并没有任何意义,却也是保留字,与其它的关键字一样,在程序里不能用来做为自定义的标识符。 2。2。7变量 变量在程序语言中扮演了最基本的角色。变量可以用来存放数据,而使用变量之前必须先声明它所预保存的数据类型。接下来,来看看在Java中变量的使用规。 2。2。7。1变量的声明 则举例来说,想在程序中声明一个可以存放整数的变量,这个变量的名称为num,在程序中即可写出如下所示的语句:intnum;声明num为整数变量 int为Java的关键字,代表整数(Integer)的声明。若要同时声明多个整型的变量,可以像上面的语句一样分别声明它们,也可以把它们都写在同一个语句中,每个变量之间以逗号分开,如下面的写法:intnum,num1,num2;同时声明num,num1,num2为整数变量 2。2。7。2变量的数据类型 除了整数类型之外,Java还提供了多种其它的数据类型。Java的变量类型可以是整型(int)、长整型(long)、短整型(short)、浮点型(float)、双精度浮点型(double)等,除了这些数据类型外,还有字符型(char)或字符串型(String)。关于这些数据类型,本书在第三章中有详细的介绍。 2。2。7。3变量名称 读者可以依据个人的喜好来决定变量的名称,这些变量的名称不能使用到Java的关键字。通常会以变量所代表的意义来取名(如num代表数字)。当然也可以使用a、b、c等简单的英文字母代表变量,但是当程序很大时,需要的变量数量会很多,这些简单名称所代表的意义就比较容易忘记,必然会增加阅读及调试程序的困难度。 2。2。7。4变量名称的限制同225所述标识符的名称限制。 2。2。8变量的设置 给所声明的变量赋予一个属于它的值,用等号运算符()来实现。具体可使用如下所示的三种方法进行设置:方法1在声明变量的时设置举例来说,在程序中声明一个整数的变量num,并直接把这个变量赋值为2,可以在程序中写出如下的语句:intnum2;声明变量,并直接设置方法2声明后再设置一般来说也可以在声明后再给变量赋值。举例来说,在程序中声明整数的变量num1、num2及字符变量ch,并且给它们分别赋值,在程序中即可写出如下面的语句:intnum1,num2;声明变量charc;num12;赋值给变量num23;chz;方法3在程序中的任何位置声明并设置以声明一个整数的变量num为例,可以等到要使用这个变量时,再给它赋值:intnum;声明变量num2;用到变量时,再赋值 2。2。9println() 读者会发现从第1章开始,所有的例题中出现了不少次的System。out。println(),在本节中,就先了解一下println()。至于详细的使用方法,在第三章会讲到。System。out是指标准输出,通常与计算机的接口设备有关,如打印机、显示器等。其后所连接的println,是由print与line所组成的,意义是将后面括号中的内容打印在标准输出设备显示器上。左、右括号之间的内容,即是欲打印到显示器中的参数,参数可以是字符、字符串、数值、常量或是表达式,参数与参数之间以括号作为间隔。当参数为字符串时以一对双引号()包围;变量则直接将其名称作为参数;表达式作为参数时,要用括号将表达式包围起来。举例来说,想在屏幕上输出我有20本书!,其中20以变量num代替,程序的编写如下:范例:TestJava23。java01下面这段程序采用声明变量并赋值的方式,之后在屏幕上打印输出02publicclassTestJava2303{04publicstaticvoidmain(Stringargs〔〕)05{06intnum2;声明变量并直接赋值为207System。out。println(我有num本书!);08}09}输出结果:我有20本书! 在TestJava23程序中,println()中的变量共有三个,以加号连接这些将被打印的数据。在此,加号是合并的意思,并非作为算术运算符号的用途。 2。3程序的检测 现在相信读者大概可以依葫芦画瓢似地写出几个类似的程序了,接下来,要对读者做一些小检测!看看读者是否能够准确地找出下面的程序是否存在错误: 范例:TestJava24。java01下面程序的错误属于语法错误,在编译的时候会自动检测到02publicclassTestJava2403{04publicstaticvoidmain(Stringargs〔〕)05{06intnum12;声明整数变量num1,并赋值为207intnum23;声明整数变量num2,并赋值为30809System。out。println(我有num1本书!);10System。out。println(你有num2本书!)11)12}2。3。1语法错误 程序TestJava24在语法上犯了几个错误,若是通过编译器编译,便可以把这些错误找出来。首先,可以看到第4行,main()method的主体以左大括号开始,应以右大括号结束。所有括号的出现都是成双成对的,因此第11行main()method主体结束时应以右大括号做结尾,而Careers24中却以右括号)结束。注释的符号为,但是在第7行的注释中,没有加上。在第9行,字符串的连接中少了一个号,最后,还可以看到在第10行的语句结束时,少了分号作为结束。上述的三个错误均属于语法错误。当编译程序发现程序语法有错误时,会把这些错误的位置指出,并告诉设计者错误的类型,即可以根据编译程序所给予的信息加以更正。将程序更改后重新编译,若还是有错误,再依照上述的方法重复测试,这些错误就将会被一一改正,直到没有错误为止。上面的程序经过检测、调试之后运行的结果如下: 输出结果 我有2本书! 你有3本书! 2。3。2语义错误 当程序本身的语法都没有错误,但是运行后的结果却不符合设计者的要求,此时可能犯了语义错误,也就是程序逻辑上的错误。读者会发现,想要找出语义错误会比找语法错误更难,以下面的程序进行简单的说明:范例:TestJava25。java01下面这段程序原本是要计算一共有多少本书,但是由于错把加号写成了减号,所以造成了输出结果不正确属于语义错误02publicclassTestJava2503{04publicstaticvoidmain(Stringargs〔〕)05{06intnum14;声明一整型变量num107intnum25;声明一整型变量num20809System。out。println(我有num1本书!);10System。out。println(你有num2本书!);11输出num1num2的值s12System。out。println(我们一共有(num1num2)本书!);13}14} 输出结果: 我有4本书!你有5本书!我们一共有1本书! 可以发现,在程序编译过程中并没有发现错误,但是运行后的结果却是不正确的,这种错误就是语义错误,就是在第12行中,因失误将num1num2写成了num1num2,虽然语法是正确的,但是却不符合程序的要求,只要将错误更正后,程序的运行结果就是想要的了。 2。4提高程序的可读性 能够写出一个程序的确很让人兴奋,但如果这个程序除了本人之外,其他人都很难读懂,那这就不算是一个好的程序,所以每个程序设计者在设计程序的时候,也要学习程序设计的规范格式,除了前面所说的加上注释之外,还应当保持适当的缩进,可以看见上面的范例程序都是按缩进的方法编写的,是不是觉得看起来很清晰、明白?读者可以比较下面两个程序,相信看完之后,就会明白程序中使用缩进的好处了! 范例:TestJava26。java 01以下这段程序是有缩进的样例,可以发现这样的程序看起来比较清楚 02publicclassCareers26 03{ 04publicstaticvoidmain(Stringargs〔〕) 05{ 06intx; 07hr08for(x1;x3;x) 09{ 10System。out。print(xx,); 11System。out。println(xx(xx)); 12} 13} 14} 下面是没有缩进的例子: 范例:TestJava27。java 01下面的程序于前面程序的输出结果是一样的,但不同的是,这个程序没有采用任何缩进,所以看起来很累 02publicclassTestJava27{ 03publicstaticvoidmain(Stringargs〔〕){ 04intx;for(x1;x3;x){ 05System。out。print(xx,); 06System。out。println(xx(xx));}}} TestJava27这个例子虽然简短,而且语法也没有错误,但是因为编写风格的关系,阅读起来肯定没有TestJava26这个程序好读,所以建议读者尽量使用缩进,养成良好的编程习惯。 范例TestJava26和TestJava27运行后的输出结果如下: x1,xx1 x2,xx4 x3,xx9本章摘要:1、Java语言的注释方式有三种:(1)、记号开始,至该行结束;(2)、与这两个符号之间的文字;(3)、文档注释。2、如果将一个类声明成public,则它的文件名称必须取成这个类的名称才能顺利编译。3、main()在Java里是一个相当特殊的method,它一定要声明成public,使得在类的其它地方皆可调用到它,且main()method没有返回值,所以在它之前要加上void关键字。4、System。out是指标准输出,其后所连接的println是由print与line所组成的,意思是将后面括号中的内容打印在标准输出设备显示器上。5、由于Java程序是由类所组成,所以在完整的Java程序里,必须且至少有一个类。6、Java的变量名称可以由英文字母、数字、下划线()和美元符号()组成,但标识符不能以数字开头,也不能是Java中的保留关键字。此外,Java的变量有大小写之分。7、变量的设置有以下三种方法:在声明的时候设置、声明后再设置、在程序中的任何位置声明并设置。8、提高程序可读性的方法有:(1)在程序中加上批注;(2)为变量取个有意义的名称;(3)保持每一行只有一个语句;(4)适当的缩进。