1、Java语言程序设计,资源与环境科学学院,第二章 Java语言基础,Java的基础语法(1), Java程序必须放在一个类中 Java是严格区分大小写的 Java是一种自由格式的语言一条语句可以分成多行来书写。但是在换行时不能将一个单词分隔,一个字符串也不能分隔,如果一定要分隔字符串,那就要用“号相连。 Java程序有三种注释方式/* */ 多行注释/ 单行注释/* */ 文件注释,这表明此后正文内容可以由自动文档生成器javadoc读取,它可以为Java API生成HTML文件。,Java的基础语法(2), java中的标识符 java中的包、类、方法、参数和变量的名字,可由任意顺序的大小写
2、字母、数字、下划线(_)和美元符号($)组成,但标识符不能以数字开头,不能是关键字。,合法的标识符: indentifier username user_name _userName $username,非法的标识符: class 98.3 Hello World,Java的关键字,注:java 留做将来使用的goto, const 关键字,不能用作变量名,Java的常量(1), 整型常量 十进制(12),八进制(012),十六进制 (0x12) 长整型常量 13L 单精度浮点数 5.1f,.4f ,0f 双精度浮点数 5.1,.4,0d 布尔常量 true和false,Java的常量(2),
3、 字符常量 a , 8, u0027 r 表示接受键盘输入,相当于按下了回车键; n 是换行; t 是制表符,相当于table键; b 是退格键,相当于Back Space; 是单引号,而“是双引号; 是一个斜杠“”。 字符串常量 “Hello World“,”123”, “Welcome nXXX“ null常量 null常量只有一个值,用null表示,表示对象的引用为空,Java的常量(3), 要声明常量,可在变量声明前加上关键字final,并给变量指定一个初值。如 final double PI = 3.141592 final boolean DEBUG = false final i
4、nt PENALTY = 25实例程序:书 P21,Java的变量(1),变量:是系统为程序分配的一块内存单元,用来 存储各种类型的数据。根据所存储的数据类型的不同,有各种不同类型的变量。变量名代表这块内存中的数据 。,Java的变量(2),Java的变量(3), 字节类型 byte占用一个字节(8位),数字大小为 -27 27-1 短整数类型 short占用两个字节(16位),数字大小为 -215 215-1 整数类型 int占用四个字节(32位),数字大小为 -231 231-1 长整数类型 long占用八个字节(64位),数字大小为 -263 263-1,Java的变量(4), 单精度浮
5、点类型 float占用四个字节(32位),数字大小为1.4E-45 3.4E38F ,有效数位约为6 7位。 双精度浮点类型 double占用八个字节(64位),数字大小为4.9E-324 1.7E308 ,有效数位约为14 15位。 字符类型 char占用两个字节(16位),数字大小为0 216-1,是unicode编码。字符类型是一种基于整数的类型,可以直接算术运算 布尔类型 boolean取值只有两个,true和false,Java类型转换, 编译程序将会检查数据类型,防止两个不兼容的数据类型之间随意进行赋值 类型转换分两类:自动类型转换(也叫隐式类型转换) 某些数值的转换不需要强制进行
6、,Java允许把一个较小的数据类型的值直接赋给一个具有较大范围的数据类型的变量。例,把整数类型的值赋给长整数类型的值。强制类型转换(也叫显式类型转换) 通过在表达式前面的圆括号中写入新的类型名,即可以把一个表达式强制转换成另一个数据类型。例:float f = 3.142F;int t = (int)f;,变量的生命周期, 变量要先定义,后使用,但不是在变量定义后的语句一直都能使用前面定义的变量。我们可以用大括号将多个语句包起来形成一个复合语句,变量只能在定义它的复合语句中使用。,public class TestScope public static void main(String arg
7、s)int x = 12; int q = 96; / x和q都可用int x = 3; System.out.println(“x is “+x); System.out.println(“q is “+q);q = x; System.out.println(“x is “+x); ,/错误的定义,Java中不允许有这种嵌套定义,/ 错误的行,只有x可用,q 超出了作用域范围,Java的类型系统,Java中的运算符,运算符的定义,运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成 。运算符共分以下几种: 算术运算符 赋值运算符 比较运算符 逻辑运算符 移位运算符,
8、算术运算符,算术运算符中注意问题,“+”除字符串相加功能外,还能把非字符串转换成字符串 ,如: “x”+123;的结果是“x123” 。 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了,如:-7%2 = -1 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。int x=3510;x=x/1000*1000;等于?,实际运行结果是3000,算术运算符的应用技巧,思考题1:某个培训中心要为新到的学员安排房间,假设共有x个学员,每个房间可以住6人,让你用一个公式来计算他们要住的房间数?思考题2:假设你要让x的值在0至
9、9之间循环变化,请写出相应的程序代码。,答案:(x+5)/6。这种算法还可用在查看留言板的分页显示上: 其中x是总共的留言数,6是每页显示的留言数,结果就是总共有多少页。,答案: int x=0;while(true)x = (x+1)%10;,另一个编程实例:书P25,赋值运算符,注1:在JAVA里可以把赋值语句连在一起,如:x = y = z = 5 ;在这个语句中,所有三个变量都得到同样的值5。 注2:x += 3 等效于 x = x + 3, *= ,-=,/=依此类推。,比较运算符,5,注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。 注2:比较运
10、算符“=”不能误写成“=” ,切记!切记!,逻辑运算符,注1:逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型 。 注2:“&”和“&”。 “&”可作用于两个布尔操作数或两个整数操作数。作用于布尔操作数时,无论任何情况,“&”两边的表达式都会参与计算。如果使用“&” ,当“&”的左边为false,则将不会计算其右边的表达式。“|”和“|”的区别与“&”和“&”的区别一样。,见书:P28,“&”和“&”的区别分析,public class TestAnd public static void main(String args)int x=0;int y=3;i
11、f(x!=0 上面例子中,由于if语句的判断条件中的第一个布尔表达式是不成立的,程序就不会判断第二个布尔表达式的值,这就是“短路”。如果两个表达式之间用“&”来连接,如果正好碰到上面所示的特殊情况,就会出错。,位运算符,任何信息在计算机中都是以二进制的形式保存的,&,|,除了可以作为逻辑运算符,也可以做为位算符,它们对两个操作数中的每一个二进制位都进行运算。 只有参加运算的两位都为1,&运算的结果才为1,否则就为0。 只有参加运算的两位都为0,|运算的结果才为0,否则就为1。 只有参加运算的两位不同,运算的结果才为1,否则就为0。,位运算符,我们可以对数据按二进制位进行移位操作,java的移位
12、运算符有三种: 右移(带符号右移)带符号右移,空出高位改成最高位值。 无符号右移(右移零填充)无符号位移,空出高位补0.,“”和“”区别分析,public class ShiftTest public static void main(String args)int x=0x80000000; /x十进制为:-231 = -2147483648int y=0x80000000;x=x1;y=y1; System.out.println(“0x800000001 = ” + Integer.toHexString(x); System.out.println(“0x800000001 = ” +
13、 Integer.toHexString(y); ,运行结果如下:0x800000001 = 0xc0000000 /十进制为:-10737418240x800000001 = 0x40000000 /十进制为:1073741824十六进制与二进的对比0x8000000016 = 1000,0000, 0000, 0000, 0000, 0000, 0000, 00000xc000000016 = 1100,0000, 0000, 0000, 0000, 0000, 0000, 0000 0x4000000016 = 0100,0000, 0000, 0000, 0000, 0000, 000
14、0, 0000,位运算注意问题(1),移位运算符适用类型有byte、short、char、int、long对低于int型的操作数将先自动转换为int型再移位 对于int型整数移位ab,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a33和a1结果是一样的,a32的结果还是a原来的数字对于long型整数移位时ab ,则是先将移位位数b对64取模。,位运算注意问题(2),移位不会改变变量本身的值。如a1;在一行语句中单独存在,毫无意义。x1的结果和x/2的结果是一样的,x2和x*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2
15、的n次方。请思考:如何用程序实现求2的x次方?,答案:y = 1 x;,运算符号的优先级,我们可以使用括号改变运算赋的优先级,分析int a =2;int b = a + 3*a; 语句的执行过程 与int a =2;int b =( a + 3)*a; 语句的执行过程的区别 。,多个运算符的注意问题,对于int a =2; int b= a + 3 * a+;这样的语句,b最终等于多少呢?对于int a =2; int b= (3 * a+) + a;这样的语句,b最终等于多少呢?对于int a =2; int b= (a+)+ 3 * a;这样的语句,b最终等于多少呢?, Java的计算顺
16、序规定,对于所有二元运算符(带两个操作数),在计算右边的操作数之前,总是应当先全部计算出左边的操作数。因此,b + c*d,b必须在指向乘法操作之前先行计算(因为对加法运算来说,乘法是它右边的操作数),试验得到的结果是a=3, b=8。,试验得到的结果是a=3, b=9。,试验得到的结果是a=3, b=11。,多个运算符的注意问题,public class MathTest /Java应用程序由main方法开始执行public static void main(String args)int a=2; int b= a + 3 * a+;System.out.println(“a=“+a);S
17、ystem.out.println(“b=“+b); ,多个运算符的注意问题,与其去思考其中的原因,我们还不如将上面的第二句改为几条语句来实现我们想要的结果。不要在一行中编写太复杂的表达式,也就是不要在一行中进行太多的运算在一行中进行太多的运算并不能为你带来什么好处,相反只能带来坏处,它并不比改成几条语句的运行速度快,它除可读性差外,还极容易出错。对于优先级顺序,不用刻意去记,有个印象就行。如果你实在弄不清这些运算先后关系的话,就用括号或是分成多条语句来完成你想要的功能,因为括号的优先级是最高的。,本章总结, 掌握Java的基础语法。程序编写位置,大小写,注释方式,标识符,关键字。 掌握Java的常量和变量数据类型。各数据类型所占字节数,数据表达范围,类型转换,变量的生命周期问题。 掌握Java的运算符。算术运算符及注意问题,赋值运算符号,比较运算符,逻辑运算符,位运算符及注意问题。运算符的优先级及多个运算符的注意问题。,思考题, Java有哪些数据类型,各数据类型所占字节数是多少?类型转换分为几类? Java有哪些运算符类型?使用时分别需要注意哪些问题?,