
Java语言程序设计实用教程第三讲类型与运算符课件.ppt
28页SISEJava语言程序设计实用教程Java语言程序设计实用教程SISEJava语言程序设计实用教程第三讲 类型与运算符SISEJava语言程序设计实用教程3本章学习要点:q理解Java的数据类型q掌握Java一维、二维数组的使用q掌握Java的运算符使用 SISEJava语言程序设计实用教程4数据类型 l数据是程序操作的对象,具有名称、类型和作用域等特性–数据由标识符命名;–数据的类型表示数据的性质、占用内存多少以及存放格式,不同的数据类型执行不同的操作;–数据的作用域表示数据在程序中可以使用的范围lJava语言的数据类型分为两类:原始数据类型(基本数据类型)和引用数据类型(复合数据类型)SISEJava语言程序设计实用教程数据类型的分类q数据类型的分类如下所示:数据类型的分类如下所示:数据类型基本数据类型复合数据类型数值型字符型:char布尔型:boolean整型:byte,short,int,long实型:float,double类:class数组和字符串接口:interfaceSISEJava语言程序设计实用教程6基本数据类型的说明( P53页,表3-1 )l所有基本数据类型的大、小(所占用的字节数)都已明确规定好,在各种不同的平台上都保持一致,这一特性有助于提高Java程序的可移植性。
长度类型范围8 bitsbyte-27(128) ... 27 -116 bits short-215(32728) ... 215 –132 bitint-231(21亿) ... 231 –164 bits long-263(900亿亿) ... 263 –1注:还可以用java.math包中的两个类: BigInteger,可以操作任意长度的整数运算 BigDecimal,可以操作任意长度的浮点数运算SISEJava语言程序设计实用教程浮点值l缺省为doublel浮点文字包括小数点或下列各项之一qE或e (增加指数值),F或f (float),D或d (double)l 例如:3.14 一个简单的double值4.02E23 一个大的double值2.718F 一个简单的float值l三种特殊的浮点值:q最大值:Double.MAX_VALUE ((2-2-52)·21023)q最小值:Double.MIN_VALUE (2-1074)q正无穷大:Double.POSITIVE_INFINITYq负无穷大:Double.NEGATIVE_INFINITYq非数字:Double.NaNq无穷大表示溢出,如0除任何数。
q非数字表示出错,如0/0或负数开方SISEJava语言程序设计实用教程浮点变量类型及范围q长度类型范围q32 bitsfloat约±3.40282347E+38Fq(有效小数6-7位)q64 bitsdouble约±1.797693134862317E+308q(有效小数15位)q注意:浮点变量之间注意= =运算符的使用应该用如下形式:double x, y;x = … ;y = … ;/*错误的用法*/if (x = = y) {}/*正确的用法*/if( Math.abs(x-y) <0.00001 ) {}其中,0.00001表示需要的计算精度要求SISEJava语言程序设计实用教程q数据类型的转换有自动转变和强制转换两种形式 q自动类型转换自动类型转换q整型,实型,字符型数据可以混合运算运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级 q要实现自动类型转变,需要同时满足两个条件,第一是两种类型彼此兼容,第二是目标类型的取值范围大于源类型q例如,当byte型向int型转换时,由于int型的取值范围大于byte型,就会发生自动转换 数据类型的转换(一)SISEJava语言程序设计实用教程q不同类型数据间的优先关系如下: q低------------------------------------------------------>高 qbyte,short,char-> int -> long -> float -> double q强制类型转换强制类型转换 当两种类型彼此不兼容,或者目标类型的取值范围小于源类型,自动转换无法进行,这时就需要进行强制类型转换。
强制类型转换的通用格式如下:目标类型 变量=(目标类型)值;高级数据要转换成低级数据,需用到强制类型转换 p表达式数据类型的自动提升表达式数据类型的自动提升 如果在JAVA应用程序表达式中出现数据类型不一致的情形,那么JAVA运行时系统首先自动将低优先级类型的数据转换成高优先级类型的数据,然后才进行表达式值的计算 数据类型的转换(二)SISEJava语言程序设计实用教程数据类型之间的逻辑转换intcharbyteshortlongfloatdoubleq 上图画出了可以自动进行的类型转换,如int salary = 2000;float output = salary;q 黑色粗箭头表示无精度损失的转换,红色细箭头表示有可能会出现精度损失的转换SISEJava语言程序设计实用教程Wrapper类l把 基 本 数 据 类 型 包 装 为 类 ,如 int类 型 有java.lang.Integer类做为包装器.可使原始变量有类的表现形式.SISEJava语言程序设计实用教程Wrapper类的数据类型转换l利用类的方法:不同类型的转换方式是类似的parseXXX的方法,例如:int a=Interger.paseInt(“123456”);也可用可以使用valueOf()方法来转换类型: int a=Interger.value("123456"); String s=String.valueOf(time);l利用对象方法: Double d ; String s; d=new Double(12.3) ; //构造 s= d.toString();SISEJava语言程序设计实用教程14复合数据类型l复合数据类型是建立在基本数据类型的基础上的,即可再分。
l复合数据类型是由用户自己定义的、用来限制其他数据的类型lJava语言中不支持C/C++中的指针类型、结构类型、联合类型和枚举类型 l参考P53表3-2,书上漏了String类型SISEJava语言程序设计实用教程一维数组q在Java中,数组是独立的类,可有自身的方法,不是变量的集合q一个数组是数组类的一个对象,将相同类型的数据存储在连续存储单元中,可用数字索引数组中单独数据项q语法:int[ ] IntArray (提倡格式)q 类型 变量名q数组定义有三种方法,1.声明数组2.声明并创建数组3.声明、创建、并初始化数组,具体参阅P54,表3-3, 如:int[ ] IntArray = new int [5] SISEJava语言程序设计实用教程引用类型—数组qint[ ] intArray = { 11, 47, 93, 26, 38 }q分配空间+赋初值q静态初始化必须与数组定义放在一个语句中qintArray = new int[10] ; //原数组丢失•XXXX•intArray•11•47•93•38•26SISEJava语言程序设计实用教程数组元素为类的对象q定义数组Integer [] a; // Null handleInteger [] b = new Integer[5]; q创建数组元素的对象实例 for(int i = 0; i < b.length; i++)b[i] = new Integer(I*10);q创建数组时初始化 Integer [] d = {new Integer(1), new Integer(2), new Integer(3)};SISEJava语言程序设计实用教程多维数组定义q数组元素又是数组对象,参阅P55,表3-4q当为多维数组分配内存时,只需要为第一维(最左边的一维)指定大小和分配内存,而其余的可以单独分配。
例如,下面的代码就在声明table时为它的第一维分配了内存,而它的第二维是手动分配内存的q int [ ][ ] intArray = new int [10][5] ;q int [ ][ ] intArray = { {1,3},{2,4},{1,2,3,4} }SISEJava语言程序设计实用教程数组类q数组使用之前要确定大小,可以在程序中根据需要指定其大小(如用表达式计算出大小)q一旦生成数组,大小不可改变java不支持变长数组q数组的属性—length 数组元素的个数qjava数组作为一种对象类型,可以作为方法的参数,传的是指向数组的引用qArrayIndexOutOfBoundsException 例外 SISEJava语言程序设计实用教程数组使用举例 int m1 , m2 ; int[][] a ; m1=5 ; m2=10; a=new int[m1][m2]; for(int i=0 ; i<5 ; i++) for(int j=0 ; j<10 ; j++) a[i][j] = i*j ; for(int i=0 ; i q一元:只需一个操作数,运算符在操作数前面或者后面q二元:需要有两个操作数,运算符在它们之间q三元:需要三个操作数的运算符被成为三元运算符,它是由?:符号表示的,具体的含义其实就和if-else结构的含义差不多,例如: Int A,B,C; A=2; B=3; C=A>B ? 100 :200; 这条语句的意思是,如果A>B的话,就将100赋给C,否则就将200赋给C•运算符可分为算术操作、位操作、关系操作和逻辑操作SISEJava语言程序设计实用教程算术运算符(算术运算符(P58,表,表3-5)) int i=6; int i=6; int j=i++; int j=++i;result i=7, j=6 result i=7, j=7 /:: 0/0非法,非法,0/0.0合法,合法,double、、float存的存的都是不精确的数,都是不精确的数,0不是真正的不是真正的0,也许是,也许是0.0000000002,有微小的误差,所以除一下就很大,有微小的误差,所以除一下就很大一个数了,一个数了,int的的0就是就是0 ;;%:: 可用于浮点数运算;可用于浮点数运算;++、、--:前缀用法与后缀用法不一样;:前缀用法与后缀用法不一样;+、、-、、*、、 /、、 %、、++、、 --SISEJava语言程序设计实用教程位运算符(P59,表3-6)q关心值内部表示,所有的整数类型都可用二进制表示,例如:移位q>> 带符号右移:左侧空出位全用符号位填充,理解为q>>>不带符号右移 :左侧空出位用0填充q<< 左移:符号位被挤掉q x 二进制表示 x << 2 x >> 2 x >>> 2q30 00011110 011110000000011100000111q-17 11101111101111001111101100111011128>>1 128 / 21 = 64 256>>4 256 / 24 = 16-256>>4 -256 / 24 = -16 128 <<1 128 * 21 = 25616 <<2 16 * 22 = 64SISEJava语言程序设计实用教程关系运算符(关系运算符(P60,表,表3-7))==、!=、<、 <=、>、 >=、instanceof运算结果是一个布尔值运算结果是一个布尔值boolean. instanceof: 判断一个判断一个reference的类型是否属的类型是否属于某种类,即测试它左边的对象是否是它右边的类于某种类,即测试它左边的对象是否是它右边的类的实例的实例String s=“jlj”;if(s instanceof String){ ......}else{ ......}SISEJava语言程序设计实用教程&、、 |、、 !、、 ^、、 &&、、 ||逻辑运算符(逻辑运算符(P61,表,表3-8))l是将两个布尔值进行逻辑运算并布尔结果返回相应的是将两个布尔值进行逻辑运算并布尔结果返回相应的布尔结果布尔结果l||,,&&表示快速或、快速逻辑与表示快速或、快速逻辑与(建议使用建议使用),含义是,含义是在整个逻辑表达式中,只要运算符左侧已经能够得出在整个逻辑表达式中,只要运算符左侧已经能够得出整个表达式的值,则不再计算右运算符。 整个表达式的值,则不再计算右运算符例如:例如:true||boolean,,false&&booleanSISEJava语言程序设计实用教程26运算符的优先级l表表达达式式的的运运算算次次序序取取决决于于表表达达式式中中各各种种运运算算符符的的优优先先级级优优先先级级高高的的先先运运算算,,优优先先级级低低的的后后运运算算,,另另外外还还可可用用括括号号““(())””改改变变表表达达式式的的运运算算次次序序优优先级由高到低为先级由高到低为:[ ] . ( )~ ++ -- +(正号) -(负号) (造型) new* / % 优先级顺序可以省略括号:+ - 语句if ( x+y>3 )利用了+优先级比>高> < >= <= instanceof== !=&&||?:= += - = *= /=SISEJava语言程序设计实用教程27实验l书上例子:–P54,例3-1–P56,例3-2–P58,例3-3–P60,例3-4–P61,例3-5l书上习题:P63,3.1-3.5SISEJava语言程序设计实用教程28小结l掌握数据类型的大小、适用范围l数组在很多实际的问题中很有用,需要灵活应用,特别是需掌握数组大小的定义、赋值、引用等l掌握四种类型运算符在不同场合上的使用,通常一个程序包含了四种类型的运算符。





![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)






