1、第二章,1,第二章 Java程序设计的基本概念,标识符 数据类型 常量值 变量 运算符与表达式,第二章,2,标识符 标识符:用于定义各种对象名称的字符串集合用户自定义标识符:一般指变量或方法等的名字; 系统专用标识符又称关键字:是编译程序本身所规定使用的专用词。标识符命名规则: 可以用字母、下划线“_”或“$”作为开头字符,但数字不能作为变量的开头字符; 标识符中间不能使用空格; 不能使用Java的操作符,如“”、“”、“*”、“/”等; 用户自定义标识符不能使用Java的关键字; 严格区分大小写,即:my_var和My_var将被认为是两个不同的标识符。Java所提供的主要关键字:P24例:
2、className、 $member、 _variable、 var_num、 varObj11var、 case、 are&,第二章,3,数据类型,一.Java数据类型,第二章,4,常量,在程序的整个运行过程中,其值保持不变的量,称之为常量,在Java程序设计语言中,常量有多种类型:,第二章,5,1. 整型常量 Java的整型常量值有三种形式:(1)十进制数形式:如54,-67,0。(2)八进制数形式:Java中的八进制常数的表示是以0开头, 如0125表示十进制数85,-013表示十进制数-11。(3)十六进制数形式:Java中的十六进制常数的表示是以0x或0X开头,如0x100表示十进制
3、数256,-0X16表示十进制数-22。整型(int)常量默认在内存中占32位,具有整数类型的值,当运算过程中所需值超过32位长度时,可以把它表示为“长整型(long)”数值,长整型类型则要在数字后面加L或l,如697L,表示一个长型整数,它在内存中占64位。,第二章,6,Java语言在简单数据类型类中提供了四个特殊符号常量用来表示整型的最大和最小值常量:,2 实型常量 Java的实型常量值有两种形式: (1) 十进制数形式:由数字和小数点组成,且必须有小数点,如12.34,-98.0。 (2) 科学计数法形式:如:1.75e5或326E3,其中e或E之前必须有数字,且e或E之后的数字必须为整
4、数。 Java实型常量默认在内存中占64位,是具有“双精度型”(double)类型的值。如果考虑到需要节省运行时的系统资源、而运算时的数据值取值范围并不大且运算精度要求也并不太高的情况下,可以把它表示为“单精度型”(float)类型的数值,单精度型数值要在该常数后面加F或f,如69.7f,表示一个float型实数,它在内存中占32位。,第二章,8,Java简单数据类型类中提供的几个表示最大、最小值的实型常量以及其他几个溢出的实型特殊符号常量:,第二章,9,3.字符型和字符串常量 Java的字符型常量值是用单引号引起来的一个字符,如e、E,需要特别注意的是,单引号和双引号在此不可混用,双引号是用
5、来表示字符串的,“H”、“d”等都是表示单个字符的字符串。 除了以上所述形式的字符常量之外,Java还允许使用一种特殊形式的字符常量来表示一些难以用一般字符来表示的字符,这种特殊形式的字符是以一个“”开头的字符序列,称为转义字符,下表列出了Java中常用的转义字符及其所表示的意义:,第二章,10,Java常用转义字符 :,4. 布尔型常量Java的布尔型常量值只有两个值:false(假)和true(真)。,第二章,12,常量的定义和使用,final type = ,=其中 type表示数据类型名 常量名的命名规则就是标识符的命名规则 表示该项可选 常量命名约定:一般常量名都用大写字母表示,如果
6、有多个单词组成常量名,单词之间用下划线连接。,第二章,13,例2.2.1:已知圆半径值(R)计算圆面积(S=R2),public class CircleAreapublic static void main(String args)final int R=3; / 声明R为整型常数,并赋值为3System.out.println(“The circle area is n“+(3.14*R*R); ,第二章,14,变量,2.3.1 变量概述变量是程序中的基本存储单元,在程序的运行过程中,变量的值可视具体情况而变动。与常量类似的是,变量也可分为下述类型:1 整型变量,第二章,15,2 实型变量
7、,第二章,16,3. 字符变量字符变量的类型为char,它在内存中占16位,其取值范围为0 65535。Java中的字符数据集属于Unicode字符集,是16位无符号型数据,例如0x0061表示字符a,也就是十进制数97。4. 布尔型变量Java的布尔型变量的取值范围只有两个值:false(假)和true(真)。在内存中占1位。布尔型变量又称为逻辑型变量,一般用于逻辑测试,在程序的流程控制中的使用率相当高。,第二章,17,2.3.2 变量的定义及赋值1 变量名命名规则:约定:变量名是以小写字母开头(而类名是以一个大写字母开头的),如果变量名包含了多个单词,而每个单词要组合在一起,则在每个单词的
8、第一个字母大写,比如isVisible。而下划线(_)可以处在变量的任何地方,但是一般它只用在标识符常量中分离单词,因为标识符常量的常量名都是用大写字母的,利用下划线可以看得更清楚。一般来说,变量名不宜太简单,但也不宜过长。,第二章,18,2 变量的定义:,规定:变量在使用之前,必须先经过定义(或者也称为声明)。在Java中定义一个变量,必须确定它的数据类型和相应的变量名。语法形式:type =value,=value其中type即为变量的数据类型。多个同类型变量可以同时定义,中间用逗号分隔。例:int studentNum,score;float averValue;,第二章,19,3 变量
9、的赋值,变量的赋值方式有两种形式: (1)可以在定义的同时进行赋值; (2)在以后的程序运行中进行赋值。例:float averValue=10.22fdouble averCount=10.32876d,不可省,第二章,20,例: class Integerpublic static void main(String args)byte a=015;byte b=20;byte c=0x25; short x=30;long y=1234567890123L; float m=35.45f;double n=3.56e18; System.out.println(“a=“+a+“ “+“b=
10、“+b+“ “+“c=“+c);System.out.println(“x=“+x+“ “+“y=“+y);System.out.println(“m=“+m+“ “+“n=“+n); ,第二章,21,例: class Characterpublic static void main(String args)char ch1=a;char ch2=80;char ch3=n;char ch4=070;char ch5=u0050; System.out.println(“ch1=“+ch1+“ “+“ch2=“+ch2+ch3);System.out.println(“ch4=“+ch4+“
11、“+“ch5=“+ch5); ,第二章,22,例: class Samp2_5public static void main(String args)String str1=“abc“;String str2=“n“;String str3=“80 070 u0050“; System.out.println(“str1=“+str1+“str2=“+str2+“str3=“+str3); ,第二章,23,2.3.3 变量的作用域 变量的作用域:可以访问该变量的程序代码的范围。按作用域来分,变量可分为以下几种:局部变量、类成员变量、方法参数和异常处理参数。 局部变量定义在方法中或方法内的一个代
12、码块中,其作用域为它所在的代码块。例如: public void ittee () int a=0 ; /变量a的作用域为界定方法体的两个大括号之间的区域 public void ittee ()int a=0 ;for (int i=0 ; i10 ; i+) 变量i的作用域为for循环所确定的两个大括号 之间的区域。,第二章,24,例:理解作用域 Class ScopeDemopublic static void main(String args)int x;x = 10;if ( x =10)int y =20;System.out.println( “x and y:” + x + ”
13、 ” + y);x = y * 2;/ y =100;System.out.println ( “x is” + x); ,第二章,25,成员变量是定义在类里面,但不在类里面的某个方法中,其作用域为整个类。方法参数用于将方法外的数据传递给方法,其作用域就是方法的方法体。异常处理参数将数据传递给异常处理代码,其作用域是异常处理部分。在作用域中声明的变量对于作用域之外定义的代码是不可见的。作用域提供了封装的基础。,第二章,26,2.3.4 变量的默认值,在Java程序中定义的变量若是还没有赋予初值,Java会给予一个默认值。下表列出了各种不同数据类型的默认值:,注意:Java对基本数据类型变量赋予
14、默认值不适用于局部变量,局部变量必须自行赋初值。,第二章,27,Java允许它的用户有限度地进行数据类型转换处理。1.自动类型转换:整型、实型和字符型数据需要进行混合运算时,首先需要把不同类型的数据转化为同一类型,然后才能进行运算。转换时,系统将按照数据类型的表示范围由小到大的转换原则自动进行。数据类型的表示范围由小到大的顺序依次为:小 大 byte short char int long float double,基本数据类型的转换,第二章,28,例2-5-1 自动类型转换示例 :,class TyChangepublic static void main(String args)int i
15、=100; char c1=a; byte b=3;long l=567L;float f=1.89f;double d=2.1;int i1=i+c1; /char类型的变量c1自动转换为与i一致的int类型参加运算long l1=l-i1; /int类型的变量i1自动转换为与l一致的long类型参加运算float f1=b*f; /byte类型的变量b自动转换为与f一致的float类型参加运算double d1=d+f1/i1; /*int类型的变量i1自动转换为与f1一致的float类型 f1/i1计算结果为float类型.然后再转换为与d一致的double类型。*/System.out
16、.println(“i1=“+i1); System.out.println(“l1=“+l1); System.out.println(“f1=“+f1); System.out.println(“d1=“+d1); ,第二章,29,2.强制类型转换,语法形式为:(type) 例如:int m=3 ;byte b = ( byte ) m ; /把int型变量m强制转换为byte型有时当两个整数相除时,系统会把这种运算归为整数类型的运算,因此想要得到运算的结果为实型数,就必须将两个整数中的一个(或两个)强制转换为实型,此时下面的三种写法均可行:(1)( float ) a / b (2)a
17、/ ( float ) b (3)( float ) a / ( float ) b 这不会影响该变量原先定义的类型。,第二章,30,例: 数据类型的强制转换 public class CastDemopublic static void main(String args) double x,y;byte b;int i;char ch;x = 10.0;y = 3.0;i = (int) (x/y);System.out.println(“x/y:“ + i); i = 100; b = (byte) i; System.out.println(“b:“ + b); i = 257; b =
18、 (byte) i; System.out.println(“b:“ + b); b = 88;ch = (char) b;System.out.println(“ch:“+ch); ,第二章,31,运算符与表达式,Java语言有着相当广泛的运算功能。所谓运算,就是通过某些运算符将一个或多个运算对象连接起来,组成一个符合Java语法的式子,这式子被称为表达式,系统经过对表达式的处理,产生一定的结果。其中,运算对象必须属于某种确定的数据类型。对大多数的运算符来说,运算符的前后都需要有运算对象,这种运算符称为二元运算符,但也有些运算符,它的运算对象只有一个,例如,对一个数进行取负值(-)的运算,这
19、种运算符便称为一元运算符。,第二章,32,写出程序的输出结果:,public class PrintingEscape02public static void main(String args)System.out.println(“Escape Codes“);System.out.println(“t“);System.out.println(“t“); ,第二章,33,一.赋值运算符与赋值表达式,当需要为各种不同的变量赋值时,就必须使用赋值运算符“=”,这里的“=”不是“等于”的意思,而是“赋值”的意思,例如:(1) a1=5;(2) a1=a1+4;(3) j = i =5 ;,第二章
20、,34,二.算术运算符与算术表达式,1.算术运算符,第二章,35,例2.4.1 算术运算符在程序中的使用 public class MathOperator public static void main(String args)int a=13; / 声明int变量a,并赋值为13int b=4; / 声明int变量b,并赋值为4 System.out.println(“a=“+a+“,b=“+b); / 输出a与b的值System.out.println(“a+b=“+(a+b); / 输出a+b的值System.out.println(“a-b=“+(a-b); / 输出a-b的值Sys
21、tem.out.println(“a*b=“+(a*b); / 输出a*b的值System.out.println(“a/b=“+(a/b); / 输出a/b的值System.out.println(“a/b=”+(float)a/b); / 输出(float)a/b的实型数值System.out.println(a+“%“+b+“=“+(a%b); / 输出a%b的值System.out.println(b+“%“+a+“=“+(b%a); / 输出b%a的值 ,第二章,36,2.递增和递减运算符,递增运算符: +递减运算符: -若在程序中定义了变量ii = i + 1 ; i+ ;递增运算
22、符是一元运算符,它可以被放在运算对象的后面(i+),也可以被放在运算对象的前面(+i)。必须注意的是这两者所代表的意义是不一样的。递增(递减)运算符运算及执行原则如下表所示:,第二章,37,例如:,int i=3; System.out.println(i+); 此时的输出结果为3,待输出结束后,i才增值为4。+i的执行原则则相反:是先增1,后引用。如对如下的语句块:int i=3; System.out.println(+i); 此时的输出结果为4,i先增值为4,然后输出结果。例:One_Operate.java,第二章,38,三.关系运算符与关系表达式,Java的关系运算符都是二元运算符,
23、由Java关系运算符组成的关系表达式的计算结果为布尔类型(即逻辑型)。 所有对象支持 = 和!=;、=只支持顺序关系的类型,即数值型和char类型;,第二章,39,四.逻辑运算符与逻辑表达式,逻辑运算符经常用来连接关系表达式,对关系表达式的值进行逻辑运算,因此逻辑运算符的运算对象必须是逻辑型数据,其逻辑表达式的运行结果也是逻辑型数据。Java的逻辑运算符有三种,具体表示与运算规则如表1与表2所示:,表1:逻辑运算符使用说明,表2:逻辑运算符运算规则,第二章,40,例:要判别某一年year是否是闰年,闰年的判别条件是:能被4整除但不能被100整除,或者能被400整除。用一个逻辑表达式来表示: (
24、year % 4= =0 & year % 100 !=0) | year % 400 = = 0当year为某一整数值时,上述表达式值为true,则year年为闰年,否则为非闰年。,Age285 & Mark1=100 | Mark2=100 | Mark3=100有问题吗?,例: 选拔优秀生的条件是:年龄(Age)小于19岁,三门课总分(Total)高于285分,其中有一门为100分, 其表达式写为,第二章,41,在Java中,运算符&和 | 的运算规则遵循一种在电工学中称为“短路”的执行方式,即对于逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出
25、表达式的结果时,才执行该运算符。例如:a & b & c:如果a非真,则不再判别b和c,直接输出表达式的值为false;若a为真,则判别b,若b非真,则不再判别c,直接输出表达式的值为false;当a、b同时为真,才判别c的真假。a|b|c:如果a为真,则不再判别b和c,直接输出表达式的值为true;若a非真,则判别b,若b为真,则不再判别c,直接输出表达式的值为true;当a、b同时非真,才判别c的真假。,第二章,42,五.复合赋值运算符,复合赋值运算符是一种将算术运算符与赋值运算符相结合的一种运算符,这些运算符的说明及使用方式如下表所示:,第二章,43,例2-8复合赋值运算符在程序中的简单
26、使用:,public class CompOperatingpublic static void main(String args) int a=5,b=8;System.out.println(“Before calculate: a=“+a+“,b=“+b);a+=b; / 计算a+=b的值System.out.println(“After += calculate: a=“+a+“,b=“+b); a-=b; / 计算a-=b的值System.out.println(“After -= calculate: a=“+a+“,b=“+b);a*=b; / 计算a*=b的值System.ou
27、t.println(“After *= calculate: a=“+a+“,b=“+b); a/=b; / 计算a/=b的值System.out.println(“After /= calculate: a=“+a+“,b=“+b); ,第二章,44,六.其它运算符,1.位运算符,位运算符用来对二进制位进行操作,其具体说明如下表所示:,第二章,45,1) 1010 0000 0000 0000 0000 0000 0000 00004 1111 1010 0000 0000 0000 0000 0000 0000 2) 1010 0000 0000 0000 0000 0000 0000 0
28、0004 0000 1010 0000 0000 0000 0000 0000 0000,第二章,46,2.条件运算符:?:,条件运算符是三元运算符:? e1 : e2其中表达式值的类型为逻辑型,若表达式的值为真,则返回e1的值;表达式值为非真,返回e2的值。 设有下列代码语句:int a = 3 , b = 6 , c ;c = (ab) ? 1 : 2 ;则执行后c的值为2。,第二章,47,七.运算符的优先级与结合性,在表达式求值时,先按运算符的优先级别由高到低的次序执行。如果在一个运算对象两侧的优先级别相同,则按规定的“结合方向”处理,称为运算符的“结合性”。例:当 a = 3 ; b
29、= 4 时若 k = a 5 + b ,则 k = 2 (先计算a-5,再计算-2+b)若 k = a + =b -= 2,则 k = 5(先计算b -= 2,再计算a + =2)P39 表2-15,第二章,48,程序运行的结果:,public class Example public static void main(String argc) int x,a=2,b=3,c=4; x=+a+b+c+; System.out.println(“x=“+x); System.out.println(“a=“+a)System.out.println(“b=“+b)System.out.println(“c=“+c) ,