Java编程语言基础.ppt
第2章Java编程语言基础【学习目标】1)熟练掌握Java数据类型、常量及变量、运算符。2)熟练掌握数组。3)熟练掌握Java的面向对象概念及应用。4)能够应用面向对象程序设计方法按照现实世界的特点,把复杂的事物抽象为对象。2.1Java概述Java语言是一个简单的、面向对象的、分布的、易于解释的、健壮的、安全的、与平台无关的、可移植的、高性能的、多线程的、动态的计算机程序设计语言。2.2Java数据类型、常量及变量2.2.1基本数据类型Java的基本数据类型包括整型(byte、short、int、long)、字符型(char)、布尔型(boolean)和浮点型(float、double)。数据数据类类型型关关键键字字占用字占用字节节数数/B取取值值范范围围字节型byte1-128127短整型short2-32,76832,767整型int4-2,147,483,6482,147,483,647长整型long8-9,223,372,036,854,775,8089,223,372,036,854,775,807字符型char2布尔型boolean1true或flase单精度浮点型float4-3.4E383.4E38双精度浮点型double8-1.7E3081.7E3082.2.2常量及变量1常量常量是指在程序运行过程中其值不会发生变化的量。Java中常用的常量有整型常量、字符常量、字符串常量、布尔常量及浮点常量。假如在程序中经常使用某一个符号常量,如圆周率等,可使用final关键字声明符号常量。语法格式如下:final=例如:finalfloatPI=3.1415926f;2变量1)声明变量Java中的变量在使用之前需要声明变量的类型,变量声明通常包括两部分:变量类型及变量名。语法格式如下:变量类型变量名;2)变量初始化方法中声明的变量在使用前必须先初始化,否则编译时将发生错误。例如:intabc=10;3)使用变量【例2-1】Java中变量的使用示例。importjava.io.*;publicclassChapters2_1publicstaticvoidmain(Stringargs)inta1=100;/声明整型变量doublea2=34.56;/声明双精度浮点型变量chara3=y;/声明字符型变量System.out.println(a1的值为:+a1);/输出System.out.println(a2的值为:+a2);System.out.println(a3的数据为:+a3);Chapters2_1.java代码如下:2.3运算符2.3.1 2.3.1 算术运算符算术运算符算术运算符(如表2-2所示)用来执行算术运算。表2-2算术运算符运算运算符符描述描述实实例例+使两个数相加a+b-使两个数相减a-b*使两个数相乘a*b/使两个数相除a/b%取模(求余)a%b+对指定变量的值加1a+,+a-对指定变量的值减1b-,-b2.3.2 2.3.2 比较运算符比较运算符比较运算符又称为关系运算符(如表2-3所示),用来比较运算符两边的变量或常量,返回的值为True或Flase。运运算算符符描描 述述实实 例例说说明明大于ab 如果a大于b,则结果为true小于a=大于等于a=b如果a大于等于b,则结果为true=小于等于a=b如果a小于等于b,则结果为true!=不等于a!=b如果a不等于b,则结果为true?:条件a?b:c如果a表达式的结果为true时,返回的值为b,否则值为c表2-3比较运算符2.3.3 2.3.3 逻辑运算符逻辑运算符逻辑运算符(如表2-4所示)用于判断某个表达式的值是True还是False。表2-4逻辑运算符运算符运算符描述描述说说 明明&与 条件都为真时,结果为true,否则为false|或 条件中有一个为真,则结果为true,否则为flase!非 将逻辑值求反,原为真时则为flase,原为假时则为true2.3.4 位运算符位运算符位运算符(如表2-5所示)是对二进制位进行操作。表2-5位运算符运算符运算符描描 述述说说 明明&按位与 参与运算的两个数,若两个数的对应位均为1,结果的对应位则为1,否则为0|按位或 参与运算的两个数,若两个数的对应位的任意一个为1,结果的对应位则为1,否则为0按位非 为一元运算符,他对数据的每个二进制位取反,即把1转换为0,0转换为1按位异或 参与运算的两个数,若两个数的对应位相同,则结果的对应位为0,否则为1右移 该运算符使用了符号扩展,若为正,则在该对象高位补0,若为负,则在高位补1。无符号右移 运算符左侧的运算对象,移位后在高位补0【例2-3】Java中位运算符的使用示例。Chapters2_3.java代码如下:classChapters2_3publicstaticvoidmain(Stringargs)inta=14;intb=5;System.out.println(a&b的结果为:+(a&b);System.out.println(a|b的结果为:+(a|b);System.out.println(b的结果为:+(b);System.out.println(ab的结果为:+(ab);System.out.println(a1的结果为:+(a1的结果为:+(a1);System.out.println(b1的结果为:+(b1);2.3.5 其他运算符其他运算符除前面介绍的运算符外,Java还包含一些其他的运算符,如表2-6所示。运算符运算符描描 述述 下标运算符,常用于数组.分量运算符,用于对象属性或方法的引用(表达式)表达式加括号优先运算(类型)强制类型转换new创建类对象instanceof 测试某一对象是否是一个指定类的实例表2-6其他运算符2.3.6 2.3.6 表达式及运算符的优先级表达式及运算符的优先级1表达式 表达式是由常量、变量或其他操作数与运算符所组成的。表达式用来执行程序中的数据运算,并返回运算结果。Java还有一些将算术运算符与赋值运算符结合而成的新运算符,如表2-7所示。运算符运算符实实 例例说说 明明+=a+=b将a+b的值存至a中,相当于a=a+b-=a-=b将a-b的值存至a中,相当于a=a-b*=a*=b将a*b的值存至a中,相当于a=a*b/=a/=b将a/b的值存至a中,相当于a=a/b%=a%=b将a%b的值存至a中,相当于a=a%b表2-7将算术运算符与赋值运算符结合而成的新运算符2运算符的优先级运运 算算 符符优优 先先 顺顺 序序 由由 高高 到到 低低.()+-!instanceofnew (type)*/%+-=&|&|?:=+=-=*=/=%=&=|=表2-8运算符的优先级2.4 注释注释能够使人们更好地理解代码,注释对程序本身没有任何意义。在Java程序中,可以使用单行注释及多行注释,单行注释使用“/”,多行注释使用“/*”和“*/”,在“/*”与“*/”之间能够有任意多行的注释说明。2.5 流程控制2.5.1条件语句若要根据判断的结果来执行不同的语句时,条件语句if是一个很好的选择。if语句的基本格式如下:if(条件表达式)语句块1else语句块2【例2-5】声明一个整数a,为其赋初值9,在程序中判断a是奇数还是偶数,并将判断的结果输出。Chapters2_5.java代码如下:classChapters2_5publicstaticvoidmain(Stringargs)inta=9;if(a%2=1)System.out.println(a+是一个奇数!);elseSystem.out.println(a+是一个偶数!);2.5.2 2.5.2 循环语句循环语句循环结构是在一定条件下反复执行某程序段的流程结构,被反复执行的程序段称为循环体。Java中共有三种循环语句:for、while和dowhile。1for循环语法格式如下:for(初始化表达式;判断条件;赋值增减量)循环体“初始化表达式”只在循环开始时执行一次;“判断条件”决定循环执行的条件,每次循环开始时对其进行判断,当“判断条件”为true时,执行循环,否则,循环结束。而“赋值增减量”是在每次循环结束时用以改变“判断条件”中变量的值,结果返回给“判断条件”,如果“判断条件”为false,退出循环,否则,继续执行语句块。【例2-6】使用for循环计算1+2+3+4+100的和。Chapters2_6.java代码如下:classChapters2_6publicstaticvoidmain(Stringargs)inta,sum=0;for(a=1;a=100;a+)sum+=a;/计算sum=sum+aSystem.out.println(1+2+3+.+100=+sum);/将结果输出2while语句若条件表达式的结果为true时,执行while循环中的语句,否则执行while后面的语句。语法格式如下:while(条件表达式)循环体classChapters2_7publicstaticvoidmain(Stringargs)inta=1,sum=0;while(a=100)sum+=a;/计算sum=sum+aa+;/改变循环变量System.out.println(1+2+3+.+100=+sum);/将结果输出【例2-7】使用while语句计算1+2+3+4+100的和。Chapters2_7.java代码如下:3dowhile语句Dowhile语句与while语句相似,不同的是while语句是先计算条件表达式的值,而dowhile语句则是无条件地先执行一遍循环体,再对条件表达式进行判断。如果表达式的值为true,则运行循环体,否则跳出dowhile循环。语法格式如下:do循环体while(条件表达式)【例2-8】使用do-while语句计算1+2+3+4+100的和。Chapters2_8.java代码如下:classChapters2_8publicstaticvoidmain(Stringargs)inta=1,sum=0;dosum+=a;a+;while(a=100);System.out.println(1+2+3+.+100=+sum);/将结果输出 2.5.3 跳转语句跳转语句1continue语句使用continue语句能够越过当前循环体中该语句后面的其他语句,转至循环开始,并继续判断条件表达式的值,以决定是否继续循环。classChapters2_9publicstaticvoidmain(Stringargs)inti;intsum=0;for(i=1;i=100;i+)if(i%2!=0)/判断i%2是否为0continue;sum=sum+i;System.out.println(2+4+6+.+100=+sum);/输出最后结果【例2-9】使用continue语句计算2+4+6+100的和。Chapters2_9.java代码如下:2break语句在循环语句中,break语句用于跳出当前循环体,并继续执行循环后面的语句。classChapters2_10publicstaticvoidmain(Stringargs)intx=Integer.parseInt(args0);intsum=1;/设置积的初值为1for(inti=1;i=x;i+)/设置索引i的初值为1,条件为i=x,增量为1sum*=i;if(i=5)break;/若i=5则跳至下一步骤System.out.println(x=+x+sum=+sum);/将结果输出【例2-10】从命令行中输入一个整数x,若x小于等于5则计算1*2*n的值,否则仅计算至5。Chapters2_10.java代码如下:2.6 2.6 数组数组数组是数据的有序集合,数组中的各个元素具有相同的数组名,数组名及下标用来唯一地确定数组中的元素。在使用前,必须要声明数据类型及分配存储空间。1一维数组1)一维数组的定义一维数组的定义方式有两种:数组的数据类型数组名;数组的数据类型数组名;2)一维数组的存储空间的分配定义了一个数组后,使用new运算符为数组分配内存空间,语法格式如下:数组名=new数组的数据类型数组长度;例如,为包含4个元素的整型数组firstArray分配内存空间:firstArray=newint4;通常,数组的声明与存储空间的分配这两部分能够合并在一起,语法格式如下:数组的数据类型数组名=new数组的数据类型数组长度;例如:intfirstArray=newint43)一维数组元素的引用声明数组并使用运算符new为数组分配完内存空间后,即可引用数组中的每一个元素。数组元素的引用方式如下:数组名数组下标【例2-11】数组的应用实例。Chapters2_11.java代码如下:classChapters2_11publicstaticvoidmain(Stringargs)intx;intfirstArray=newint4;for(x=0;x=0;x-)System.out.println(firstArray+x+=+firstArrayx);4)一维数组的初始化数组元素不仅可以按照上述方式进行赋值,并且可以在定义数组的同时进行初始化。例如:intfirstArray=101,102,103,104,105,106;使用逗号“,”分隔数组中的元素,系统自动为数组分配一定的空间。【例2-12】整数数组x有五个元素,其值分别为10、20、33、45、56,设计一个程序求该数组的和及平均值。Chapters2_12.java代码如下:classChapters2_12publicstaticvoidmain(Stringargs)intx=10,20,33,45,56;doubleavg_x=0.0,sum_x=0.0;for(inti=0;ix.length;i+)sum_x=sum_x+xi;avg_x=sum_x/x.length;(和为:+(long)sum_x+n平均数为:+avg_x);2二维数组 Java中的多维数组被看做是数组的数组。例如,二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。下面,以二维数组为例来进行说明。1)二维数组的定义 二维数组的定义方式为:数组的数据类型 数组名 ;2)二维数组的存储空间的分配 二维数组定义完成后,使用new运算符为数组分配内存空间,其语法格式如下:数组名=new 数组的数据类型行的个数列的个数;数组的声明与存储空间的分配合并在一起的其语法格式如下:数组的数据类型 数组名=new 数据类型行的个数列的个数;3)二维数组的引用二维数组中各元素的引用方式为:数组名index1index2其中,index1、index2为数组下标,可以是整型常数或表达式,如x12等。同样,每一维的下标均从0开始。4)二维数组的初始化二维数组的初始化有两种方式,分别为:直接对各个元素进行赋值;在定义数组的同时进行初始化。例如:intx=1,2,3,4,5,6/定义一个23的数组,同时对数组初始化。【例2-13】设x、y、z均为2行2列的矩阵,已知x、y,求z=x+y。Chapters2_13.java代码如下:classChapters2_13publicstaticvoidmain(Stringargs)doublex=1,2,3,4;doubley=10,11,12,13;doublez=x;for(inti=0;i2;i+)for(intj=0;jcsAge)sFlag=true;elsesFlag=false;retrunsFlag;2构造方法构造方法(也称为构造函数)是一种特殊类型的方法,与类同名,用于创建对象,完成初始化工作。【例2-16】构造方法的应用。CCircle.java代码如下:classCCircle/定义CCircle类doublepi=3.14159;doubleradius;/*定义构造方法,主要是把radius成员赋值为bj(即构造方法所接收的参数;构造方法没有返回值,虽然没有返回值,但定义构造函数时不能加上void,否则编译时将出错。*/publicCCircle(doublebj)radius=bj;publicvoidshow()(半径为:+radius+周长为:+2*pi*radius+面积为:+pi*radius*radius);publicstaticvoidmain(Stringargs)CCirclecircle1=newCCircle(3.5);circle1.show();2.7.4对象1创建对象以圆形类来说,从定义类到创建新的对象,可以将其看为:“先打造一个圆形的模版(即定义类),再用此模版制造圆(即创建对象)”。可通过以下步骤创建对象:(1)声明指向“由类所创建的对象”的变量。(2)对象的实例化,返回对此对象的一个引用。用new能够为一个类实例化多个不同的对象。各对象分别占用不同的内存空间,所以改变其中一个对象的状态不会影响其他对象。(3)执行构造函数,进行初始化。可以对构造函数进行重写,因此,通过给出不同类型或数量的参数能调用不同的构造函数。【例2-17】创建圆形类的对象CCircle circle1 /声明指向对象的变量circle1Circle1=new CCircle();/使用new创建新的对象也可将上面的两个步骤改写为:CCircle circle1=new CCircle();/声明并创建新的对象2对象成员变量的引用可通过以下语法格式访问对象的某个成员变量:对象名称.成员变量名例如,对象circle1的半径可通过下列语句来指定:circle1.radius;/圆对象circle1的半径3对象方法的调用 对象的行为是通过方法表现出来的,对象方法的调用格式如下:对象名称.方法名称【例2-18】计算圆的面积与周长。CCircle01.java代码如下:classCCircle01/定义CCircle01类privatedoublepi=3.14159;privatedoubleradius;publicCCircle01(doublebj)/定义构造方法radius=bj;doubleArea_show()/定义方法Area_show(),用于计算面积returnpi*radius*radius;doublePerimeter_show()/定义方法Perimeter_show(),用于计算周长return2*pi*radius;publicstaticvoidmain(Stringargs)CCircle01circle1=newCCircle01(3.5);/创建新的对象,并为其赋值(圆的面积为:+circle1.Area_show();/调用成员方法(圆的周长为:+circle1.Perimeter_show();2.7.5 2.7.5 继承继承 继承是面向对象的重要特性。继承能够以现有的类为基础,进而派生出新的类。通过该方式,能快速的开发新的类,而不需要编写相同程序的代码。在Java中使用关键字extends继承一个父类(或称超类)。【例2-19】设计一个硬币类CCoins,能够用来创建各种不同半径及不同面值的硬币。已知在圆形类-CCircle类中已包含了radius、pi成员与setRadius()、show()等方法,在创建硬币类时,通过继承的方式来利用这些数据成员及方法。classCCircle/定义类CCircledoublepi=3.14;doubleradius;publicCCircle()/定义CCircle构造方法(调用CCircle()构造方法);publicvoidsetRadius(doublenewr)radius=newr;(圆的半径为:+radius);publicvoidshow()(圆的面积为:+pi*radius*radius);/定义硬币类CCions(子类),该类继承自圆形类CCircle(父类)classCCoinsextendsCCircleprivateintPayValue;publicCCoins()/CCoins()构造方法(调用CCoins()构造方法);publicvoidsetValue(intnewPV)PayValue=newPV;(面值为:+PayValue);publicclassChapters2_19publicstaticvoidmain(Stringargs)CCoinscoin1=newCCoins();/创建CCoins对象coin1.setRadius(1.8);/调用父类的setRadius()方法coin1.show();/调用父类的show()方法coin1.setValue(1);/调用子类的setValue()方法 2.7.6 多态在面向对象程序设计中,当程序要实现多个相似的功能时,给相应的方法命名相同的名字,用不同的参数代表不同的功能。在使用方法时,无论传递哪种参数,只要能被程序识别,就能够得到相应的结果。Java通过覆盖及重载来实现多态。“重载”是指在相同类内,定义名称相同,而参数个数或类型不同的方法,Java能够依据参数的个数或类型,调用对应的方法。“覆盖”是指在子类当中,定义名称、参数个数与类型都与父类相同的方法,用来改写父类中的方法。【例2-20】重载的应用。为了绘制出不同的形状,使用给出相应参数的draw()方法,如图2-14所示。图形 绘制()矩形 绘制(矩形)圆形 绘制(圆形)三角形 绘制(三角形)图2-14重载的应用classShapeDrawdoubler;protectedstaticdoublepi=3.14;intweight;inthight;doubleHemline;publicShapeDraw(doubler1)r=r1;(这是圆形,圆形的面积为:+2*pi*r);publicShapeDraw(intx,inty)weight=x;hight=y;(这是矩形,面积为:+weight*hight);publicShapeDraw(doubledi,intgao)Hemline=di;hight=gao;(这是三角形,面积为:+Hemline*hight/2);publicclassChapters2_20publicstaticvoidmain(Stringargs)ShapeDrawsd1=newShapeDraw(3.2,10);/调用绘制三角形的ShapeDraw方法ShapeDrawsd2=newShapeDraw(3.2);/调用绘制圆的ShapeDraw方法ShapeDrawsd3=newShapeDraw(5,10);/调用绘制矩形的ShapeDraw方法【例2-21】覆盖的应用。在父类CCircle中定义一个不带参数的displayResult()方法,并且在子类CCoins中也定义一个不带参数的displayResult()方法。父类及子类均有相同名称,并且都不带参数的方法,利用CCoins子类声明的对象调用displayResult()方法,观察是父类的displayResult()方法被调用,还是子类displayResult()方法被调用。Chapters2_21.java代码如下:classCCircleprotecteddoubler;protectedstaticdoublepi=3.14;publicCCircle(doubler1)r=r1;publicvoiddisplayResult()/父类中的displayResult()方法(父类中的r=+r);classCCoinsextendsCCircle/子类CCoinsprivateintvalue;publicCCoins(doubler1,intv)super(r1);value=v;publicvoiddisplayResult()/子类中的displayResult()方法(子类中的r=+r+value=+value);publicclassChapters2_21publicstaticvoidmain(Stringargs)CCoinscoin1=newCCoins(3.2,10);coin1.displayResult();本章小结Java数据类型、常量及变量的定义和使用。Java的运算符有算术运算符、比较运算符、逻辑运算符、位运算符及其他运算符等。Java的流程控制有条件语句、循环语句及跳转语句。数组是数据的有序集合,数组中的每个元素具有相同的数组名。Java作为面向对象程序设计语言,在程序设计中涉及对象、类、方法、成员变量的定义及使用。写出程序的运行结果。1importjava.io.*;publicclassxt1publicstaticvoidmain(Stringargs)intx1=66;doublex2=14.78;charx3=a;System.out.println(x1的值为:+x1);System.out.println(x2的值为:+x2);System.out.println(x3的数据为:+x3);习习 题题2classxt2publicstaticvoidmain(Stringargs)intx=50;inty=6;System.out.println(x+y=+(x+y);System.out.println(x-y=+(x-y);System.out.println(x*y=+(x*y);System.out.println(x/y=+(x/y);System.out.println(x%y=+(x%y);System.out.println(x+=+(x+);System.out.println(x-=+(x-);3classxt3publicstaticvoidmain(Stringargs)doublex=33,44,55,66;doubley=12,14,15,16;doublez=x;for(inti=0;i2;i+)for(intj=0;jxi.length;j+)zij=xij+yij;System.out.print(zij+);();4classXt4privatedoublepi=3.14;privatedoubleradius;publicXt4(doublebj,doublegao)radius=bj;vhight=gao;doubleZtV_show()returnpi*radius*radius*vhight;doubleYztV_show()returnpi*radius*radius*vhight/3;publicstaticvoidmain(Stringargs)Xt4wt=newXt4(2,2);/创建新的对象,并为其赋值(圆柱体的体积为:+wt.ZtV_show();(圆锥体的体积为:+wt.YztV_show();THEEND