java基础就业培训教程第二章张孝祥.doc.pdf

上传人:ylj18****41534 文档编号:72405945 上传时间:2023-02-10 格式:PDF 页数:42 大小:2.70MB
返回 下载 相关 举报
java基础就业培训教程第二章张孝祥.doc.pdf_第1页
第1页 / 共42页
java基础就业培训教程第二章张孝祥.doc.pdf_第2页
第2页 / 共42页
点击查看更多>>
资源描述

《java基础就业培训教程第二章张孝祥.doc.pdf》由会员分享,可在线阅读,更多相关《java基础就业培训教程第二章张孝祥.doc.pdf(42页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第第 2 2 章章JavaJava 编程基础编程基础2.1Java 基本语法格式2.1.1Java 代码的落脚点Java 中的所有程序代码都必须存在于一个类中,用 class 关键字定义类,在 class 前面可以有一些修饰符。格式如下:修饰符 class 类名程序代码2.1.2Java 是严格区分大小写的例如,我们不能将 class 写成 Class。2.1.3Java 是一种自由格式的语言在 Java 中,所有的程序代码分为结构定义语句和功能执行语句,一条语句可以写在若干行上,功能执行语句的最后必须用分号(;)结束,不必要对齐或缩进一致。可以按自己的意愿任意编排,只要每个词之间用空格、制表

2、符、换行符或大括号、小括号这样的分隔符隔开就行。例如第一章的例子程序改成下面这种编排方式也是可以的:class Testpublic static void main(String args)System.out.println(“My first java program”);用哪种代码书写的格式因个人爱好而定,但出于可读性的考虑不建议使用这种格式。脚下留心:脚下留心:1.Java 程序中一句连续的字符串不能分开在两行中写,以上程序如果写成下面这种方式是会编译出错的:class Testpublic static void main(String args)System.out.printl

3、n(“My first javaMy first java program program”);2.功能执行语句的最后必须用分号(;)结束,但中国的初学者常将这个英文的(;)误写成中文的(;)自己却找不出错误的原因来,对于这样的情况,编译器通常会报告“illegal character”(非法字符)这样的错误信息。242.1.4Java 程序的注释为程序添加注释可以提高程序的可读性,它是写在程序里的信息,用来说明某段程序的作用和功能。Java 里的注释根据不同的用途分为三种类型:单行注释多行注释文档注释第一种是单行注释,就是在注释内容前面加双斜线(/),java 编译器会忽略掉这部分信息。如下

4、例:int c=10;/定义一个整型第二种是多行注释,就是在注释内容前面以单斜线加一个星形标记(/*)开头,并在注释内容末尾以一个星形标记加单斜线(*/)结束。当注释内容超过一行时一般使用这种方法,如:/*int c=10;/定义一个整型int x=5;*/第三种注释方法是文档注释,是以单斜线加两个星形标记(/*)开头,并以一个星形标记加单斜线(*/)结束。用这种方法注释的内容会被解释成程序的正式文档,并能被包含在诸如 javadoc之类的工具程序提取的文档里,用以说明该程序的层次结构及其方法。关于这种注释的详细用法,我们会在后面的章节中讲解。脚下留心:脚下留心:/*/中可以嵌套“/”注释,但

5、不能嵌套“/*/”,如:下面的注释是非法的:/*/*int c=10;*/int x=5;*/不得不说:不得不说:我们要从开始就养成良好的编程风格,软件编码规范中说:“可读性第一,效率第二”。在程序中必须包含适量的注释,以提高程序的可读性和易于维护性,程序注释一般占程序代码总量的 20%-50%。2.1.5Java 中的标识符Java 中的包、类、方法、参数和变量的名字,可由任意顺序的大小写字母、数字、下划线(_)和美元符号($)组成,但标识符不能以数字开头,不能是关键字。下面是合法的标识符:indentifier,usernameuser_name_userName25$username下面

6、是非法的标识符:class98.3Hello World正确的路有一条,错误的路千万条,何苦要去记住有哪些错误的路呢?永远用字母开头,尽量不要包含其他的符号就行了。2.1.6 Java的关键字和其他语言一样,Java 中也有许多保留关键字,如public,break 等,这些保留关键字不能被当作标识符使用。其实大家不用死记硬背到底有哪些关键字,知道有这回事就足够了,万一不小心把某个关键字用作标识符了,编译器就能告诉我们这个错误。下面是 Java 的关键字列表,大家就留个初步的印象吧!abstract boolean break byte case catch charabstract bool

7、ean break byte case catch charclass continue default do double else extendclass continue default do double else extendfalse final finally float for if implementfalse final finally float for if implementimport instanceof int interface long native newimport instanceof int interface long native newnull

8、 package private protected public return shortnull package private protected public return shortstatic strictfp super switch this throw throwsstatic strictfp super switch this throw throwstransient true try void volatile while synchronizedtransient true try void volatile while synchronized注意:Java 没有

9、 sizeof、goto、const 这些关键字,但不能用 goto、const 作为变量名。2.1.7 Java中的常量常量就是程序里持续不变的值(有的书中称其为字面量或实字),Java 中的常量包含整型常量,浮点数常量,布尔常量等,下面我们来看一下它们是如何表示的:整型常量整型常量整型常量可以分为十进制,十六进制和八进制来表示:十进制:0 1 2 3 4 5 6 7 8 9注意:以十进制表示时,第一位不能是0(数字 0 除外)。十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F注意:以十六进制表示时,需以0 x 或 0X 开头,如:0 x8a

10、0Xff 0X9A 0 x12八进制:0 1 2 3 4 5 6 7注意:八进制必须以 0 开头。如:0123 045 098 046长整型:长整型必须以 L 做结尾,如:9L 156L浮点数常量:浮点数常量:26浮点数常量有 float(32 位)和 double(64 位)两种类型,分别叫做单精度浮点数和双精度浮点数,表示浮点数时,要在后面加上 f(F)或者 d(D),用指数表示也可以。注意:由于小数常量的默认类型为 double 型,所以 float 类型的后面一定要加 f(F),用以区分。如:2e3f 3.6d.4f 0f3.84d 5.022e+23f都是合法的。布尔常量:布尔常量:

11、布尔常量用于区分一个事物的正反两面,不是真就是假。其值只有两种:true 和 false。字符常量:字符常量:字符常量是由英文字母、数字、转义序列、特殊字符等的字符所表示,它的值就是字符本身,如:a8 t u0027字符常量要用两个单引号括起来,Java 中的字符占用两个字节,是用 unicode 码表示的,我们也可以使用 unicode 码值加上u 来表示对应的字符。字符串常量:字符串常量:字符串常量和字符型常量的区别就是:前者是用双引号括起来的常量,用于表示一连串的字符。而后者是用单引号括起来的,用于表示单个字符。下面是一些字符串常量:Hello World 123 Welcome nXX

12、X多学两招:多学两招:有些时候,我们在无法直接往程序里面写一些特殊的按键,比如你想打印出一句带引号的字符串,或者判断用户的输入是不是一个回车键,等等。其实它们都可以用一些转义字符来表示,以下一些特殊字符的意义,供参考:r 表示接受键盘输入,相当于按下了回车键;n 表示换行;t 表示制表符,相当于 table 键;b 表示退格键,相当于 Back Space;表示单引号,是双引号;表示一个斜杠“”。比如上面的Welcome n XXX,它的运行结果是:WelcomeWelcomeXXXXXXnullnull 常量:常量:null 常量只有一个值,用null 表示,表示对象的引用为空。2.2 变量

13、及变量的作用域2.2.1变量的概念变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。根据所存储的数据类型27的不同,有各种不同类型的变量。用一个变量定义一块内存以后,程序就可以用变量名代表这块内存中的数据。我们来看一下:int x=0,y;y=x+3;第一句代码分配了两块内存用于存储整数,分别用x,y 作为这两块内存的变量名,并将x 标识的内存中的数据置为 0,y 标识的内存中的数据为其原始状态,可以认为是一个未知数。第二句代码的执行过程,程序首先取出 x 代表的那块内存单元的数,加上3,然后把结果放到 y 所在的那块内存单元,这样就完成了y=x+3 的运算。2.2.2Java 的

14、变量类型在 Java 中内建有八种基本变量类型来存储整数、浮点数、字符和布尔值。整数类型(byte,short,int,long)数值型浮点类型(float,double)基本数据类型字符型(char)布尔型(boolean)数据类型类(class)引用数据类型接口(interface)数组其中引用数据类型会在以后章节详细讲解,这里只讲基本数据类型。与其他编程语言不同的是,Java 的基本数据类型在任何操作系统中都具有相同的大小和属性,不像 C 语言,在不同的系统中变量的取值范围不一样,在所有系统中,Java 变量的取值都是一样的,如表 2.1。这也是 Java 跨平台的一个特性。有四种数据类

15、型用来存储整数,它们具有不同的取值范围,分别如表2.1 所示:类型名大小取值范围byte 8 位 -128127short 16 位 -3276832767int 32 位 -21474836482147483647long 64 位 -92233720368547758089223372036854775807表 2.1这些类型都是有符号的,所有整数变量都无法可靠地存储其取值范围以外的数据值,因此定义数据类型时一定要谨慎。有两种数据类型用来存储浮点数,它们是单精度浮点型(float)和双精度浮点型(double)。28浮点数在计算机内存中的表示方式比较复杂,我们在后面的课程为大家进行分析,单

16、精度浮点型和双精度浮点型的取值范围见表2.2:类型名大小取值范围 float 32位 1.4E-453.4E+38,-1.4E-45-3.4E+38 double 64位 4.9E-3241.7E+308,-4.9E-324-1.7E+308表 2.2char 类型用来存储诸如字母、数字、标点符号及其他符号之类的单一字符。与 C 语言不同,Java的字符占两个字节,是 unicode 编码的。独家见解:独家见解:计算机里只有数值,当你在内存中看到一个数值时,这个数值可能代表各种意义,比如你看到的文字、图像和听到的声音等都是使用数字形式来表示的。生活中的数值也可以代表其他意义,如 1234 可以

17、代表密码,存款额,电报信息等。根据上下线索,我们能够知道这些数值代表的意义。其实,字符也是一个数字,当我们要给一个字符变量赋值时,就可以直接用整数,如:97 对应字符a,我们使用 char ch=97 将字符a赋值给变量 ch。98 对应的是字符b,当在内存里面躺着一个 99 时,请问,它对应键盘上的哪个字母呢?大家都能够猜出就是字符c。如果我们要将字符x赋给一个 char 变量,该填一个怎样的整数呢?显然,我们不太容易记住每个字符所对应的数字,所以,我们就用单引号加上这个字符本身来表示那个字符对应的数字,如char ch=x。boolean 类型用来存储布尔值,在Java 里布尔值只有两个,

18、要么是true,要么就是 false。Java 里的这八种基本类型都是小写的,有一些与它们同名但大小写不同的类,例如 Boolean等,它们在 Java 里具有不同的功能,切记不要互换使用。2.2.3注意变量的有效取值范围系统为不同的变量类型分配不同的空间大小,如 double 型常量在内存中占八个字节,float的变量占四个字节,byte 型占一个字节等,如图 2.1 所示:29图 2.1byte b=129;/编译报错,因为 129 超出了 byte 类型的取值范围。float f=3.5;/编译报错,因为小数常量的默认类型为double 型。double 型常量在内存中占八个字节,而 J

19、ava 只为 float 的变量分配四个字节的空间,要将八个字节的内容装入四个字节的容器,显然有问题。改为:float f=3.5f;编译就可以通过了,因为3.5f 是一个 float 型常数,在内存中只占4 个字节。2.2.4 基本数据类型之间的转换在编写程序过程中,我们经常会遇到的一种情况,就是需要将一种数据类型的值赋给另一种不同数据类型的变量,由于数据类型有差异,在赋值时就需要进行数据类型的转换,这里就涉及到两个关于数据转换的概念:自动类型转换和强制类型转换。自动类型转换(也叫隐式类型转换)要实现自动类型转换,需要同时满足两个条件,第一是两种类型彼此兼容,第二是目标类型的取值范围要大于源

20、类型。例如,当 byte 型向 int 型转换时,由于 int 型取值范围大于 byte 型,就会发生自动转换。所有的数字类型,包括整型和浮点型彼此都可以进行这样的转换。请看下面的例子:byte b=3;int x=b;/没有问题,程序把 b 的结果自动转换成了 int 型了 强制类型转换(也叫显式类型转换)当两种类型彼此不兼容,或目标类型取值范围小于源类型时,自动转换无法进行,这时就需要进行强制类型转换。强制类型转换的通用格式如下:目标类型 变量=(目标类型)值例如:byte a;int b;a=(byte)b;30这段代码的含义就是先将int 型的变量 b 的取值强制转换成 byte 型,

21、再将该值赋给变量a,注意,变量 b 本身的数据类型并没有改变。由于这类转换中,源类型的值可能大于目标类型,因此强制类型转换可能会造成你的数值不准确,从下面的图中就可以看出强制类型转换时数据传递的过程。图 2.2请看下面的程序:程序清单:Conversion.javapublic class Conversionpublic static void main(String args)byte b;int i=266;b=(byte)i;System.out.println(byte to int is+b);程序输出入下:byte to int is 10byte to int is 10字符串

22、可以使用加号(+)同其他的数据类型相连而形成一个新的字符串,读者只要明白二进制与十进制数之间的转换关系,就不难明白上面程序打印的结果了。独家见解独家见解:要理解类型转换,大家可以这么想像,大脑前面是一片内存,源和目标分别是两个大小不同的内存块(由变量及数据的类型来决定),将源数据赋值给目标内存的过程,就是用目标内存块去套取源内存中的数据,能套多少算多少。2.2.5 表达式的表达式的数据类型自动提升我们先看下面一个错误程序:程序清单:Test.java class Test public static void main(String args)byte b=5;b=(b-2);b=(b-2);

23、System.out.println(b);31这段代码中,5-2 的值并未超出 byte 型取值范围,然而当执行这段代码时,Java 报出如下错误:Test.java:6:possible loss of precisionTest.java:6:possible loss of precisionfound :intfound :intrequired:byterequired:byte b=(b-2);b=(b-2);1 error1 error这是因为在表达式求值时,变量值被自动提升为int 型,表达式的结果也就成了int 型,这时要想把它赋给 byte 型变量就必须强制转换了。因此前

24、面代码中粗体的部分就应该改成:b=(byte)(byte)(b-2);这种特殊情况在编程过程中如果遇到了,只要知道怎么解决就可以了。关于类型的自动提升,Java 定义了若干适用于表达式的类型提升规则。第一,所有的 byte 型、short 型和 char 的值将被提升到 int 型。第二,如果一个操作数是long 型,计算结果就是 long 型;第三,如果一个操作数是float 型,计算结果就是 float 型;第四,如果一个操作数是double 型,计算结果就是double 型。以下代码演示了 Java 的类型自动提升规则:程序清单:Promote.javaclass Promotepubl

25、ic static void main(String args)byte b=50;char c=a;short s=1024;int i=50000;float f=5.67f;double d=.1234;double result=(f*b)+(i/c)-(d*s);System.out.println(f*b)+(i/c)+-+(d*s);System.out.println(f*b)+(i/c)+-+(d*s);System.out.println(result=+result);我们看看在下列代码行的类型提升:double result=(f*b)+(i/c)-(d*s);在第一个

26、子表达式 f*b 中,变量b 被提升为 float 类型,该子表达式的结果也提升为float 类型。接下来,在子表达式i/c 中,变量 c 被提升为 int 类型,该子表达式的结果提升为int 类型。然后,子表达式 d*s 中的变量 s 被提升为 double 类型,该子表达式的结果提升为double 类型。最后,这三个结果值类型分别是float 类型,int 类型,和double 类型。float 类型加 int 类32型的结果是 float 类型。然后 float 类型减去 double 类型,该表达式的最后结果就是double 类型。多学两招:多学两招:System.out.printl

27、n()除了可以在屏幕上打印字符串外,还可以直接在屏幕上打印其他类型的数据,读者再想想 System.out.println(a+1)在屏幕上的打印结果与 System.out.println(+a+1)在屏幕上的打印结果有什么不同呢?前者将字符a与整数 1 相加后得到的结果是整数98,后者将一个空字符串与字符a相连后再与整数 1 相连形成一个新的字符串“a1”。2.2.6变量的作用域大多数程序设计语言都提供了“变量作用域”(Scope)的概念。在C、C+和 Java 里,一对花括号中间的部分就是一个代码块,代码块决定其中定义的变量的作用域。代码块由若干语句组成,必须用大括号包起来形成一个复合语

28、句,多个复合语句可以嵌套在另外的一对大括号中形成更复杂的复合语句。如:int x=0;x=x+1;int y=0;y=y+1;代码块决定了变量的作用域,作用域决定了变量的“可见性”以及“存在时间”。参考下面这个例子:程序清单:TestScope.javapublic class TestScope public static void main(String args)int x=12;int q=96;/x 和 q 都可用 System.out.println(x is+x);System.out.println(q is+q);q=x;/*错误的行,只有 x 可用,q 超出了作用域范围*/

29、System.out.println(x is+x);q 作为在里层的代码块中定义的一个变量,只有在那个代码块中位于这个变量定义之后的语句,才可使用这个变量,q=x 语句已经超过了 q 的作用域,所以编译无法通过。记住这样的一个道理,在定义变量的语句所属于的那层大括号之间,就是这个变量的有效作用范围,但不能违背变量先定义后使用的原则。脚下留心:脚下留心:下面这样书写的代码在C 和 C+里是合法的:33 int x=12;int x=96;x=x+4;/x 运算后的结果为 100 x=x-5;/x运算后的结果为 7,而不是 95。在 C 和 C+里面,上面的两个 x 相当于定义了两个变量,第二层

30、大括号里面的代码对x 的操作,都是对第二个 x 的操作,不会影响到第一个x。第一层大括号里面的代码对x 的操作,都是对第一个 x 的操作,跟第二个 x 没有任何关系。但这种做法在 Java 里是不允许的,因为Java 的设计者认为这样做使程序产生了混淆,编译器会认为变量 x 已在第一层大括号中被定义,不能在第二层大括号被重复定义。2.2.7局部变量的初始化在一个函数或函数里面的代码块中定义的变量称为局部变量,局部变量在函数或代码块被执行时被创建,在函数或代码块结束时被销毁。局部变量在进行取值操作前必须被初始化或进行过赋值操作,否则会出现编译错误,如下面的代码:程序清单:TestVar.java

31、public class TestVar public static void main(String args)int x;/应改为 int x=0;x=x+1;/这个 x 由于没有初始化,编译会报错。System.out.println(x is+x);2.3 函数与函数的重载2.3.1 函数假设我们有一个游戏程序,在程序运行过程中,我们要不断地发射炮弹。发射炮弹的动作都需要使用一段百行左右的程序代码,我们在每次发射炮弹的地方都要重复加入这一段百行程序代码,程序会变得非常臃肿,程序的可读性也就非常差。假如我们要修改发射炮弹的程序代码,需要修改每个发射炮弹的地方,很可能就会发生遗漏。几乎所有

32、的编程语言中都要碰到这个问题,各种编程语言都将发射炮弹的程序代码从原来的主程序中单独拿出来,做成一个子程序,并为这个子程序安排一个名称,在主程序中需要使用到子程序的功能的每个地方,只要写上子程序的名称就行了,计算机便会去执行子程序中的程序代码,当子程序中的代码执行完后,计算机又会回到主程序中接着往下执行。在Java 中,我们将这种子程序叫函数。我们来写一个程序来说明函数的作用与编写方式,程序在窗口上打印出 3 个由*组成的矩形,如下图所示。34图 2.3我们可以用下面的程序来实现:程序清单:Func1.javapublic class Func1public static void main(

33、String args)/下面是打印出第一个矩形的程序代码for(int i=0;i3;i+)System.out.println();/下面是打印出第二个矩形的程序代码for(int i=0;i2;i+)System.out.println();/下面是打印出第三个矩形的程序代码for(int i=0;i6;i+)for(int j=0;j4;j+)System.out.println();System.out.print(*);for(int j=0;j5;j+)System.out.println();/换行System.out.print(*);35for(int j=0;j10;j+

34、)System.out.println();System.out.print(*);System.out.println();看不懂上面程序中的 for 语句的读者,可以先看本章后面关于for 语句的讲解,即使你现在不愿意去看,也没多大关系,你还是能够发现,上面程序中的每一段打印出矩形的代码,除了宽度和高度不一样,其他的地方都一样。我们可以把打印出矩形的代码作为子程序单独从程序中提出来,并用一个“名称”来标记这段代码,以后再碰到要打印矩形时,直接调用这个“名称”就可以了。这样,我们对打印矩形的程序代码只写了一遍,而不用重复书写那么多次了。代码如下:程序清单:Func2.javapublic c

35、lass Func2 public static void drawRectangle(int x,int y)public static void main(String args)drawRectangle(3,5);drawRectangle(2,4);drawRectangle(6,10);for(int i=0;ix;i+)System.out.println();for(int j=0;jy;j+)System.out.println();/换行System.out.print(*);以上代码中,我们提出的这段代码就是函数体,用来标记这段代码的“名称”(drawRectangle)

36、,就是函数名,函数名和函数体共同组成了函数,在Java 中,我们也称之为方法。这个函数需要接受两个整数类型的参数,一个代表矩形的宽度,另一个代表这个矩形的高度。有时候,函数还需要返回一个结果,如果我们要编写一个求解矩形面积的函数,该函数就要返回一个代表面积的结果,函数的返回结果都是有类型的。所以一个函数的定义必须由三部分组成,定义一个函数的格式如下:返回值类型 函数名(参数类型 形式参数 1,参数类型 形式参数 2,.)36程序代码returnreturn 返回值;返回值;其中:形式参数:形式参数:在方法被调用时用于接收外部传入的数据的变量。参数类型参数类型:就是该形式参数的数据类型。返回值:

37、返回值:方法在执行完毕后返还给调用它的程序的数据。返回值类型:返回值类型:函数要返回的结果的数据类型。实参:实参:调用函数时实际传给函数形式参数的数据。如果一个函数不需要返回值,我们可以省略最后的 return 语句。如果你的函数里没有 return语句,则编译时系统会自动在函数的最后添加一个“return;”。独家见解:独家见解:如何理解函数返回值类型为void 的情况,如上面打印矩形的函数,不用返回任何结果,那么,返回值类型那里该填什么呢?对于这种情况,我们就用 void 作为返回值类型,意思是“不知道是什么类型,可定义函数时又非要填写一个返回值类型,就用它充数吧!”下面我们再编写一个求矩

38、形面积的函数,来了解一下函数有返回值的情况。程序清单:Func3.javapublic class Func3 public static int getArea(int x,int y)public static void main(String args)int area=getArea(3,5);System.out.println(first Acreage is +area);System.out.println(second Acreage is+getArea(2,4);getArea(6,10);return x*y;在上面的 getArea 函数中,用到了一个“returnr

39、eturn(返回值)(返回值)”语句,语句,用于终止函数的运行并返回该函数的结果给调用者。如果函数没有返回值或调用程序不关心函数的返回值,可以用下面这样的格式调用定义的函数:函数名(实参 1,实参 2,.)如上面的 getArea(6,10);语句。如果调用程序需要函数的返回结果,我们要用下面这样的格式调用定义的函数:37变量=函数名(实参 1,实参 2,.)如上面 int area=getArea(3,5);语句。对于有返回值的函数调用,我们也可以在程序中直接使用返回的结果,如这一句:System.out.println(second Acreage is+getArea(2,4);我们还可

40、以在函数的中间使用return 语句提前返回,如打印矩形面积的函数,首先应检查传入的参数(即宽度和高度)是否为负数,为负则提前返回。修改上面的Func3.java,如下:程序清单:Func4.javapublic class Func4 public static int getArea(int x,int y)public static void main(String args)int area=getArea(3,5);System.out.println(first Acreage is +area);System.out.println(second Acreage is+getAr

41、ea(2,4);getArea(6,10);if(x=0|y=0)return x*y;return-1;这样的程序对传入的参数值进行了检查控制,明显要专业得多,也是软件编码规范中的一个起码要求。很多程序错误都是由非法参数引起的,我们应该充分理解并有效地使用类似上面的方式来防止此类错误。Java 中所有函数都包含在类里面,在 Java 的一个类中定义的函数也叫这个类的方法(method),本书中提到的函数就是方法,方法就是函数。2.3.2 函数的参数传递过程下面我们来看一下函数的参数传递过程,如图:图 2.438前面讲过,Java 程序运行时虚拟机会先找到这个程序的main 函数,接着从 ma

42、in 函数里面取出一条一条代码来执行,以上面的程序 Func4.java 为例,当执行到 int area=getArea(3,5);这个语句时,程序会跳转到 getArea(int x,int y)这个函数的内部去执行,先把实参(3,5)分别赋值给形式参数(int x,int y),然后返回 x*y 的结果(return x*y;),接着回到 main 里面,把结果赋值给整型变量 area。这就是函数的参数传值整个过程。多学两招:形式参数 x 和 y 就相当于函数 getArea 中定义的两个局部变量,在函数被调用时创建,并以传入的实参作为初始值,函数调用结束时也就被释放了,不会影响到主程序

43、中其他的 x 和 y(如果有的话),因为它们属于不同作用域中的变量,它们是互不相干的变量。2.3.3 函数的重载函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。在这种情况下,该函数就叫被重载(overloaded)了,这个过程称为函数的重载(method overloading)。如下面的程序:程序清单:Test.javapublic class Testpublic static void main(String args)public static int add(int x,int y)public static int add(int x,i

44、nt y,int z)public static double add(double x,double y)return x+y;return x+y+z;reutrn x+y;int isum;double fsum;isum=add(3,5);isum=add(3,5,6);fsum=add(3.2,6.5);39Java 的编译器很聪明,能够根据调用函数时所传递的参数的个数和类型选择相应的函数。重载函数的参数列表必须不同,要么是参数的个数不同,要么是参数的类型不同。重载函数的返回值类型可以相同,也可以不同。思考一下:如果两个方法的参数类型和个数完全一样,返回值类型不同,行不行呢?如果你是

45、Java 的设计者,而且你的用户在程序里编写了这样的两个方法,在调用时,你能根据他所传递的参数来为他选择到底该用那个吗?显然没有办法吧!那就是不能这样做呗!学编程不需要死记硬背,靠的是动脑筋来思考,这样的学习才能做到举一反三、触类旁通。2.4Java 中的运算符运算符是一种特殊符号,用以表示数据的运算、赋值和比较。一般由一至三个字符组成,但 Java将其视为一个符号。运算符共分以下几种:算术运算符赋值运算符比较运算符逻辑运算符移位运算符2.4.1 算术运算符加减乘除的四则运算相信读者都很熟悉了,在此不再赘述,这里给出一个表来供读者参考:算术运算符运算符+-+-*/%+-+运算正号负号加减乘除取

46、模自增(前)自增(后)自减(前)自减(后)字符串相加范例+3b=4;-b;5+56-43*45/55%5a=2;b=+a;a=2;b=a+;a=2;b=-aa=2;b=a-He+llo结果3-41021210a=3;b=3a=3;b=2a=1;b=1a=1;b=2Hello表 2.3“+”除字符串相加功能外,还能把非字符串转换成字符串,条件是该表达式中至少有一个字符串对象,如:x+123;的结果是x123。脚下留心:40由于 Java 运算符有从左到右的优先顺序,这里请特别注意一下+a 和 a+以及-a 和 a-的区别,b=+a 是 a 先自增,a 自己变了后才赋值给 b,而 b=a+是先赋值

47、给 b,a 后自增。如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。猜一下这三句代码的结果:int x=3510;x=x/1000*1000;System.out.println(x),再运行一下,看看结果。再想一下为什么?你猜想的结果可能是 3510,但实际运行结果是 3000,其实很简单,在程序运行到表达式“x/1000”的时候,它的结果是3,而不是 3.51。多学两招:读者在日常的编程当中,尽量多读一些别人优秀的源程序,积累一些好的算法,这样对你以后的工作会

48、有很大帮助。如下面的留言板分页问题,和走马灯问题,有的程序员可能会用到一大堆的 if else 和 for 语句来判断和循环,作者在这里给出两个经典的算法。思考题 1:某个培训中心要为新到的学员安排房间,假设共有 x 个学员,每个房间可以住 6 人,让你用一个公式来计算他们要住的房间数(千万不要像向我以前的有些学员开玩笑,说男生和女生是不能分在一块的,我们就不在这考虑了)?答案:(x+5)/6。这种算法还可用在查看留言板的分页显示上:其中 x 是总共的留言数,6 是每页显示的留言数,结果就是总共有多少页。思考题 2:假设你要让 x 的值在 0 至 9 之间循环变化,请写出相应的程序代码。答案:

49、int x=0;while(true)x=(x+1)%10;这样,x 的取值总在 0 与 9 之间循环。2.4.2 赋值运算符如下表:41赋值运算符运算符=+=-=*=/=%=运算赋值加等于减等于乘等于除等于模等于范例a=3;b=2;a=3;b=2;a+=b;a=3;b=2;a-=b;a=3;b=2;a*=b;a=3;b=2;a/=ba=3;b=2;a%=b结果a=3;b=2;a=5;b=2;a=1;b=2;a=6;b=2;a=1;b=2;a=1;b=2;表 2.4注:在 JAVA 里可以把赋值语句连在一起,如:x=y=z=5;在这个语句中,所有三个变量都得到同样的值5。还可以把 x=x+3

50、简写成 x+=3,所有运算符都可以此类推,看多了,写多了就习惯了。2.4.3 比较运算符比较运算符的结果都是 boolean 型的,也就是要么是 true,要么是 false,如下表:比较运算符运算符=!=instanceof运算相等于不等于小于大于小于等于大于等于范例4=34!=3434=表 2.5结果FalseTrueFalseTrueFalseFalse检查是否是类的对象Hello instanceof StringTure脚下留心:比较运算符“=”不能误写成“=”,特别是在 C/C+中,如果你少写了一个“=”,那就不是比较了,整个语句变成了赋值语句,所以有经验的人干脆写成int x=5

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com