您好,欢迎访问三七文档
第一章Java概述本章是Java编程语言的概述,可以让你迅速开始编写Java程序。在本章中,我们概要地讨论Java,而不涉及技术细节,后续章节将详细讨论Java的特性。1.1初步认识Java程序是由类(class)构建而成的。从类定义开始,你可以创建任意多的对象(Object),这些对象通常称为那个类的实例(instance)。你可以将类想象成一个工厂,它具有零件的蓝图和指令,对象则是工厂制造的零件。类包含成员(member),最主要的成员有域(field)和方法(method)。域是属于类本身好哦类对象的数据变量,它们构成对象或类的状态(state)。方法是在域上进行运算从而操纵状态的语句(statement)集合。语句定义类的行为:把值赋给域或其他变量,计算算术表达式,调用方法和控制执行流程。长期以来,介绍任何语言时用的第一个例子都是打印“Hello,world”。classHelloWorld{publicstaticvoidmain(String[]args){System.out.println(“Hello,world”);}}用你熟知的文本编译器把上述源程序存放为文件,然后运行编译器把源程序编译为Java字节码(bytecode),即Java虚拟机的“机器语言”。编辑和编译源程序的细节因系统而异,详细信息可参考系统手册。在我们最常用的系统,即由SunMicrosystem免费提供的Java2软件开发工具包(Java2SDK)上,你需要将上述源程序存在为HelloWorld.java的文件。使用下面的命令进行编译:javacHelloWorld.java要运行该程序时,输入:javaHelloWorld这将执行HelloWorld的main方法。当用户运行该程序时,屏幕上就会显示:Hello,world现在已经有了一个能做点事的Java小程序,但它是什么意思呢?上述程序声明了一个叫做HelloWrld的类,它只有一个成员:main方法。类成员出现在类名后的花括号内{}。main方法是一个特殊的方法:如果想前面那样声明类的main方法,那么,当我们把类作为应用程序运行时,它就会被执行。在运行时,main方法能够创建对象,为表达式求值,调用其他方法,以及完成为应用程序行为所需要的其他任何事情。main方法被声明为public,这样Java虚拟机中的任何对象都能调用它;同时它也被声明为static,这意味着该方法属于类本身,而不是与特定实例相关联。方法名前面是方法的返回类型。main方法声明为void的,因为它不返回任何值,也就没有返回类型。方法名后面是方法的参数(parameter)列表——零个或多个的类型与名字对,彼此间用逗号隔开,整个包含在()之间。main方法仅有的一个参数是String对象的数组,有名字args引用。对象数组以类型名后面加[]的形式表示。从命令行调用该程序时,args包含所带的自变量(argument)。数组、字符串将在本章后面介绍。args对main方法的意义将在第二章第62页介绍。方法的名称和参数列表一起组成方法的签名(signature)。签名和修饰符(比如public和static等)以及抛出异常列表(本征后面将谈到)一起组成方法头(header)。方法的声明(declaration)包括方法头及其后面的方法体——在花括号之间出现的语句块。在本例中,main方法体只包含一条调用println方法的语句——使用分号结束该语句。方法通过提供对象引用(在本实例的System.out中out域属于System类)和方法名(println)来调用,它们之间用句点隔开。HelloWorld通过out对象的println方法,在标准输出流上打印以换行符终止的字符串。输入的字符串是文字串(stringliteral)“HelloWorld”,它作为自变量传递给println。文字串是在双引号“和”之间的字符串序列。1.2变量下一个例子打印FibonacciSaguence序列,这个无穷序列的前几项是:1,1,2,3,5,8,13,21,34FibonacciSaguence的前两项是1和1,后续各项是前两项之和。FibonacciSaguence序列打印程序非常简单,从中可以知道如果声明变量(variable)、编写简单的循环,以及执行基本的算术运算。这个程序像HelloWorld那样声明了一个Fibonacci类,它具有main方法。在main方法中,前两行声明了两个局部变量hi和lo,hi是序列中的当前项,lo则是前一项。局部变量在代码块内部声明,比如在方法体中,但是,它与域不同,域是作为类的成员声明的。声明变量时,必须定义它的类型(type)。hi和lo的类型是int,32位带符号整数,取值范围是。Java的基本数据类型包括整型、浮点型、布尔型、和字符型值。基本数据类型中存储的数据比较直观,它与程序员定义的对象类型不同。类型的每一个便都必须显式定义。Java的基本类型有:booleancharbyteshortintlongfloatdouble在Fibonacci程序中,我们声明hi和lo变量,同时初始化为1.初始值是在变量声明时通过=运算符被初始化表达式所设定。=运算符(也叫赋值运算符)将它左边变量的值设为右边表达式的值。在初始化之前,局部变量尚未确定。用户必须在声明变量时就对变量进行初始化,但如果在给变量赋值之前使用它,Java编译器及会拒绝编译,直到问题得到改正。由于hi和lo是同一种类型,我们就可以用更简洁的方式来声明它们。我们可以一次声明给定类型的多个变量,用逗号将它们(包括其初始化表达式)隔开。例如,你可以用一行等价的代码替换main中的前两行:intlo=1,hi=1;注意,把一行断开不会影响语句的意思——断行、空格、制表符和其他空白符只是为了程序员的方便。程序中的while语句是Java中的一种虚化方式。while语句中的表达式被求值,如果为true(真),就执行循环体,然后,继续测试表达式。当表达式变为false(假)时,while循环结束。如果它永远不为false,程序及会不断运行,除非循环中有break语句或异常发生。while的循环体由单个语句组成。它可能是简单语句(例如,调用一个方法),也可以是其他控制语句,或者语句块——在花括弧之间的零条或多条单独的语句。while循环测试的表达式是职位true或false的布尔值表达式。用比较运算符比较两个值得相对大小,或者用==运算符或!=运算符测试两个值是否相等,这些都可以形成布尔型表达式。上述布尔型表达式hi50,测试序列中当前最大值是否小于50。如果最大值小于50,则打印它的值并计算下一项。如果最大值等于或大于50,控制权就就给while循环体后的第一条语句。在这个程序中,就是main方法的结尾,程序随机结束。为了计算序列中的下一个值,我们进行了一些简单的算术运算,并用=运算符把右边的算术表达式的值赋给左边的变量。正如读者所预期的那样,+运算符计算其操作数的和,而-运算符计算其差。Java语言中定义了许多用于基本整型和浮点型数据的算术运算符,包括加号(+)减号(-)乘号(*)和除号(/),以及后面将谈到的其他运算符。在上例的Fibonacci程序中,println方法接受一个整型变量,而在HelloWorld中,接受一个字符串型变量,其实,println是许多重载(overload)方法之一。经过重载后,方法可以接收不同类型的变量。运行时系统根据传递给它的自变量类型和数量,从而决定实际调用哪个方法。1.3程序中的注释夹杂在程序中的英语文本就是注释。如Fibonacci程序所示,Java有三种形式的注释。注释允许你在代码相关位置编写描述性的文本,便于将来阅读这些代码的程序员理解。这些程序员中可能就有你,只不过是在几个月或几年之后。通过给自己的代码添加注释,可以节省以后的时间。而且,在编写注释时常常会发现代码中的错误,因为要解释代码,这就会迫使你去仔细考虑代码。在/*和*/之间的文本会被编译器忽略。这种类型的注释可以用于某行的一部分,一整行,以及最常见的是(如例中所示),用它来定义多行的注释。对于单行和不到一行的注释。可以用//来告诉编译器,忽略该行中它后面的任何内容。第三种注释出现在最上面,位于/**和*/之间。以两个星号起头的注释叫做文档注释。文档注释紧跟其后的声明部分。在上例中,这些注释主要说明main方法。你可以通过一种工具,把注释提取出来,生成类的参考文档。习惯上,文档注释中或/*和*/之间的每行注释前,都会有一个星号,它是作为给读者展示注释的可视性标志。1.4命名常量常量是指如12、17.9和“StringLikeThis”这样的一些值。常量,正如其子面含义,是指定的、不必运算的,而且在程序生命周期内保持不变的值。Fibonnaci程序打印小于50的所有费波纳数。常量50被用于while循环的表达式,以及描述mian方法的文档注释中。如果你想修改这个例子,使其打印小于100的所有费波纳数,那么,你将不得不浏览整个源代码,查找所有的常量50并将其修改为100。这对于该例并不复杂,但在大多数情况下,这将是一件费时并且容易出错的事情。此外,当人们读到表达式hi50时,并不知道50确切代表什么。这样的“魔术数字”降低了程序的可读性和可维护性。命名常量(namedconstant)是通过名字引用的常量值。例如,在费波纳的例子中,我们就用名字MAX来引用常量50。定义命名常量时要相应地声明其类型值以及初始值。这样并未并以一个常量,而只是定义了一个可以通过赋值语句改变其值的域。要使我们声明的值为常量,可以将其声明为final。fianl域或者变量一旦初始化以后,就不能在更改了——即它是不可变的。此外,我们也不希望命名常量与类的实例相关。所以把它声明为static的。你可以通过类名加句点再加上成员的名字来访问类的static(静态)成员。经过如上声明以后,程序中的牌就可以通过Suit.HEARTS、Suit.SPADES等访问,这样就将所有的牌名组合到一个类中。注意修饰符final和static的顺序无所谓——虽然在程序中我们使用了相同的顺序。在前面的所有例子中,我们已经访问过static域了,你可能意识到——out是system类的static域。1.5Unicode字符假设我们定义了一个处理圆的类,并且希望用一个命名常量类代表符号π。在绝大多数程序语言中,我们将把常量命名为pi,因为大多数语言的标识符(名字的技术术语)仅限于ASCII字符集中的字母和数字。但在Java中,我们可以这样定义:Java将你带进国际化的软件世界:以Unicode这种国际字符集标准来编写Java程序。Unicode是16位字符集,它的字符足够覆盖世界上使用的主要语言,因此π可以用作上例中的常量名。π是Unicode希腊语区的一个合法字符,所以也是Java的有效字符。绝大部分Java程序用ASCII(一种7位标准字符集)或者ISO-Latin-1(一种8位标准字符集,通常称为Latin-1)编写,但是在处理之前它们都要转换成Unicode。这样,Java的字符集就总是Unicode。1.6控制流控制流失决定程序中那条语句将执行以及什么顺序执行的术语。费波纳程序中的while循环就是一种控制流语句,它对于多个语句块,定义了这些分组语句的执行顺序。其他的控制语句包括for,if-else,switchdo–while我们现在改变费波纳程序为序列元素进行编号,并用星号标记偶数元素。为了给序列元素进行编号,我们用for循环代替了while循环。for循环是while循环的简化形式,它增加了循环变量初始化递增部分。ImprovedFibonacci中的for循环与下面的while循环的等价for循环引用一种新的变量声明机制:在初始化部分钟声明循环变量。这种方法很方便,声明的变量只在循环执行时存在,并且只对for循环起作用——其他控制语句都不允许
本文标题:Java编程语言
链接地址:https://www.777doc.com/doc-6372399 .html