第2章Java基本的程序设计结构标识符和关键字Java的基本数据类型运算符、表达式和语句语句输入输出数组2.1标识符和关键字在Java中的标识符和关键字统称为保留字。2.1.1标识符标识符是赋予常量、变量、方法、类或者接口的名称,可以由用户自行定义,无长度限制,但要符合以下规则:1、标识符可以由一个或多个字符组成2、标识符必须以字母、下划线_或$为开头,后面可以包含数字、字母但不包含空格。3、标识符中大小写字母有区别,但长度没有限制4、关键字不能做为标识符使用5、用以命名类、方法和变量、以及包遵守JAVA的命名规范,类名称的每个单词都以大写字母开头。方法和变量第一个字母不大写,其他照旧。2.1.2关键字Java中的关键字,它是Java特意保留的,具有特殊的意义和用途,不可以任意使用或更改,当我们在编写程序时要注意不要使用它作为变量或方法名称,以免造成程序编译的错误。Java的关键字有:Abstract、default、if、package、this、Boolean、do、implements、private、throw、Break、double、import、protected、throws、Byte、else、instanceof、public、transient、Case、false、interface、short、try、Catch、final、long、static、void、Char、finally、native、super、volatile、Class、float、new、switch、while、Continue、for、null、synchronized。goto和const在Java中虽然不再使用,但是还作为关键字存在。2.2Java的基本数据类型Java严格规定每个数据类型的大小,而且不允许任意更换变量的数据类型。也就是说如果A变量我们声明为整数类型后,就不能再将A变量改为其它类型,而且所占的空间就是32位,无法更改。表2-1Java的基本数据类型类型内容默认值内存空间取值范围booleantrue/falsefalse16位true或falsecharUnicode\u000016位\u0000~--\uFFFFbyte整数08位-128~+127short整数016位-32768~+32767int整数032位-2147483648~+2147483647long整数064位-9223372036854775808~+9223372036854775807float浮点0.032位±3.40282347E+38~±1.40239846E-45double浮点0.064位±1.79769313486231570E+308~±4.94065645841246544E-3242.2.1布尔型布尔型,也就是我们所说的真或假,使用关键字boolean来定义逻辑变量,值为常量:true、false。【例2-1】一个布尔型应用的示例。定义了一个布尔类型变量y,起初给它赋值false,然后又赋值为true,在if条件判断中,因为y是true,条件满足,执行语句所以执行System.out.println(yistrue);,最后是一个表达式109,结果为真,所以显示true。publicclassBoolTest{publicstaticvoidmain(Stringargs[]){booleany;y=false;System.out.println(yis+y);y=true;if(y){System.out.println(yistrue);}System.out.println(109?+(109));}}2.2.2字符型字符型在C语言中占8位,而Java中由于使用的是unicode,所以占16位。【例2-2】举个例子说明一下字符型数据的使用。publicclassCharDemo{publicstaticvoidmain(Stringargs[]){charch1,ch2;ch1=65;ch2='B';System.out.print(ch1andch2);System.out.println(ch1++ch2);}}大写的A在ASCII字符集中的值为65,因为ASCII中的字符集占了Unicode中的前127个字符,所以ASCII中的技巧这里面一样用。从上面可以看出,给字符型变量ch1赋值65和'A'作用是一样的。程序2-2运行结果如下所示。图2-2字符型数据应用示例运行结果2.2.3整数型Java定义了四种整数型,即字节型(byte),短整型(short),整型(int),长整型(long)。在Java语言中没有无符号这个关键字(unsigned),这个有区别于C语言,也就是说所有的数都为有符号数。2.2.4浮点型浮点型,也就是所说的实数,其中单精度数float占4个字节,双精度数占8个字节,当需要保持多次反复迭代的计算的精确性时或操作值很大时,是最好的选择了。【例2-4】下面例子是一个双精度数计算圆面积的例子。//计算圆的面积publicclassArea{publicstaticvoidmain(Stringargs[]){doublepi,r,a;r=0.3;//半径pi=3.1416;a=pi*r*r;//面积System.out.println(面积为:+a);}}2.2.5基本数据类型的转换在Java中类型由低到高的顺序为:byte、short、char、int、long、float、double。1、自动转换:当由低到高时可以自动转换,比如:byteb;inti=b;longl=b;floatf=b;doubled=b;那么这些都可以自动转换,是合法的,但byte、short、char是平级的不能自动转换,必须使用强制转换。2、强制转换:由高级到低级时,必须使用强制转换。inti=99;byteb=(byte)i;charc=(char)i;【例2-5】下面例子说明这两种转换。publicclassChangeTest{publicstaticvoidmain(Stringargs[]){byteb=15;inti=b;longl=b;floatf=b;doubled=b;System.out.println(b);System.out.println(i);System.out.println(l);System.out.println(f);System.out.println(d);ints=99;byten=(byte)s;System.out.println(s);System.out.println(n);}}注意:在强制转换时有时会导致溢出或降低精度,比如整型值赋给byte时,如果整型值大了,会自动取模再赋值,而浮点数赋值给整数时会去掉小数点。3、字符串型数据与其他数据类型转换:在Java中是通过toString()方法来实现的。【例2-6】字符串型数据与其他数据类型转换的例子。publicclassChangeTest1{publicstaticvoidmain(Stringargs[]){inti1=10;floatf1=3.14f;doubled1=3.1415926;//注意大小写IntegerI1=newInteger(i1);//生成integer类FloatF1=newFloat(f1);//生成float类DoubleD1=newDouble(d1);//生成double类//分别调用包装类的tostring()方法转换为字符串Stringsi1=I1.toString();//toString在此完成integer类型转换为字符串Stringsi2=F1.toString();Stringsi3=D1.toString();System.out.println(si1);System.out.println(si2);System.out.println(si3);}}4、将CHAR型值直接做为数值转换为其他数据类型【例2-7】CHAR型值直接做为数值转换为其他数据类型的例子。publicclassChangeTest2{publicstaticvoidmain(Stringargs[]){inti;charc1='A';i=c1;System.out.println(i);charc2=(char)(i+2);//此处要强制转换System.out.println(c2);}}2.3运算符、表达式Java提供了丰富的运算符,如算术运算符、关系运算符、逻辑运算符、位运算符等。2.3.1算术运算符与算术表达式在Java中提供运算功能的就是运算符(Operator),例如与算术相关的有加(+)、减(-)、乘(*)、除(/)这类的运算符。另外还有一个也很常用的取模运算符(%)。这类以数学运算为主的运算符称为算术运算符(ArithmeticOperator)。算术运算符的使用基本上与加减乘除一样,也是先乘除后加减,必要时加上括号表示运算的先后顺序。2.3.2比较和条件运算数学上有比较的运算,像大于、等于、小于等运算,Java中也提供了这些运算符,这些运算符称为“比较运算符”(ComparisonOperator)。它们有大于()、大于等于(=)、小于()、小于等于(=)、等于(==)和不等于(!=)。在Java中,比较条件成立时以true表示,比较条件不成立时以false表示。【例2-8】一个比较运算的示例。publicclassComparisonOperator{publicstaticvoidmain(String[]args){System.out.println(105结果+(105));System.out.println(10=5结果+(10=5));System.out.println(105结果+(105));System.out.println(10=5结果+(10=5));System.out.println(10==5结果+(10==5));System.out.println(10!=5结果+(10!=5));}}等于运算符==,它由两个连续的等号=所组成,而不是一个等号,一个等号是赋值运算,这一点必须特别注意。若有两个变量x与y要比较是否相等,应该是写成x==y,而不是写成x=y,后者的作用是将y的值指定给x,而不是比较x与y是否相等。对于对象来说,两个对象参考之间使用==作比较时,是比较其名称是否参考至同一对象,而不是比较其内容。“条件运算符”使用方式如下:条件式?成立返回值:失败返回值返回值依条件式的结果而定,如果条件式的结果为true,则返回冒号前的值;若为false,则返回冒号后的值。【例2-9】一个条件运算符的示例。importjava.util.Scanner;publicclassConditionalOperator{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print(请输入学生分数:);intscoreOfStudent=scanner.nextInt();System.out.println(该生是否及格?+(scoreOfStudent=60?'是':'否'));}}2.3.3逻辑和位运算Java中也提供这几个基本逻辑运算所需的逻辑运算符(LogicalOperator),分别为与(&&)、或(||)和取反(!)3个运算符。【例2-11】下面是逻辑和位运算的