Java编程入门(2.1):基础Java应用程序

jopen 9年前

程序是指可以通过计算机执行一系列指令组成的任务。一个简单的想法,但是计算机运行任何指令都必须按照计算机可以使用的方式编写。这意味着,程序必须使用编程语言编写。编程语言区别于普通人类语言的地方在于它完全明确并且对程序中允许和不允许的定义都非常严格。确定哪些是被允许的规则被称为语言的语法。语法详细说明了语言的基本词汇以及如何使用循环、分支和子程序来组建程序。一个语法正确的程序是可以被成功的编译或执行的;有语法错误的程序会被驳回(希望可以返回有用的错误信息以帮助你改正问题)。

因此,要做一个成功的程序员,你必须对你使用的编程语言的语法有详细的了解。然而,语法只是一部分,对于写一个可以运行并且返回正确结果的程序而言并不足够!此外,程序的含义必须正确。程序的含义被称为语义。更准确的说,编程语言的语义是指决定使用这个语言所编写的程序含义的一系列规则。一个语义正确的程序可以完成你希望它完成的功能。

进一步说,一个语法和语义正确的程序可能依然是一个很糟糕的程序。正确使用语言和很好的使用语言是不一样的。例如,好的程序是有“风格”的。它的写作方法使得人们可以很简单的阅读和理解。它会依循其它程序员熟悉的惯例。并且它有一个整体设计使得人们可以读得其意。计算机完全不在意这种设计,但对人类读者,是很重要的。编程的这些方面通常被称为语用(我通常会使用更通用的术语:风格。)

当我引进一个新的语言特性时,我会解释这个特性的语法、语义和一些语用。你得记住语法,这是简单的部分。然后你得通过给出的例子意会语义,确保你理解它们的使用方式,更理想一点,可以自己写一些短程序来检测你的理解。然后你得尝试着欣赏和吸收语用——这意味着如何很好的使用语言特性,有了风格会为你赢得其他程序员的钦佩。

当然,即使你已经对语言的每一个特性都很熟悉了,也不意味着你就是一个程序员了。你还得学习如何构建复杂的程序解决特定的问题。要实现这个,你需要经验和审美。你会在本书中发现一些软件开发的小贴士。

我们使用一个非常传统的问题来作为探究Java的开端:写一个显示“Hello World!”这一信息的程序。这听起来很微不足道,不过这么做确实是学习新的编程语言的一大步(特别是学习人生第一个编程语言的时候)。这意味着你理解了以下这些基本步骤:

  1. 学会计算机文本程序,
  2. 编译程序,并且
  3. 执行编译后的程序。

第一次过程中,以上每一步都可能需要经过几次试错。我不会在此详解如果实现每一步的细节;它取决于特定的计算机和你使用的Java编程环境。可以参考2.6节,了解在特定编程环境下创建和运行Java程序的信息。但是通常来说,你需要使用一种文本编辑器写入程序,并且存成文件。然后,你需要使用一些命令来编译这个文件。你要么会得到一个报错信息告诉你程序有语法错误,要么得到该程序的编译后的版本。在Java中,程序被编译成Java字节码,而不是机器语言。最终,你可以使用适当的命令来运行这个编译后的程序。对Java而言,你实际上是使用解释器来执行Java字节码。你的编程环境可能会为你自动执行一些步骤——例如,编译步骤通常是自动的——但是可以肯定的是这三个步骤在后台一定是都被执行了的。

下文是一个显示“Hello World!”信息的Java程序。不要期望完全了解这个程序的每一句话;其中有一些会在之后的几个章节中介绍:

/** A program to display the message   *  "Hello World!" on standard output.   */  public class HelloWorld {       public static void main(String[] args) {        System.out.println("Hello World!");     }    }   // end of class HelloWorld

实际打印信息的指令是下面这句:

System.out.println("Hello World!");

这个指令是一个子程序调用语句的例子。它使用了一个叫做System.out.println的“内置子程序”来实现功能。回想一下,子程序是指将一系列执行指令组合在一起并赋予一个名字的指令集合。这个名字可以在需要执行这个指令集合的时候使用,以调用这个子程序。一个内直子程序是已经被定义好的作为语言的一部分的存在,因此在任何程序中都自动可用。

当你执行这个程序的时候,信息“Hello World!”(不包括引号)会被显示在标准输出中。不幸的是,我不能准确的表述这句话。Java是为了运行在许多不同的平台而设计的,而标准输出在不同的平台意味着不同的东西。但是,你可以期待消息出现在一些方便或不方便的地方。(如果你是用命令行接口,就好像Oracle的Java开发包里的那样,你输入一个指令告诉计算机执行程序。计算机会将程序的输出结果:Hello World! 输出到下一行中。在一个类似于Eclipse这样的集成开发环境中,输出可能会出现在环境的某一个窗口中。)

你一定对上面那个程序的其它部分也很好奇。它其中一部分是由注释组成的。程序中的注释会全部被计算机忽视;它们是为了人类阅读而存在。这并不意味着它们不重要。程序不止要给电脑读,也要给人读,没有注释的话,程序就很难被理解。Java有两种注释形式。第一种是使用//开头,延伸到一行的结束。也就是上面那个程序的最后一行的注释形式。计算机会无视//以及之后的同一行的所有内容。第二种是使用/*开头,使用*/结尾,它可以扩展到多行。上面的程序的前三行就是这第二种注释的实例。(实例中的注释实际上是使用/**开头的,它是有特殊含义的;它是“制作文档”(Javadoc)注释,被用来生成程序文档。

该程序的其它部分需要遵循Java语法规则。Java的所有程序都必须写在“类”(Class)里面。上面那个程序的第一行(注释除外)意思是这是个叫做HelloWorld的类。“HelloWorld”既是这个类的名字,也是这个程序的名字。并不是每个类都是一个程序。为了定义一个程序,一个类必须包含一个叫做main的子程序,使用以下这种形式:

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

当你让Java解释器运行程序时,解释器会调用这个main()子程序,执行它包含的所有语句。这些语句组成了一个脚本,告诉计算机当程序执行的时候实际上应该运行哪些东西。main()子程序可以调用定义在同一个类甚至定义在其它类中的其它子程序,但是main()子程序决定其它子程序的调用方法和调用顺序。

main()的第一行的单词“public”的意思是这个程序可以被程序外部所调用。这点至关重要,因为main()程序是被Java解释器调用的,它是程序外部的。第一行的剩下部分现在更难以解释。目前,就把它们当做必须的语法吧。子程序的定义——也就是用来说明它做了什么的指令——组成了“语句”序列,包含在花括号{和}里。这里,我是用了statements作为实际组成程序的语句的占位符。在整本书中,我将始终使用类似的格式:任何这种格式(绿色粗体)都是用来描述某种你需要在实际程序中输入的内容的占位符。

按照上文所提及的,子程序不能独自存在。它必须是类的一部分。一个定义有公共类的程序有着如下的格式:

public class program-name {        optional-variable-declarations-and-subroutines        public static void main(String[] args) {         statements      }        optional-variable-declarations-and-subroutines    }

第一行的名字是这个程序的名字,也是这个类的名字。(请再次记住,这个program-name 是实际名字的占位符!)

如果这个类的名字叫HelloWorld,那么这个类就必须被保存在一个叫做HelloWorld.java的文件里。当这个文件被编译后,会生成另一个叫做HelloWorld.class的类文件。这个叫HelloWorld.class的类文件包含程序被编译后形成的Java字节码,可以被Java解释器执行。HelloWorld.java被称为这个程序的源代码。如果要执行这个程序,你只需要编译类文件,而不需要源代码。

这章的程序的布局,例如空白行和缩进,并不是这个语言的语法或语义的一部分。计算机不在乎布局——你可以把整个程序写在一行里,只要你乐意。但是,布局对于人们阅读很重要,有一些布局风格是被大多数程序员所遵循的。

还要注意,根据上面的语法定义,程序可以包含其它除了main()以外的子程序,又被称作“变量声明”。你从第四章开始会了解更多。

 

原文链接: math.hws.edu 翻译: ImportNew.com - 顾星竹
译文链接: http://www.importnew.com/16968.html