资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二层,第三层,第四层,第五层,*,第,2,章,Java,基本语法,主要任务,让读者对数据类型、表达式等,Java,基本语法内容有一个了解,这些内容是任何一门程序设计语言都必须包含的部分,可为程序设计打基础。,本章主要内容,1.Java,语言的基本元素,2.,数据类型,3.,运算符与表达式,4.,数组,2.1 Java,语言的基本元素,通过下面的,Java,源程序,了解,Java,语言有哪些基本元素。,例,2.1,一个简单的,Java Application,源程序:,Welcome2.java,。程序的运行结果是输出一句话“欢迎使用,Java 2”,,如图所示。,/,这是一个简单的,Java Application,源程序,class Welcome2,public static void,main(String,args,),System.out.println,(“,欢迎使用,Java 2”);,/,结束,main,方法定义,/,结束类,Welcome2,定义,从以上例子学到什么?,(,1,),Welcome2,是一个,Application,应用程序,(,2,)源程序中有注释语句,(,3,)程序的主体声明了一个自定义类,(,4,),Welcome2,类包含,main,()方法,因此,可以知道,Java,语言包含标识符、关键字、运算符和分隔符等元素。这些元素有着不同的语法含义和组成规则,它们互相配合,共同组成,Java,的语句。,2.1.1,标识符,什么是标识符?,在,Java,中变量以及类和方法都需要一定的名称,这种名称就叫做标识符,标识符命名的基本规则:,所有的标识符都必须以一个字母、下划线或美元符号“,$”,开头,后面的字符可以包含字母、数字、下划线和美元符号。,标识符是由程序员自己定义的名称,可按上面的规则随意选取。不过,,Java,中有一个标识符命名约定:常量用大写字母,变量用小写字母开始,类以大写字母开始。如果一个变量名由多个单词构成,第一个单词后面的单词以大写字母开始,例如,anInt,。下划线虽然可以作为标识符的一员,但常用于常量名的单词分隔,因为常量名都是以大写字母单词命名的。,还要注意一点,,Java,严格区分字母大小写,标识符中的大小写字母被认为是不同的两个字符。例如以下是四个不同的合法标识符:,ad,,,Ad,,,aD,,,Da,。,2.1.3,分隔符,分隔符是用来区分源程序中的基本成份,可使编译器确认代码在何处分隔。,分隔符有三种,注释符,空白符,普通分隔符,1,注释符,注释是程序员为了提高程序的可读性和可理解性,在源程序的开始或中间对程序的功能、作者、使用方法等所写的注解。注释仅用于阅读源程序,系统编译程序时,忽略其中的所有注释。注释有两种类型:,/,注释一行,以“,/”,开始,最后以回车结束。一般作单行注释使用,也可放在某个语句的后面;,/*/,一行或多行注释,以“,/*”,开始,最后以“*,/”,结束,中间可写多行。,2,空白符,空白符包括空格、回车、换行和制表符(,Tab,键)等符号,用来作为程序中各种基本成份之间的分隔符。各基本成份之间可以有一个或多个空白符,其作用相同。和注释一样,系统编译程序时,只用空白符区分各种基本成份,然后忽略它。,3,普通分隔符,普通分隔符和空白符的作用相同,用来区分程序中的各种基本成份,但它在程序中有确定的含义,不能忽略。,Java,有以下普通分隔符:,.,句号,用于分隔包、类或分隔引用变量中的变量和方法;,;分号,是,Java,语句结束的标志;,,逗号,分隔方法的参数和变量说明等;,:冒号,说明语句标号;,大括号,用来定义复合语句、方法体、类体及数组的初始化;,方括号,原来定义数组类型,及引用数字的元素值;,()小括号,用于在方法定义和访问中将参数表括起来,或在表达式中定义运算的先后次序。,例,2.2,标识符、关键字和分隔符的使用。,public class Example,public static void,main(String,args,),int,i,c;,.,2.2,数据类型,Java,的数据类型可分为:,基本类型,包括整型、浮点型、布尔型和字符型;,数组类型,包括一维数组和多维数组;,复合类型,包括类、接口。,2.2.1,基本数据类型,数据类型,名称,位长,缺省值,取值范围,布尔型,boolean,1,false,true,false,字节型,byte,8,0,128,127,字符型,char,16,u0000,u0000,uffff,短整型,short,16,0,32768,32767,整型,int,32,0,2,147,483,648,2,147,483,647,长整型,long,64,0,9,223,372,036,854,775,808,9,223,372,036,854,775,807,浮点型,float,32,0.0,+,1.4E45,+,3.4028235E+38,双精度型,double,64,0.0,+,4.9E324,+,1.7976931348623157E+308,2.2.2,直接量与常量,直接量(,literal,)是指在程序中直接给出的一个符号串,作用是为变量赋值或参与表达式运算。,直接量可以是一个具体的数值或字符串,也称常量。但,Java,中的常量另有所指,是用,final,说明的一个标识符,在很多教科书中往往不加区分地统称为常量。,直接量或常量在程序执行过程中是不可更改的,它们与变量的区别是不占用内存。,1,布尔常量,布尔常量只有两个值,true,和,false,,代表了两种状态:真和假,书写时直接使用,true,和,false,这两个英文单词,不能加引号。,2,整型常量,整型常量是不含小数的整数值,书写时可采用十进制、十六进制和八进制形式。十进制常量以非,0,开头后根多个,0,9,之间的数字;八进制以,0,开头后根多个,0,7,之间的数字;十六进制则以,0X,开头后根多个,0,9,之间的数字或,a,f,之间的小写字母或,A,F,之间的大写字母。,3,浮点型常量,Java,的浮点型常量有两种表示形式:,十进制数形式,由数字和小数点组成,且必须有小数点,如,.123,,,0.123,,,123.0,;,科学计数法形式,如,123e3,或,123E-3,,其中,e,或,E,之前必须有数,且,e,或,E,后面的指数必须为整数。,4,字符常量,字符常量是由一对单引号括起来的单个字符。它可以是,Unicode,字符集中的任意一个字符,如:,a,,,Z,。对无法通过键盘输入的字符,可用转义符表示。,字符常量的另外一种表示就是直接写出字符编码,如字母,A,的八进制表示为,101,,十六进制表示为,u0041,。,5,字符串常量,字符串常量是用一对双引号括起来的字符序列。当字符串只包含一个字符时,不要把它和字符常量混淆,例如,A,是字符常量,而,A,是字符串常量。字符串常量中可包含转义字符,例如,Hello n world!,在中间加入了一个换行符,输出时,这两个单词将显示在两行上。,声明常量的格式:,final,类型 常量名,常量名,=,值,;,2.2.3,变量,变量在程序中为一个标识符,在内存中是一块空间,它提供了一个临时存放信息和数据的地方,具有记忆数据的功能。变量是可以改变的,它可以存放不同类型的数据,通常用小写字母或单词作为变量名。,变量具有三个元素:名字、类型和值。,1,变量的声明,在,Java,中存储一个数据,必须将它保存到一个变量中。变量在使用前必须有定义,即有确定的类型和名称。声明变量的格式为:,类型 变量名,变量名,=,初值,;,该语句告诉编译器以给定的数据类型和变量名建立的一个变量。,例,2.3,变量声明示例,public class V,public static void,main(String,args,),byte b=0 x55;,short s=0 x55ff;,int,i=1000000;,long l=0 xffffL;,char c=c;,float f=0.23F;,double d=0.7E-3;,boolean,B=true;,String S=This is a string;,System.out.println,(,字节型变量,b=+b);,System.out.println,(,短整型变量,s=+s);,System.out.println,(,整型变量,i=+i);,System.out.println,(,长整型变量,l=+l);,System.out.println,(,字符型变量,c=+c);,System.out.println,(,浮点型变量,f=+f);,System.out.println,(,双精度变量,d=+d);,System.out.println,(,布尔型变量,B=+B);,System.out.println,(,字符串类对象,S=+S);,2,变量的使用范围,当你声明了一个变量后,它将被引入到一个范围当中。也就是说,该变量只能在程序的特定范围内使用,出了这个范围,变量就消失了。,在类中声明的变量是称为成员变量,通常在类的开始处声明,可在整个类中使用。在方法和块中声明的变量叫局部变量,使用范围是从它声明的地方开始到它所在那个块的结束处,块是由两个大括号所定义的,看下面例子。,例,2.4,变量的使用范围。,public class V2,static,int,i=10;,public static void,main(String,args,),int,k=10;,System.out.println(i,=+i);,System.out.println(k,=+k);,System.out.println(k,=+k);,/,编译时将出错,已出,k,的使用范围,编译,V2.java,时出现错误,如图所示。因为变量,k,在方法块中声明,在方法块之外它是不存在的,所以编译时会出错。,3,变量类型的转换,当有一个整数而你需要把它变成一个字符型数据使用时该怎么办呢?需要将整数类型数据强制转换为字符型数据。,变量类型强制转换的格式为:,(数据类型)数据表达式,2.3,运算符与表达式,Java,的运算符代表着特定的运算指令,程序运行时将对运算符连接的操作数进行相应的运算。运算符和操作数的组合构成表达式,表达式代表着一个确定的数值。,按照运算符功能来分,运算符有七种:赋值运算符、算术运算符、关系运算符、条件运算符、逻辑运算符、位运算符和其它运算符。,按照连接操作数的多少来分,有一元运算符、二元运算符和三元运算符。,2.3.1,赋值运算符,表,2.6,给出了赋值运算符和功能说明(未列出包含位运算符的赋值运算符)。,(,见课本,31,页),由赋值运算符构成的表达式称为赋值表达式。赋值运算符的右边是一个表达式,这个表达式还可以包含一个表达式。例如:,a=b=c=0,,相当于三个表达式,c=0,,,b=c,,,a=b,。,2.3.2,算术运算符,表,2.7,给出了算术运算符和功能说明。(见课本,31,页),算术运算符按操作数的多少可分为一元运算符和二元运算符,一元运算符(,+,、,-,、,+,、,-,)一次对一个操作数进行运算,二元运算符一次对两个操作数进行运算。,求余运算在判断两个数是否成倍数时很有用,余数为,0,则两数成倍数,否则两数不成倍数。,一元运算,i+,和,i-,比传统写法的加减运算速度要快很多,常用作循环结构中的计数器。,2.3.3,关系运算符,有一些运算符能产生布尔类型的结果,称它们为关系运算符,表,2.8,列出了这些运算符。(见课本,32,页),关系运算符用于两个操作数之间关系的比较。关系表达式的运算结果为布尔值,不是,true,就是,false,,操作数可以是常量、变量和表达式。关系表达式常常用作分支结构或循环结构的控制条件。,2.3.4,条件运算符,条件运算符有一个“,?”,和一个“:”,条件运算符与上面的运算符略有不同,是三元运算符,有三个操作数。条件表达式的格式为:,条件表达式,?,结果,1:,结果,2;,条件运算符的计算过程为:首先计算作为条件的逻辑表达式或关系表达式,条件表达式返回值为,true,时整个表达式的值为结果,1,,返回值是,false,时整个表达式的值为结果,2,。,2.3.5,逻辑运算符,表,2.9,列出了逻辑运算符。(见课本,33,页),关系运算只能解决一些简单条件的判定问题,对较为复杂的条件可用逻辑运算来判定。逻辑表达式通常由多个关系表达式构成,最终运算结果为布尔值,true,或,false,。,例,2.5,下面的程序说明了关系运算符和逻辑运算符的使用方式。输出结果如图所示。,public class RAL,public static void,main(String,args,),int,a=25,b=3,e=3,f=0;,boolean,d=ab;,System.out.println(a,=25,b=3,e=3,f=0);,System.out.println(a,5),System.out.println(a/e,=+a/e);,if(f!=0&a/f5),System.out.println(a/f,=+a/f);,else,System.out.println(f,=+f);,2.3.6,位运算符,表,2.10,列出了位运算符。(见课本,34,页),位运算表示按每个二进制位(,bit,)进行计算。位运算的操作数仅限于整数(,char,、,short,、,int,、,long,),以二进制形式进行,运算结果为一个整数。位运算主要是为了满足编程中的特殊要求,如测试设备、与硬件通讯等高级编程内容。一般计算机中,8,个位为,1,个字节,数据保存在,1,个或多个字节中,所以位运算要求程序员必须熟悉数的二进制表示,并且知道位运算以后的结果是什么。,2.3.7,其它运算符,在,Java,中还有一些特殊的运算符,如表,2.11,。(见课本,36,页),2.3.8,运算优先级,知道了许多运算符,那么当表达式里有多种运算符号的时候,运算的次序如何区分呢?表,2.12,从高到低列出了运算符的优先级,同一行中的运算符优先级相同。(见课本,36,页),优先级是指同一式子中多个运算符被执行的次序。同一级别里的运算符具有相同的优先级,算术运算符具有左结合性,,2.4,数组,数组是有序数据的集合,数组中的每个元素具有相同的数组名,根据数组名和下标来唯一地确定数组中的元素。,数组有一维数组和多维数组,使用时要先声明后创建。,2.4.1,一维数组的声明,数组是,Java,语言中的特殊数据类型,它们保存着能通过下标索引来引用的一组同类数据。一维数组是指一个线性数据序列,声明格式为:,数据类型 数组名,;,或 数据类型,数组名,;,2.4.2,一维数组的创建与赋值,1,用运算符,new,分配内存再赋值,格式如下:,数组名,=new,数据类型,size,2,直接赋初值并定义数组的大小,第二种方法是直接赋初值并定义数组的大小。初值必须用大括号括起,用逗号作分隔符,初值的个数表示数组的大小。,例,2.6,一维数组的使用。该程序对数组中的每个元素赋值,结果如图所示。,public class A1,public static void,main(String,args,),int,a=new int5;,a0=1;,a1=2;,a2=3;,a3=4;,a4=5;,System.out.println(a+0+=+a0);,System.out.println(a+1+=+a1);,System.out.println(a+2+=+a2);,System.out.println(a+3+=+a3);,System.out.println(a+4+=+a4);,2.4.3,多维数组,Java,将多维数组看作数组的数组。例如二维数组就是一个特殊的一维数组,它的每个元素是一个一维数组。,二维数组的声明与一维数组基本相同,只是后面再加上一对“,”,。创建二维数组时,可指定各维的长度或至少指定第一维的长度,也可采用直接赋值的方法确定二维数组的长度。此时,按照给定的值序依次填满数组每一行中的元素。更高维的情况是类似的。下面以二维数组为例来进行说明。,习 题,1,Java,有哪些基本数据类型?,2,float,和,double,型数据在赋值时有哪些注意事项?,3,Java,的字符常量和字符串常量有何区别?,4,数据类型转换有何作用?,5,说明,System.out.println(“This,character“+A+”has the value,:“,+(,int)A,),的输出结果。,6,说明表达式,3*9*(3+(9*3/(-3),的计算次序。,7,计算表达式的值:,x+a%3*(int)(x+y)%2/4,,设,x=2.5,,,a=7,,,y=4.7,。,8,设,x,的值为,10,,写出表达式运算后,x,的值:,x+=x,x-=3,x*=1+2,x%=5,9,设,a=6,、,b=-4,,计算表达式的值:,-,a%+b,(-a)a,(a10?a:b),10,指出下面哪些是合法的标识符,说出为什么。,A.$persons,B.,TwoUsers,C.*point,D.this,E._,endline,11,指出下面哪些是将一个十六进制值赋值给一个,long,型变量,说出为什么。,A.long number=345L;,B.long number=0345;,C.long number=0345L;,D.long number=0 x345L.,12,下面哪些不是,java,的原始数据类型,说出为什么。,A.short,B.Boolean,C.unit,D.float,13,下面的哪些声明是合法的,说出为什么。,A.long l=4990;,B.,int,i=4L;,C.float f=1.1;,D.double d=34.4;,E.double t=0.9F.,
展开阅读全文