T2Java数据处理与流程控制回顾Java的历史与发展Java语言特性理解Java虚拟机(JVM)Java的开发环境与配置目标数据类型运算符号流程控制数组变量变量的特性名称:标识符,代表这块内存中的数据。类型:根据所存储的数据类型的不同,有各种不同类型的变量。初始值:为其赋值或者是保留缺省值,变量在使用前必须先初始化。作用域:在不同程序块中的可用性及生命周期intx=0;y=x+3;Java中两大数据类型基本数据类型:也称作内置类型,Java语言本身提供的基本数据类型,是其他类型(包括Java核心库和用户自定义类型)的基础。例如:boolean,char等引用数据类型:Java语言根据基本类型扩展出的其他类型。例如:class,interface等在程序执行期间可根据需要经常变化的值。java的变量类型数据类型基本数据类型引用数据类型数值型字符型(char)布尔型(boolean)整数类型(byte,short,int,long)浮点类型(float,double)类(class)接口(interface)数组基本数据类型的取值范围基本类型类型定义类型取值boolean1字节8位true,falsebyte1字节8位有符号整数-128~+127char2字节16位Unicode字符Unicode0~Unicode216-1short2字节16位有符号整数-32768(-215)~+32767(+215-1)int4字节32位有符号整数-2147483648(-231)~+2147483647(231-1)long8字节64位有符号整数-263~+263-1float4字节32位浮点数1.4E-45~3.4E+38,-1.4E-45~-3.4E+38double8字节64位浮点数4.9E-324~1.7E+308,-4.9E-324~-1.7E+308基本数据类型之间的转换当把一个long类型的变量赋值给int类型时,int可能存不下那么大的数。所以编译器不允许把long变量赋值给int变量但是反之可以除boolean类型外,所有的原始数据类型因为各自的精度不同,赋值时都要考虑这个问题基本数据类型之间的转换自动类型转换(隐式类型转换)byteb=3;intx=b;//b自动转换成int型14321byteint强制类型转换(显示类型转换)bytea;intb;a=(byte)b;//强制转换强转时,当心丢失数据或失真基本数据类型之间的转换相同类型的变量、常数运算,结果还是原类型不同类型的变量、常数运算,结果的类型为参与运算的类型中精度最高者表达式的数据类型自动提升规则byte,short,char型的值被提升int型其中一个操作数为long型,结果为long型其中一个操作数为float型,结果为float型其中一个操作数为double型,结果为double型基本数据类型之间的转换案例说明:byteb=50;charc=‘a’;shorts=1024;inti=50000;floatf=5.67f;doubled=.1234;result=(f*b)+(i/c)-(d*s);请问result是什么类型?案例分析System.out.println(‘a’+1);System.out.println(“”+’a’+1);以上两条语句打印结果是什么?运算符运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成。运算符共分以下几种算术运算符赋值运算符比较运算符逻辑运算符位运算符算术运算符赋值运算符赋值运算符(=)用于为变量赋值比较运算符关系运算符用于测试两个操作数之间的关系。关系表达式将返回一个布尔结果。运算符含义示例==等于a==b!=不等于a!=b大于ab小于ab=大于或等于a=b=小于或等于a=binstanceof检查是否是该类的一个对象“aa”instanceofString注1:比较运算符的结果都是boolean型,也就是true/false。注2:比较运算符“==”不能误写成“=”,切记!切记!逻辑运算符逻辑运算符与布尔操作数一起使用运算符含义示例&逻辑与A&B|逻辑或A|B^逻辑异或A^B!逻辑反!A||短路或A||B&&短路与A&&B“&”和“&&”的区别在于:“&”:那么无论任何情况,“&”两边的表达式都会参与计算。“&&”:当“&&”的左边为false,则将不会计算其右边的表达式。“|”和“||”的区别与“&”和“&&”的区别一样。位运算用于int、short、long、byte和char数据类型运算符含义示例~按位非(NOT)/取反b=~a&按位与(AND)c=a&b|按位或(OR)c=a|b^按位异或(XOR)c=a^b右移b=a2无符号右移,左边空出的位以0填充b=a2左移b=a1Java中位运算符都是通过二进制进行操作的。位运算规则:任何信息在计算机智中都是以二进制的形式保存的,&、|、^除了可以作为逻辑运算符,也可以作为位运算,它们对两个操作数中的每一个二进制位都进行运算。–只有参与运算的两位都为1,&运算的结果才为1,否则就是0。–只有参与运算的两位都为0,|运算的结果才为0,否则就是1。–只有参与运算的两位不同,^运算的结果才为1,否则就是0。我们可以对数据按二进制的位进行移位操作,Java的位移运算有三种:–左移–右移–无符号右移位运算10001010右移100010100被抛弃右移后补1运算符的优先级高优先级低三元运算符(?:)三元运算符(?:)可以替代if-else结构truefalse条件?表达式1:表达式2classTernaryOp{publicstaticvoidmain(Stringargs[]){intsalary,daysPresent=30;salary=daysPresent==20?2000:3000;System.out.println(您本月薪资为$+salary);}}Instanceof运算符classInstanceOfDemo{publicstaticvoidmain(Stringargs[]){InstanceOfDemot=newInstanceOfDemo();if(tinstanceofInstanceOfDemo){System.out.println(T是InstanceOfDemo的实例);}else{System.out.println(T不是InstanceOfDemo的实例!);}}}控制结构•选择–if-else–Switch•循环–while–do-while–forJava支持下列控制结构:选择、循环、跳转•跳转–break–Continueif(i10)returni*100;elsereturni*10;以上代码片断等效于:returni10?i*100:i*10;if-else选择语句switch选择语句•switch结构的语法为:switch(表达式){case'常量值1':语句(组);break;case'常量值2':语句(组);break;case'常量值N':语句(组);break;default:语句(组);}表达式必须为byte,short,int或char类型常量值必须是与表达式类型兼容的特定的一个常量不允许有重复的case值default子句为可选•while循环while(条件){语句组;}•do-while循环do{语句组;}while(条件);•for循环for(变量初始化;循环条件表达式;递增或递减变量的值){语句组;}循环语句“初始化”和“循环条件表达式”部分可以使用逗号来执行多个操作如果三个部分都为空语句(分号不能省),相当于一个无限循环“当型”循环,先判断条件再执行“直到型”循环,先执行再判断条件,也就是说,至少可以执行一次在while(条件)后面的分号不要忘循环语句使用规则While适合于开始不清楚循环将要进行的次数,而且循环可能一次都不进行的情况do-while适合于不清楚循环次数,但是循环肯定要进行一次的情况For适合于预先知道循环将要进行的次数的情况一定程度上他们是可以互相替换的break和continuebreak语句在循环中用于立即从当前循环终止控制。遇到break语句时,将跳出当前循环。continue语句则是从其调用处跳至循环的开始处。continue语句之后的语句将不再执行。Return返回语句Return语句从当前方法退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续执行程序。返回语句的两种格式:1、returnexpression返回一个值给调用该方法的语句。返回值的数据类型必须和方法声明中的返回值类型一致或是精度低于声明的数据类型。2、return当方法声明中用void声明返回类型为空时,应使用这种返回类型,它不返回任何值。数组:是有相同类型的、用一个标识符名称封装到一起的一个对象序列或基本数据类型数据序列。数组是一种最简单的复合数据类型。数组可以是一维的也可以是多维的。一维数组定义:typearrayName[]或type[]arrayName说明:type:可以是java中任意的数据类型,包括简单类型和复合类型(也可以是数组)arrayName:为一个合法的标识符;[]指明该变量是一个数组类型的变量。数组例如声明一个数组x:intx[];int[]x;声明一个数组,每个元素都是整数数据。声明的时候不指定数组的长度。只声明的数组是不能访问它的任何元素的请问此时能否访问该数组中的值?数组--声明数组变量intx[];用new关键为对象分配其内存空间。Type[]arrayName=newtype[arraySize]例如:int[]x=newint[100];通过引用来使用数组元素:arrayName[index]index为数组下标,可是整型常数或表达式。index取值从0到arraySize-1;数组–为数组分配空间X=newint[100]当x=null即该数组对象不再被任何引用变量使用的时候,“垃圾回收器”将自动释放该内存资源数组在内存中的分配数组数组的静态初始化intia[]={1,2,3,4};intia[]=newint[]{3,4,5};动态初始化intintArray[];//声名数组Int[]Array=newint[5];//为数组分配空间注意:声明数组时,无论用何种方式定义数组,都不能指定其长度inta[5];声明的时候不能指定长度数组使用时要注意的问题空指针异常(NullPointException)只声明但没有初始化的时候直接使用该变量。数组越界异常(ArrayIndexOutBoundsException)所有数组的下标都从0开始int[]a={1,2,3};for(inti=0;ia.length;i++){System.out.println(a[i]);}其中length属性表示数组的长度多维数组多维数组(数组的数组)java没有真正的多维数组,只有数组的数组二维数组的定义typearrayName[][];或type[][]arrayName;例子:intxx[][]=newint[3][3];int[][]xx={{3,2,7},{1,5},{6}};多维数组C中的数组必须是x*y矩阵Java中的数组则可任意静态初始化intintArray[][]={{3,2,7},{1,5},{6}};Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。多维数组多维数组动态初始化int[][]xx=newint[3][];//指定一个3行n列的数组xx[0]=newint[3];//指定第一行为3列xx[1]=newint[2];//指定第二行为2列在Java语言中,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。总结数据类型运算符号流程控制数组作业1、哪