1、第二章,Java,基础,学习目标:,掌握标识符和关键字,熟练使用各种数据类型的定义、表示和引用,掌握算术、逻辑和布尔运算符,自动类型转换和强制类型转换,2.1,标识符,Java,保留字,标识符的命名规则,一定要牢记啊,类名首字母大写;,符号常量名全部字母大写;,变量名、对象名、方法名、包名等标识符全部采用小写字母;如果标识符由多个单词构成,则首字母小写,其后单词的首字母打写,其余字母小写;,合法的标识符,identifier,userName,User_Name_sysval,$change,A98_23,_,abc,非法的标识符,2mailroom#class,A-4,3_1,the,Jav
2、a,保留字,(,又称,关键字,),关键字不能作为标识符;,关键字是,具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字,(reserved word),下面列出了,java,语言中的所有保留字:,abstract do implements protected throws,boolean,double import public transient,break else,instanceof,return true this throw,byte extends,int,short try synchronized,case false interface static v
3、oid continue,catch final long,strictpf,volatile,goto,default,char finally native super while package,class float new switch const for null if private,java,中的关键字均用小写字母表示。,数据类型与常量、变量,数据是计算机程序处理的对象,数据的类型决定了数据的表示方式、取值范围以及可进行的操作。,基本类型包括:,整型,byte,short,int,和,long,浮点型,float,和,double,字符型,char,逻辑型,boolean,引用
4、类型(需要用户自己定义),数组,接口,类,基本数据类型,数据类型名,占用内存空间,数值范围,缺省值,说明,byte,1,字节,(-128),127,0,整,型,short,2,字节,(-32768),32767,0,int,4,字节,(-2147483648),2147483647,0,long,8,字节,(-9223372036854775808),9223372036854775807,0,float,4,字节,0.0,F,浮,点,型,double,8,字节,0.0,D,char,2,字节,字符型,boolean,1,字节,true或false,false,布尔型,类型,长度,范围,byt
5、e,8bit,-2,7,2,7,-1,(,-128127,),short,16bit,-2,15,2,15,-1,(,-3276832767,),int,32bit,-2,31,2,31,-1(-,2147483648,2147483647),long,64bit,-2,63,2,63,-1,(-9 223 372 036 854 775 808 9 223 372 036 854 775 807),存储没有小数部分的数据类型,Java,各整数类型有固定的表数范围和字段长度,而不受具体操作系统的影响,以保证,Java,程序的可移植性,1,、整型,数值,20,在内存中的存储形式,00010100
6、byte,(,1,字节),00000000,00010100,short,(,2,字节)高位置,0,00000000,00000000,00000000,00010100,int,(,4,字节),00000000,00000000,00000000,00000000,00000000,00000000,00000000,00010100,Long,(,8,字节),2,、浮点型,浮点型是带有小数部分的数据类型,包括两种不同的数据类型:,float,和,double,。,float,类型的变量占用,4,个字节(,32,位),,double,类型的数据则需要,8,个字节(,64,位)内存。,在许多
7、程序中,就其表示的数值范围而言,使用,float,类型来存储浮点数已经足够了。,浮点数据有两种表示形式,十进制数形式,必须含有小数点,例如,:,3.14 314.0 .314,科学记数法形式,如,3.14e2 3.14E-12,Java,浮点数据默认为,double,型,如要声明一个常量为,float,型,则需在数字后面加,f,或,F,,,如:,double d=3.14;,float f=3.14,f,;,3,、布尔型(,boolean,),布尔数据类型用于表达两个逻辑状态之一的值:,true,(,真)或,false,(,假)。,布尔型数据只有两个值,true,和,false,,且它们不对应
8、于任何整数值。,布尔型变量的定义如:,boolean,b=true;,4,、字符型,(char),字符型数据类型用于存放,单个字符,,每个字符占用,2,个字节(,16,位)的存储空间。,将一个字符放到一个字符变量中,,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的,Unicode,代码,放到存储单元中。,char c1=t;,char c2=3;,char,基于,Unicode,编码,,u,前缀标志着这是一个,Unicode,值,例如,,u0061,代表字符,a,。,新术语,在,Java,技术中:,变量,=,属性,方法,=,操作,类仍然称作类,所谓类就是一类,属性(变量),和,
9、操作(方法),的描述。其中,,属性可用一系列的,变量,表达,而操作用一系列,方法,表示,。,一类人员,Person,:,抽象出下列属性:名字、年龄、身高、婚否、性别,分别用变量,name,、,age,、,height,、,marriage,、,sex,表示,(见名知义),,,吃饭,讲话,走路等行为可表示为相应的方法,eat(),,,speak(),,,walk(),等。,用,Java,语言描述,Person,类如下:,class Person,/,以下,5,个是变量,String name;,int,age;,double height;,boolean,marriage;,char sex;
10、speak(),/,方法,eat(),/,方法,对,Person,类中某一特定的人,上述变量就有特定的值,,如,name,(,张三),,age,(,20,),,height,(,1.76,),,marriage,(,false,),,sex,(,m,)。,变量(属性),变量是用来存放指定类型的数据,其值在程序,运行,过程中是可变的。,在使用,Java,中的每个变量之前,都必须对它进行声明。,变量的声明形式如下:,修饰符,类型标识符号,变量名常量,;,变量声明包括指明,变量的数据类型、变量名和作用域,其中,数据类型,说明了这个变量能存放什么样的数据。,变量名,是用来标识该变量的,我们存取变量的
11、内容(变量的值)都是通过,变量名,来实现的。,变量名,在,Java,中用标识符来表示变量名。象,Person,这个类,我们使用了,name,、,age,、,tall,、,marriage,、,sex,这几个标识符,分别定义了五个变量。,程序员应该为变量取有意义的名称,以利于程序的阅读和理解。,(见名知义),但变量取名时还有一些限制:,变量名由字母、数字、下划线或美元符“,$”,组成的,变量名不能以数字作为第一个字符,区分大小写,下面是合法的变量名:,Month,(,不同于,month,),,,student_name,,,class1,,,dollar$,,,$,abc,而下面的变量名都不合法
12、3,a46,,,a,b,,,abc,-,d,,,#,ef,.,变量名,变量名中字母大写和小写是有区别的,,name,和,Name,表示两个不同的变量名。,Java,中约定,变量名以小写字母开头,若一个变量名由超过一个单词所组成,则第一个单词之后的所有单词都以大写字母开头,以便于理解该变量名。,例如:,anIntVar,表示一个整型变量。,变量的初始化,赋予变量一个初值,称为变量的初始化。可在定义变量的同时进行变量的初始化,如:,int,anIntVar,=1;,char,aCharVar,=A;,float,aFloatVar,=1.23f;,boolean,aBooleanVar,=tr
13、ue;,也可定义变量后再单独初始化,如:,int,anIntVar,;,char,aCharVar,;,float,aFloatVar,;,boolean,aBooleanVar,;,anIntVar,=1;,aCharVar,=A;,aFloatVar,=1.23f;,aBooleanVar,=true;,两种方法都完成了定义变量:,anIntVar,、,aCharVar,、,aFloatVar,、,aBooleanVar,,,并分别给它们赋初值:,1,、,A,、,1.23,、,true,。,变量的作用域,变量的作用域:变量的使用范围。,假定在某代码段中能够使用一特定变量,则此段代码即是该变
14、量的作用域。,在类中声明的类成员变量,可在该类的各个成员方法中使用;,在某个方法体中或参数表中声明的变量,只能在该方法体中使用;,在某个语句块中声明的变量,只能在该语句块中使用。,变量的作用域,public class,VariableLifeTime,public static void,main(String,args,),int,sum=0,;,int,A=10,;,for(int,x=1;x=5;x+),int,y=0,;,y=,y+A,;,sum=,sum+y,;,System.out.print(x,=+x);,System.out.print(y,=+y);,System.out
15、println(sum,=+sum);,System.out.println(sum,=+sum);,查看结果:,VariableLifeTime,.java,class Person,/,以下,5,个成员变量,String name;,int,age;,double tall;,boolean,marriage;,char sex;/,以下,2,个方法,eat(String,eatwhat,),System.out.println(name,+”ate up the“+,eatwhat,);,Speak(String,saywhat,,,int,time),int,i;,for(i=0;i
16、time;i+),System.out.println(name,+”,say:”+saywhat,);,变量,name,、,age,、,tall,、,marriage,、,sex,的作用域,变量,i,的作用域,下图为变量作用域的示意图,:,由左图可以看出,变量,name,、,age,、,tall,、,marriage,、,sex,和变量,i,的作用域是不同的。变量,name,、,age,、,tall,、,marriage,、和,sex,的作用域是整个类,在类的方法中也可使用它们。,这种变量称之为,成员变量,。确切地讲,成员变量是在类当中、但不是在其类的方法中定义的变量。,而变量,i,是定义在
17、speak,方法中,它的作用域仅限于,speak,方法中。这类定义在某方法中的变量叫做,局部变量,。,注意:,同一作用域中不可有同名的变量。如上面的代码在,speak,方法中不能再定义一个名字为,i,的变量,。,在,Java,中嵌套的程序块的内层和外层,不允许定义相同的变量名,否则将导致编译错误。,public class,ScopeError,public static void,main(String,args,),int,E=999,;,int,E=999,;,System.out.println(“E,=+E);,常量,常量是指在程序运行过程中其值不变的量。,定义常量的方法有两种:,
18、1,)在定义变量的类型前面加,final,关键字,并同时进行初始化,如下所示:,final,int,aFinalVar,=0;,final double PI=3.14159;,(,2,),在定义变量的类型前面加,final,关键字,不进行初始化。通过另外的语句进行赋值。如下所示:,final,int,aFinalVar,;,aFinalVar,=0;,常量和变量,常量与变量之间最根本的区别是:常量在经过定义并给它一个值之后,不能再对它进行修改。而变量则无此限制。,对于常量,a,,,进行如下的操作是错误的:,final,int,a=1;,.,a=2;,而对于变量,a,,,如下这段代码则是正
19、确的。,int,a=1;,a=2;,示例:,public class Assign,public static void main(String ,args,),int,x;,int,y;,/,定义,x,y,两个整型变量,float z=1.234f;,/,指定变量,z,为,float,型,且赋初值为,1.234,double w=1.234;,/,指定变量,w,为,double,型,且赋初值为,1.234,boolean,flag=true;,/,指定变量,flag,为,boolean,型,且赋初值为,true,char c;,/,定义字符型变量,c,String,str,;,/,定义字符串
20、变量,str,String str1=Hi ;,/,指定变量,str1,为,String,型,且赋初值为,Hi,c=A ;,/,给字符型变量,c,赋值,A,str,=bye ;,/,给字符串变量,str,赋值,bye,x=12;,/,给整型变量,x,赋值为,12,y=x;,/,给整型变量,y,赋值为,12,2.3,运算符和表达式,运算符分类,依据操作数的个数:单目运算符(一元运算符)、双目运算符(二元运算符)、多目运算符。,根据操作数和运算结果分为:算术、关系、逻辑、位运算符、赋值运算符、条件运算符、括号运算符。,1,、算术运算符:,运算符优先级别,优先级规则:,(),乘除(从左到右),加减(
21、从左到右),复杂的表达式:,C=25-5*4/2-10+4,;,从左到右的规则求值,结果是:,34,按照优先级规则求值,结果是:,9,用()来表述想要的结构,2,、关系运算符:,3,、逻辑(布尔)运算符:,逻辑(布尔)运算真值表:,a,b,!a,a&b,,,a&b,a|b,,,a|b,ab,false,false,true,false,false,false,false,true,true,false,true,true,true,false,false,false,true,true,true,true,false,true,true,false,条件与(短路与),条件或(短路或),4,、位
22、运算符:,a,b,a,a&b,a|b,ab,0,0,1,0,0,0,0,1,1,0,1,1,1,0,0,0,1,1,1,1,0,1,1,0,位运算是对整数类型的操作数按二进制的位进行运算,运算的结果仍然是整数类型值。,位运算真值表,位移运算符,a,ab,a,向右移动,b,位,ab,a,向右移动,b,位,空位填,0,位移运算举例,运算符,:,将操作数的二进制位左移,高位溢出,低位补。,如,int,b=13;,b=b,运算符,:,将操作数的二进制位右移,低位溢出,高位补充原来高位的值。,如,int,b=60;,b=b1;(,此时,b,的值为,30,,,二进制右移一位相当于该数除?,)考虑若,b=-
23、60,b=b1,b?,运算符,:,将操作数的二进制位右移,低位溢出,高位补,0,。,5,、赋值运算符及条件运算符:,赋值运算符的形式:,变量名,=,表达式;,复合赋值运算符,x+=y,x=,x+y,x/=y x=,x/y,条件运算符,的形式:,表达式,1,?表达式,2,:表达式,3,举例,int,min,x,=4,y=20;,min=(x,高,byte,short,char,-,int,-long-float-double,高级数据类型要转换成低级数据类型,需要用到强制类型转换。,其一般形式为:,(,类型名,)(,表达式,),如:,int,i,;,byte b,;,i=356,;,b=,(,byte,),i,;,/,强制转换后丢失一部分数据,使得,b,的值为,100,。,一般使用强制类型转换可能会导致数值溢出或精度的下降,应尽量避免。,






