Java面向对象程序设计(第2版)第02章.ppt_第1页
Java面向对象程序设计(第2版)第02章.ppt_第2页
Java面向对象程序设计(第2版)第02章.ppt_第3页
Java面向对象程序设计(第2版)第02章.ppt_第4页
Java面向对象程序设计(第2版)第02章.ppt_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章Java语言基础,主要内容,简单数据类型表达式控制语句数组,简单数据类型,标识符,定义:程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier)。Java语言中,标识符是以字母,下划线“_”,美元符“$”开始的一个字符序列,后面可以跟字母,下划线,美元符,数字。例如,identifier,userName,User_Name,_sys_val,$change为合法的标识符,而2mail(数字开头)、room#(非法字符)、class(关键字)、a-class(含有运算符)都为非法的标识符。,保留字,概念:具有专门的意义和用途,不能当作一般的标识符,这些标识符称为保留字,也称为关键字。java中的所有保留字(均用小写字母表示):abstract,break,byte,boolean,catch,case,class,char,continue,default,double,do,else,extends,false,final,float,for,finally,if,import,implements,int,interface,instanceof,long,native,new,null,package,private,protected,public,return,switch,synchronized,short,static,super,try,true,this,throw,throws,transient,volatile,void,while。,数据类型划分,java中的数据类型:简单类型和复合类型:简单数据类型包括:整数类型:byte,short,int,long浮点类型:float,double字符类型:char布尔类型:boolean复合数据类型包括:class(类)interface(接口)数组,常量和变量,常量:用保留字final来实现:final类型varName=value,varName=value;如:finalintNUM=100;变量:java程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分。格式如下:类型varName=value,varName=value;变量名称区分大小写。,变量的作用域,变量的作用域指明可访问该变量的一段代码,声明一个变量的同时也就指明了变量的作用域。变量的作用域可分为:局部变量、类属性变量、方法参数和例外处理参数。在一个确定的域中,变量名应该是唯一的。,变量作用域举例,下面一段代码因为超过了定义的范围而编译出错。for(inti=0;i高byte,short,char-int-long-float-double自动类型转换规则整型,实型,字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级。,例如TypemethodA(bytex,doubley)return(short)x/y*2;Type的类型将为double。,数据类型转换强制类型转换,强制类型转换:高级数据要转换成低级数据,需用到强制类型转换,如:inti;byteb=(byte)i;/*把int型变量i强制转换为byte型*/,简单数据类型及其对应包装类,简单数据类型不是类,但Java提供了与简单类型对应的包装类,它们之间的相互转化方法为(以int和Integer为例):简单数据类型转化为类对象的方法是:通过相应类的构造方法来完成。如Integervari=newInteger(5);类对象转化为简单数据类型:如上面的vari可以通过调用intValue()方法得到普通数据类型的int值。,引入这些类的目的:,简单数据类型不具有一些对象的特征,在一些场合不能使用,需要将简单数据类型转为特定的类,进行适当处理后,再转化回来。实现不同数据类型的转化。这些类的静态属性中含有相应的范围。,表达式,表达式定义,表达式是用运算符把操作数连接起来的式子,可分为算术表达式、关系表达式、逻辑表达式、赋值表达式、条件表达式对各种类型的数据进行加工的过程称为运算,表示各种不同运算的符号称为运算符,参与运算的数据称为操作数按操作数的数目来分,可有:一元运算符:,(正数),(取负)二元运算符:,instanceof(对象运算符)=等三元运算符:?:,算术表达式,是由算术运算符和位运算符将操作数连接组成的表达式,算术运算符优先级,算术表达式注意,两个整数类型的数据做除法时,结果只保留整数部分。整数和浮点数都能进行取余运算。“/”运算符,当都为整数时,结果为整数,有一个为浮点,则为浮点数。自增/自减运算符只适用于变量,且位于运算符的哪一侧有不同效果。Java中的算术运算主要依赖于Math类的静态方法,例如:取绝对值:Math.abs(Typei),Type可以为int、long、float、double对数取三角和反三角函数、对数和指数、乘方、开方求两个数的最大最小值得到随机数(random(),类型为double)对浮点数进行处理:四舍五入(round)、ceil(取大值)、floor(取小值),classTestNumberpublicstaticvoidmain(Stringargs)System.out.print(Math.ceil(5.2)+);System.out.print(Math.ceil(5.6)+);System.out.print(Math.ceil(-5.2)+);System.out.print(Math.ceil(-5.6)+);System.out.print(Math.floor(5.2)+);System.out.print(Math.floor(5.6)+);System.out.print(Math.floor(-5.2)+);System.out.print(Math.floor(-5.6)+);System.out.print(Math.round(5.2)+);System.out.print(Math.round(5.6)+);System.out.print(Math.round(-5.2)+);System.out.print(Math.round(-5.6)+);,输出结果是:,例:韩信点兵不足百人,三人一行多一个,七人一行少两个,五人一行正好,问有多少人。,publicclassTestSoldierypublicstaticvoidmain(Stringargs)for(inti=1;i100;i+)if(i%3=1,关系表达式,定义:利用关系运算符连接的式子称为关系表达式运算结果:是一个逻辑值“真”或“假”,在Java中用true表示“真”;用false表示“假”。,判断某年是否为闰年(如果是闰年,它应能被4整除,但不能被100整除,或被100整除,也能被400整除),publicclassTestLeapYearpublicstaticvoidisLeapYear(intyear)booleann1=(year%4=0);booleann2=(year%100=0);booleann3=(year%400=0);if(n1=true,逻辑表达式,利用逻辑运算符将操作数连接的式子称为逻辑表达式逻辑表达式参与运算的都是布尔值,结果也是布尔值,逻辑表达式注意,“booleanb1=false;if(b1=true)out结果为10,如将语句改为if(b1=true)intj=i;/最高位取反后为正,j值为1463的结果为5,条件表达式,形式:布尔表达式1?表达式2:表达式表达式2和表达式3的类型必须相同。条件运算符的执行顺序是:先求解表达式1,若值为true则执行表达式2,此时表达式2的值作为整个条件表达式的值,否则求解表达式3,将表达式3的值作为整个条件表达式的值。在实际应用中,常常将条件运算符与赋值运算符结合起来,构成赋值表达式,以替代比较简单的if/else语句。条件运算符的优先级高于赋值运算符,结合方式为“自右自左”。,classTestpublicstaticvoidmain(Stringargs)floatsum=1.5f;intnum=2;System.out.println(sum6)System.out.println(设备正常);elseSystem.out.println(“设备出错”);,if(x6)if(y6)System.out.println(设备正常);elseSystem.out.println(设备出错);,等价,分支语句多分支语句switch,switch(expression)casevalue1:statement1;break;casevalue2:statement2;break;casevalueN:statemendN;break;default:defaultStatement;,多分支语句注意,表达式expression的返回值类型必须是这几种类型之一:byte,short,int,char请注意是普通数据类型,而不是包装类,如Short、Byte等,也不能是long、float或double。case子句中的值valueN必须是常量,而且所有case子句中的值应是不同的。default子句是可选的。break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行(在一些特殊情况下,多个不同的case值要执行一组相同的操作,这时可以不用break)。,循环语句,Java语言中提供的循环语句有:while语句、do-while语句、for语句。while语句初始化while(条件表达式)循环体循环变量控制,do-while语句初始化do循环体循环变量控制while(条件表达式)注意:条件表达式中的结果应为布尔值,而不能为算术值。例如while(y-)x-;,for语句for(表达式1(初始条件);表达式2(结束条件);表达式3(循环变量控制))循环体其流程逻辑关系如图所示,循环语句注意,for语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。初始化、终止以及迭代部分都可以为空语句(但分号不能省),三者均为空的时候,相当于一个无限循环。在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔的语句序列。如果循环变量在for中定义,变量的作用范围仅限于循环体内,publicclassDeltastaticbooleanfoo(charc)System.out.print(c);returntrue;publicstaticvoidmain(Stringargv)inti=0;for(foo(A);foo(B)结果输出为:ABDCBDCB,循环语句举例1,例百鸡问题,公鸡5元/只,母鸡3元/只,小鸡3只/元,问100圆买100只鸡,公鸡、母鸡、小鸡各多少(采用穷举法公鸡最多20只,母鸡33只),publicclassHandreadChickenpublicstaticvoidmain(Stringargs)intz=0;booleanisAnswer=false;for(inti=1;i=20;i+)for(intj=1;j=33;j+)z=100-i-j;if(z%3=0,循环语句举例2,跳转语句,Java语言提供了4种转移语句:break,continue,return和throw。转移语句的功能是改变程序的执行流程。break语句可以独立使用,而continue语句只能用在循环结构的循环体中。,break语句,break语句通常有下述不带标号和带标号的两种形式:break;breakLab;其中:break是关键字;Lab是用户定义的标号。,break语句用在switch语句中,其作用是强制退出switch结构,执行switch结构后的语句。break语句用在单层循环结构的循环体中,其作用是强制退出循环结构。若程序中有内外两重循环,而break语句写在内循环中,则执行break语句只能退出内循环。breaklab语句用在循环语句中,必须在外循环入口语句的前方写上lab标号,可以使程序流程退出标号所指明的外循环。,编程打印1到100中的所有素数,publicclassTestpublicstaticvoidmain(Stringargs)intn=0,m,j,i;for(i=3;i=m+1)if(n%6=0)System.out.println();System.out.print(i+);n+;/endfor/endmain/endclass,break语句举例,continue语句,continue语句只能用于循环结构中,其作用是使循环短路。它有下述两种形式:continue;或continuelab;其中:continue是关键字;Lab为标号。,continue语句也称为循环的短路语句。用在循环结构中,使程序执行到continue语句时回到循环的入口处,执行下一次循环,而使循环体内写在continue语句后的语句不执行。当程序中有嵌套的多层循环时,为从内循环跳到外循环,可使用带标号的continuelab语句。此时应在外循环的入口语句前方加上标号。,返回语句return,return语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。返回语句有两种格式:returnexpression;return;return语句通常用在一个方法体的最后,否则会产生编译错误,除非用在if-else语句中。,classTestReturnpublicstaticvoidmain(Stringargs)inti=10;if(i5)return;/i=6;else/return;i=5;注意:上例中的去掉任意一句注释,都将产生编译错误。,return语句举例,数组,数组的概念,数组名是符合Java标识符定义规则的用户自定义标识符;数组的维数用方括号“”的个数来确定,对于一维数组来说,只需要一对方括号,二维就是;数组元素的数据类型可以是Java的任何数据类型,例如:基本类型(int、float、double、char等),类(class)或接口(interface)等。,声明数组就是要确定数组名、维数和元素的数据类型,类型标识符数组名;类型标识符数组名;例如:intabc;Stringexample;myClassmc;注:Java中的数组可以看作是一个对象。例如上面的声明如果进行了初始化,则看作两个对象,分别为abc和example,它们有自己的属性,如length属性。,一维数组的声明格式,使用关键字new可将数组看成一个特殊对象格式如下:类型标识符数组名=new类型标识符数组长度;类型标识符数组名=new类型标识符数组长度;,一维数组三种初始化方法之一,产生一个有10个单元,类型为int的数组对象,所有单元的初值为0,abc=newint10;产生一个具有10个单元,类型为String的数组对象,所有单元的初值为null,不要写成newString(10),example=newString10;产生一个类型为myClass容纳10个myClass对象引用的数组对象,每个单元值是null,mc=newmyClass10;,一维数组初始化例子,注:1)不是产生10个myClass对象;2)对象数组化的目的在于可以进行对象的遍历控制。3)数组产生后的默认值同对象属性初始化默认值规定。,直接在声明的时候进行定义及初始化,例如:Strings=ab,bc,cd;inta=3,4,5,6对于对象数组:Integerresults=newInteger(3),newInteger(5),newInteger(8);Stringdogs=newString(“Fido”),newString(“Spike”),newString(“Aiko”);,一维数组三种初始化方法之二,注:这种初始化方法只能写在声明代码中(“”内用,号分隔),下面的写法是错误的:inta;a=3,4,5,6;,采用1和2相结合方式进行初始化,例如:floatf4=newfloat1.0f,2.0f,3.0f;floatf4;f4=newfloat1.0f,2.0f,3.0f;注:此时float中的不应该给出具体数字,一维数组三种初始化方法之三,将数组整体看成一个对象,通过数组引用进行相应的操作:floatfl,f2;/f1和f2就是数组声明fl=newfloat10;/f1变为引用f2=f1;/引用赋值,f2和f1拥有相同的数组成员。Objecto=f1/这样赋值也成立Java中数组的下标从0开始,如果数组越界,产生的异常为:IndexOutOfBoundsException(它继承RuntimeException)若定义数组大小为负数会产生NgativeArraySizeException(它继承RuntimeException),但是数组长度可以为0(不是null),数组引用,publicclasstestpublicstaticvoidmain(Stringargs)for(inti=0;iargs.length;i+)System.out.println(argsi);,一个特殊的一维数组,上图中的102030405060分别存入args数组当中,系统自动为args申请了6个单元。如果运行时仅有javatest,此时args相当于args=newString0;,某些类的方法返回数组对象引用:例如:linkedList、Vector对象可以调用方法toArray()返回Object数组,此时数组中为对象的引用,不是对象。Arrays.sort方法:对char,byte,short,int,float,double,long按升序排列,也可指定排序方法对对象进行排序(见JDK文档)。System.arraycopy()复制数组publicstaticvoidarraycopy(Objectsrc,intsrcPos,/源数组,起始下标位置Objectdest,intdestPos,/目的数组,起始下标位intlength)/拷贝长度,一维数组的相关方法,源数组和目的数组类型必须一致。如果是基本数据类型数组,则是值拷贝;如果是对象数组,则是引用拷贝。若src或dest其中一个为null,则会发生发生空指针异常NullPointerException;如果src和dest的类型不一致,则会发生ArrayStoreException;若srcPos+length大于src.length、destPos+length大于dest.length,则会发生IndexOutOfBoundsException。异常发生时,dest中的内容不会变化。,System.arraycopy()方法使用注意,两个字符数组进行比较(大小写忽略)1.若相等,返回0;2.若不等,按第一个不等的字符大小进行比较,返回1或-1;3.两个字符数组不等直接返回-2,importjava.io.*;publicclassContrastCharpublicstaticintconstrast(chara,charb)charc1=u0000,c2=u0000;intk1=0,k2=0,i=0;k1=a.length;k2=b.length;if(k1!=k2)return-2;,一维数组举例,for(i=0;i=A,二维数组的声明格式,类型说明符数组名;类型说明符数组名;例如:intarr;intarr;,使用关键字new格式如下:数组名=new类型说明符数组长度;数组名=new类型说明符数组长度数组长度;其中:对数组名、类型说明符和数组长度的要求与一维数组一致。对于没有初始化的维度,其值为null。,二维数组二种初始化方法之一,intarra;arra=newint34;等价于:arra=newint3;创建有3个元素的数组,各元素也是一个数组arra0=newint4;创建arra0元素的数组,它有4个元素arra1=newint4;创建arra1元素的数组,它有4个元素arra2=newint4;创建arra2元素的数组,它有4个元素也等价于:arra=newint3for(inti=0;i3;i+)arrai=newint4;,二维数组初始化例子,二维数组,是用指定的初值对数组初始化,例如:intarr1=3,-9,6,8,0,1,11,9,8它等价于:intarr1=newint3;arr10=newint3,-9;arr11=newint8,0,1;arr12=newint10,11,9,8;,二维数组二种初始化方法之二,也等价于:intarr1=newint3;intarb1=3,-9;intarb2=8,0,1;intarb3=10,11,9,8;arr10=arb1;arr11=arb2;arr12=arb3;,注:对于二维数组,当只定义第一维维数时,另一维的维数可以不一样,也就是说不一定是规则的矩阵形式,例如:intarra;arra=newint3;arra0=newint3;arra1=newint2;arra2=newint1;,arra,编程打印如下图形,打印到8,.3333333.3222223.3211123.3210123.3211123.3222223.3333333.,分析:将数放置到数组当中;将数组中的数打印出来;程序见下页。,二维数组应用举例1,publicclassTestpublicstaticvoidmain(Stringargs)finalintnum=8;intt=newint2*num+12*num+1;for(inti=0;i=num;i+)for(intj=0;j=num;j+)if(ij)tij=num-i;els

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论