张孝祥IT课堂-Java就业培训教程主讲老师:□□□第二讲java编程基础Java的基本语法(1)java代码的位置java是严格区分大小写的java是一种自由格式的语言代码分为结构定义语句和功能执行语句功能执行语句的最后必须用分号结束java程序有三种注释方式java中的标识符java中的包、类、方法、参数和变量的名字,可由任意顺序的大小写字母、数字、下划线(_)和美元符号($)组成,但标识符不能以数字开头,不能是关键字。合法的标识符:indentifierusernameuser_name_userName$username非法的标识符:class98.3HelloWorldJava的基本语法(2)java的关键字注:java无sizeof,goto,const关键字,但不能用gotoconst作为变量名abstractdoimplementprivatethisbooleandoubleimportprotectedthrowbreakelseinstanceofpublicthrowsbyteextendintreturntransientcasefalseinterfaceshorttruecatchfinallongstatictrycharfianllynativestrictfpvoidclassfloatnewsupervolatilecontinuefornullswitchwhiledefaultifpackagesynchronizedjava中的常量(1)整型常量十进制(12),十六进制(0x12),八进制(012)长整型常量13L单精度浮点数5.1f,.4f,2e3f,0f双精度浮点数5.1,.4,2e-3,0d布尔常量true和falsejava中的常量(2)字符常量‘a’,‘8’,'\u0027'‘\r‘表示接受键盘输入,相当于按下了回车键;‘\n‘是换行;‘\t‘是制表符,相当于table键;‘\b‘是退格键,相当于BackSpace;‘\‘‘是单引号,而‘\“‘是双引号;‘\\‘是一个斜杠“\”。字符串常量“HelloWorld“,”123”,Welcome\nXXXnull常量null常量只有一个值,用null表示,表示对象的引用为空变量的概念与作用变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。根据所存储的数据类型的不同,有各种不同类型的变量。变量名代表这块内存中的数据。intx=0,y;y=x+3;执行这两条语句的过程中,内存分配及变化情况。X在被取值前必须被初始化。java的变量类型数据类型基本数据类型引用数据类型数值型字符型(char)布尔型(boolean)整数类型(byte,short,int,long)浮点类型(float,double)类(class)接口(interface)数组变量字节大小及有效取值范围byte占用一个字节,数字大小为-27—27-1short占用两个字节,数字大小为-215—215-1int占用四个字节,数字大小为-231—231-1long占用八个字节,数字大小为-263—263-1float占用四个字节,数字大小为1.4E-45~3.4E+38,-1.4E-45~-3.4E+38。用二进制的指数形式表示一个浮点数的格式,如:101*22,101*2-3double占用八个字节,数字大小为4.9E-324~1.7E+308,-4.9E-324~-1.7E+308。char占两个字节,数字大小为0—216-1,是unicode编码。字符的本来面目,我们为什么可以直接将一个数字赋给字符变量。Boolean占一个字节,其取值只有两个,true和false。浮点数在内存中的表示方式在JDK文档中查找Float.intBitsToFloat的说明打印出最大数和最小数及它们的二进制格式打印出无穷大与NaN及它们的二进制格式分析0x50000000所对应的浮点数类型转化自动类型转换(也叫隐式类型转换)强制类型转换(也叫显式类型转换)类型转换的原理及什么时候要用强制类型转换表达式的数据类型自动提升–所有的byte型、short型和char的值将被提升到int型。–如果一个操作数是long型,计算结果就是long型;–如果一个操作数是float型,计算结果就是float型;–如果一个操作数是double型,计算结果就是double型。分析System.out.println(‘a’+1)与System.out.println(“”+’a’+1)的区别。变量的生命周期与作用域变量要先定义,后使用,但也不是在变量定义后的语句一直都能使用前面定义的变量。我们可以用大括号将多个语句包起来形成一个复合语句,变量只能在定义它的复合语句中使用。publicclassTestScope{publicstaticvoidmain(String[]args){intx=12;{intq=96;//x和q都可用intx=3;//错误的定义,Java中不允许有这种嵌套定义System.out.println(xis+x);System.out.println(qis+q);}q=x;/*错误的行,只有x可用,q超出了作用域范围*/System.out.println(xis+x);}}函数函数(子程序)的概念与作用。定义一个函数的格式编写打印三个矩形的程序(用流水帐的方式与用函数的方式进行对比分析)。返回值类型函数名(参数类型形式参数1,参数类型形式参数2,….){程序代码return返回值;}其中:形式参数:在方法被调用时用于接收外部传入的数据的变量。参数类型:就是该形式参数的数据类型。返回值:方法在执行完毕后返还给调用它的程序的数据。返回值类型:函数要返回的结果的数据类型。实参:调用函数时实际传给函数形式参数的数据。如何理解函数返回值类型为void的情况函数的调用函数调用的格式在函数中使用return提前返回函数调用的过程分析函数的重载函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。如:publicclassTest{publicstaticvoidmain(String[]args){intisum;doublefsum;isum=add(3,5);isum=add(3,5,6);fsum=add(3.2,6.5);}publicstaticintadd(intx,inty){reutrnx+y;}publicstaticintadd(intx,inty,intz){returnx+y+z;}publicstaticdoubleadd(doublex,doubley){returnx+y;}}java中的运算符运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成。运算符共分以下几种:–算术运算符–赋值运算符–比较运算符–逻辑运算符–移位运算符算术运算符算术运算符的注意问题“+”除字符串相加功能外,还能把非字符串转换成字符串,如:“x”+123;的结果是“x123”。如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。intx=3510;x=x/1000*1000;实际运行结果是3000,想想为什么?算术运算符的应用技巧思考题1:某个培训中心要为新到的学员安排房间,假设共有x个学员,每个房间可以住6人,让你用一个公式来计算他们要住的房间数?答案:(x+5)/6。这种算法还可用在查看留言板的分页显示上:其中x是总共的留言数,6是每页显示的留言数,结果就是总共有多少页。思考题2:假设你要让x的值在0至9之间循环变化,请写出相应的程序代码。答案:intx=0;while(true){x=(x+1)%10;}赋值运算符注1:在JAVA里可以把赋值语句连在一起,如:x=y=z=5;在这个语句中,所有三个变量都得到同样的值5。注2:x+=3等效于x=x+3,等于*=,-=,/=依此类推。比较运算符注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。注2:比较运算符“==”不能误写成“=”,切记!切记!逻辑运算符注1:逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型。注2:“&”和“&&”的区别在于,如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&&”的左边为false,则将不会计算其右边的表达式。“|”和“||”的区别与“&”和“&&”的区别一样。“&”和“&&”的区别分析publicclassTestAnd{publicstaticvoidmain(String[]args){intx=0;inty=3;if(x!=0&&y==y/x)System.out.println(y=+y);}}上面例子中,由于while语句的判断条件中的第一个布尔表达式是不成立的,程序就不会判断第二个布尔表达式的值,这就是“短路”。如果两个表达式之间用“&”来连接,如果正好碰到上面所示的特殊情况,程序运行时就会出错位运算符任何信息在计算机中都是以二进制的形式保存的,&,|,^除了可以作为逻辑运算符,也可以做为位算符,它们对两个操作数中的每一个二进制位都进行运算。–只有参加运算的两位都为1,&运算的结果才为1,否则就为0。–只有参加运算的两位都为0,|运算的结果才为0,否则就为1。–只有参加运算的两位不同,^运算的结果才为1,否则就为0。我们可以对数据按二进制位进行移位操作,java的移位运算符有三种:–左移–右移–无符号右移“”和“”区别的实例分析publicclassShiftTest{publicstaticvoidmain(String[]args){intx=0x80000000;inty=0x80000000;x=x1;y=y1;System.out.println(“0x800000001=”+Integer.toHexString(x));System.out.println(“0x800000001=”+Integer.toHexString(y));}}运行结果如下:0x800000001=c00000000x800000001=40000000十六进制与二进的对比0x8000000016=1000,0000,0000,0000,0000,0000,0000,000020xc000000016=1100,0000,0000,0000,0000,0000,0000,000020x4000000016=0100,0000,0000,0000,0000,0000,0000,00002移位运算的注意事项及小技巧移位运算符适用类型有byte、short、char、int、long对低于int型的操作数将先自动转换为int型再移位。对于int型整数移位ab,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a33和a1结果是一样的,a32的结果还是a原来的数字。对于long型整数移位时ab,则是先将移位位数b对64取模。移位不会改变变量本身的值。如a1;在一行语句中单独存在,毫无意义。x1的结果和x/2的结果是一样的,x2和x*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。请思考:如何用程序实现求2的x次方。答案:y=1x;运算符的优先级我们可以使用括号改变运算赋的优先级,分析inta=2;intb=a+3*a;语句的执行过程与inta=2;intb=(a+3)*a;语句的执行过程的区别。如何避免多个运算符带