



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 Java基本语法第2章 Java基本语法用户要想掌握并熟练应用Java语言,就需要对Java语言中的基础知识进行充分地了解。本章介绍Java语言的基本语法,包括数据类型、类型转换、拆箱、装箱、变量、常量、运算符和表达式以及注释等内容。Java语言与C#和C+等语言有着相似的地方,因此,学习过C#和C+语言的读者在学习本章时会感到很轻松。学习目标l 掌握数据类型的分类。l 掌握变量的声明和赋值。l 掌握标识符的命名规则。l 熟悉两种基本类型转换。l 掌握算术运算符和赋值运算符。l 熟悉关系运算符和逻辑运算符。l 了解位运算符和其他运算符。l 熟悉运算符的优先级。l 熟悉Java中的关键字
2、。l 掌握Java中的3种注释。l 能够熟练地使用Scanner类。2.1 数 据 类 型数据是程序的主要组成部分,它在定义时必须有变量名和数据类型,不同的数据类型执行不同的操作,数据的作用域表示数据在程序中可以使用的范围。本节将简单介绍Java中的数据类型。2.1.1 数据类型分类数据类型是指明变量或表达式的状态和行为。Java语言中有大量的数据类型,大体上可以分为基本数据类型(或内置数据类型)和引用数据类型两类。基本数据类型和引用数据类型又可以再细分,如图2-1所示。从图2-1中可以看出,基本数据类型包括数值型、字符型和布尔型。其中数值型又可分为整数类型和浮点型;引用数据类型包括类、接口和
3、数组。Java为每一个基本数据类型提供封装类,如表2-1所示。图2-1 数据类型分类表2-1 基本数据类型及对象封装类基本类型对象封装类charCharacterbyteBytebooleanBooleanshortShortintIntegerlongLongfloatFloatdoubleDouble2.1.2 整数类型整数类型用来存储整数数值,即没有小数部分的数值。Java定义了4种整数类型:byte(字节型)、short(短整型)、int(整型)和long(长整型)。所有这些类型都是有符号的、正的或负的整数。Java不支持无符号的、只是正值的整数。1byte类型byte是最小的整数类型
4、。对于该类型的变量,内存分配给它1个字节占8位。byte取值范围在-2727-1之间,即-128127。当操作来自网络或文件的数据流时,byte类型的变量特别有用;当操作与Java的其他内置类型不直接兼容原始的二进制数据时,byte类型的变量也很有用。【例2-1】下面代码分别声明3个byte类型的变量a、b和c:byte a;byte b;byte c;声明多个变量时,如果变量的类型相同,那么可以一次声明多个变量,变量之间通过“,”(逗号)进行分隔。如下代码等价于例2-1中的代码:byte a,b,c2short类型short是有符号的16位类型,它的范围在-215215-1之间。short限
5、制数据的存储顺序为先高字节,后低字节,这样在某些机器中程序就会出错,因此该类型很少使用。【例2-2】下面声明short类型的a变量和b变量,并为它们指定初始值,代码如下:short a=12,b=11;3int类型int是最常用的整数类型,它是有符号的32位类型。int类型的取值范围在-231231-1之间。如果要声明用户年龄、点击率和销售量时都可以使用int类型。除了常用的用途外,int类型变量通常用于控制循环和索引数组。当需要使用整数时,int通常是最好的选择。【例2-3】下面声明int类型的age变量,并为其指定初始值:int age = 12;4long类型long是有符号的64位类型
6、,其取值范围在-263263-1之间。对于那些int类型不足以容纳期望值的情况,long类型基本上都能解决,它的存储范围相当大,当需要很大的整数时,这使得它显得很有用。 注意:在为整数类型的变量赋值时,既可赋值为十进制的整数,也可赋值为八进制或十六进制的整数,但是需要注意变量能够接受的最大值与最小值,否则会出现错误。当给long类型变量赋值时,如果赋予的值大于int类型的最大值或小于int类型的最小值,则需要在数字后加L或l,以此表示该数据为长整型。2.1.3 浮点型浮点型也称为实型,是指带有小数部分的数据。当计算需要小数精度的表达式时可使用浮点型数据。Java中的浮点型包括float和dou
7、ble两种。其中float是指单精度浮点型;double是指双精度浮点型。在表2-2中对这两种类型的宽度和范围进行了说明。表2-2 浮点型的宽度和范围类 型宽度(位)大致范围double644.9E-3241.8E+308float321.4E-0453.4E+0381float类型float类型表示使用32位存储的单精度数值。在某些处理器上,单精度运算速度更快,并且占用的空间是双精度的一半,但是当数值非常大或非常小时存储精度会变得不精确。如果需要小数部分,并且精度要求不是很高时,float类型的变量是很有用的。例如,表示美元或者美分时可以使用float类型。对于float类型的值,需要在数字
8、后添加大写字母F或小写字母f。2double类型双精度使用double关键字表示,并使用64位存储数值。在针对高精度数学运算进行了优化的某些现代处理器上,实际上双精度数值的运算速度更快。所有常用数学函数(如sin()和sqrt()等)都返回双精度值。如果需要在很多次迭代运算中保持精度,或是操作非常大的数值时,double类型是最佳选择。2.1.4 字符型Java语言中的字符类型用来存储单个字符,它占用16位(两个字节)的内存空间,使用char关键字进行标识。因此,在定义字符类型的变量时,可以使用char关键字。char类型的范围在065 536之间,没有负的char值。为char类型
9、的变量赋值时,可以使用单引号或数字。char类型使用两个字节的Unicode编码表示,Unicode定义了一个完全国际化的字符集,能够表示全部人类语言中的所有字符。Unicode是数十种字符集的统一体,如拉丁字符集、希腊字符集、阿拉伯字符集、日文字符集以及韩文字符集等。为此,Unicode需要16位宽度。因此,在Java中的char是16位类型。 注意:在Java的正式规范中,char被当作整数类型,这意味着char和int、short、long以及byte位于同一分类中。但是,由于char类型的主要用途是表示Unicode字符,因此,通常考虑将char放到单独的分类中。2.1.5 布尔类型J
10、ava有一个称为boolean的基本类型,用于表示逻辑值。它只能是两个可能的值之一:true或false(默认值)。所有关系运算都返回这种类型的值。对于if和for这类控制语句的条件表达式,也需要boolean类型。Java中的true和false不能转换成任何数字表示形式,即true不等于1,false也不等于0。在Java中,只能将布尔类型的值赋给以布尔类型声明的变量,或者用于使用布尔运算符的表达式中。2.1.6 引用数据类型除了基本的数据类型外,Java语言还定义了许多引用数据类型。综合使用基本数据类型和引用数据类型,可以处理实际需求中遇到的各种数据形式,能够编写更加复杂的程序。下面介绍
11、3种最常用的引用数据类型:数组、类和接口。1数组数组是Java语言中的一种引用数据类型,是具有相同数据类型的数据集合。数组中的每个数据称为数组元素,数组元素是有序的(关于数组的知识会在第4章进行详细介绍)。2类类是面向对象程序设计语言中的一个概念,它实际上是对某种类型的对象定义变量和方法的原型。简单来说,类表示对现实生活中某一类具有共同特征的事物进行抽象,是面向对象编程的基础。对于Java而言,类是Java的核心和本质,是Java语言的基础(关于类的知识会在第7章进行详细介绍)。3接口Java中的接口是一系列方法的声明,是一些方法特征的集合。简单来说,接口表示一种约定,实现接口的类必须严格按照
12、其定义实现每个细节(关于接口的知识会在第9章进行详细介绍)。2.2 变 量Java中存在变量和常量,实际上,在数学中已经涉及了变量和常量。Java程序中的变量、常量,与数学中的变量、常量意义相同。例如,如果银行中活期存款的利率为3%,那么3%就是常量,而从银行中获得的利息会不断变化,此时利息就是变量。下面将介绍Java中的变量,包括变量的声明、赋值和作用域等。2.2.1 变量的声明在Java程序中,变量是基本存储单元。所有的变量在使用之前必须声明,它通过联合标识符、类型以及可选的初始化器来定义,其基本语法如下:type identifier = value , identifier = val
13、ue ;其中,type是Java的基本数据类型或者是类和接口的名称;identifier是变量的名称。可以通过指定一个等号和一个值为初始化变量。初始化表达式的结果类型必须与为变量指定的类型相同(或兼容)。为了声明指定类型的多个变量,需要使用以逗号分隔的列表。【例2-4】下面分别声明int、double和float类型的变量:int类型的变量名分别是age、score和maxvalue;double类型的变量名是price;float类型的变量名是num1和num2。其中,在声明age和score变量时需要指定初始值,示例代码如下:int age=12,score=100,maxvalue;do
14、uble price;float num1,num2;在为Java中的变量命名时,变量名称并不是任意的,它遵循标识符的命名规则。标识符是指可被用来为类、变量或方法等命名的字符序列。换句话说,标识符就是用用户自定义的名称来标识类、变量或方法等。标识符的命名规则如下。(1) 标识符必须由数字09、大写字母AZ、小写字母az、下划线_、美元符号$、人民币符号¥以及所有在十六进制0xc0前的ASCII码组成。(2) 标识符的名称必须以字母、下划线_、美元符号$或者人民币符号¥开头。(3) 不能把Java中的关键字、保留字等作为标识符。(4) 标识符的长度没有限制。(5) 标识符区分大小写。(6)
15、60; Java语言对字母的大小写有严格的要求,而且标识符的命名最好能反映它的作用。例如,score表示成绩;age表示年龄;grade表示年级等。变量命名除了遵循上述规则外,还需要遵循一个规则:如果变量名是单个单词,那么单词的全部字母要小写,如int score;如果变量名是由多个单词组成的复合单词,除第一个单词外,其后所有单词首字母都要大写,如int studentScore。【例2-5】下面代码列出了几种常见的合法和不合法的情况:int _age = 12;/合法变量int class = 12;/不合法变量,使用了关键字double ¥score_1 = 98.5;/合法变量
16、int studentAge = 10;/合法变量int #_age = 15;/不合法,以非法的#开头 提示:在Java语言中,虽然允许使用汉语中的文字和其他语言文字作为变量名,但是笔者建议读者最好不要使用这些文字作为变量名。2.2.2 变量的赋值声明变量之后,可以使用赋值运算符等号“=”为它赋值。赋值有两种方法:一种是在声明时为其赋值,如例2-4;另一种是先声明后赋值。【例2-6】下面首先声明int类型的age变量,声明时为其指定初始值8,然后声明double类型的price变量,声明后将其赋值为12.5。示例代码如下:int age = 8;/声明age变量并赋值double price
17、;/声明price变量price = 12.5;/为price变量赋值 注意:如果只声明变量而不赋值,系统将会使用默认值进行初始化。如byte、short、int、long类型的默认值为0;double和float类型的默认值为0.0;boolean类型的默认值为false;所有引用类型的默认值为null。2.2.3 变量的作用域变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域访问变量,则编译时会出现错误。变量的作用域决定了变量的生命周期,变量的生命周期是指从声明一个变量并分配内存空间开始,到释放该变量并清除所占用的内存空间结束。变量声明的位置决定了变量的作用域,根据作用域的不同,
18、可以将变量分为全局变量和局部变量。1全局变量全局变量即在程序范围之内都有效的变量。【例2-7】在下面的代码中,Test类中声明的a变量就是一个全局变量,它在整个类中都可以使用: public class Test int a = 10;public static void main(String args) Test v = new Test();v.print();void print() System.out.println("全局变量 a=" + a);2局部变量局部变量就是在程序中的一部分内(如main()方法)是有效的。在类的方法中声明的变量(包括方法的参数)属于
19、局部变量,它们只在当前的方法内有效,不能用于类的其他方法中。在方法的代码块(如if语句块)中声明的变量也是局部变量,它只在该代码块内有效。局部变量的生命周期取决于方法,当方法被调用时,Java虚拟机为方法中的局部变量分配内存空间;当方法的调用结束后,该方法中的局部变量占用的内存空间将会被释放,并被销毁掉。【例2-8】在Test类中声明maxvalue变量和print()方法,在print()方法中获取传入的参数,并将参数值保存到value变量中。通过if语句判断value变量与maxvalue变量值的大小,根据判断返回不同的结果。示例代码如下:public class Test double
20、maxvalue = 120;double print(double val) double value = val;if (value > maxvalue)return value;elsereturn maxvalue;在上述代码中,maxvalue是全局变量,它在该类的任何地方都可以使用。而print()方法的value则是一个局部变量,它只能在该方法中使用。如果在方法外部调用,那么在编译时就会出现错误。2.3 常 量如果需要存储在程序运行时可以修改的值,使用变量很有用。对于在程序运行过程中一直不变,即不需要修改的值,可以用一种特殊的变量常量。常量是一种标识符,它只在声明时进行定
21、义,一旦定义就不允许在程序运行时再改变其值。常量一般都以大写字母表示,并使用final关键字进行修饰。为了将常量和变量进行区分,一般会将常量名称的字母全部大写。如果常量名由多个单词组成,则由下划线“_”连接。【例2-9】在计算圆的周长和面积时经常会使用到 p,它的值是一个固定值。其声明代码如下:final double PI = 3.14;2.4 基本数据类型转换了解过数据类型、变量和常量之后,本节来简单地了解数据类型之间的转换。在Java中,除了boolean类型以外的7个基本类型,把某个类型的值直接赋给另外一种类型的变量,这种方式称为基本类型转换。一般情况下,基本数据类型转换可分为自动类型
22、转换和强制类型转换两种。2.4.1 自动类型转换自动类型转换必须在两种兼容的数据类型的数据之间进行,并且必须是由低精度类型向高精度类型转换。简单来说,自动类型转换就是将小范围的数据类型转换成大范围的数据类型。自动类型转换适合于整数类型、字符型和浮点型。在运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如表2-3所示。表2-3 自动类型转换的规则操作数1的类型操作数2的类型转换后的类型byte、short、charintintbyte、short、char、intlonglongbyte、short、char、int、longfloatfloatbyte、short、char、in
23、t、long、floatdoubledouble从表2-3中可以看出,byte、short、char的优先级最低,这三者之间不会互相转换,然后依次为int、long、float和double(最高)。【例2-10】下面代码演示了不同类型之间的自动类型转换:public class Test public static void main(String args) int i = 9;char c = 'a'float f = 3.14F;double d = 1.129;i = c;/字符型char转换成整型intd = f;/单精度浮点转换成双精度浮点f = i;/整型int
24、转换成floatSystem.out.println("i=" + i + ",d=" + d + ",f=" + f);执行上述代码,结果如下:i=97,d=3.140000104904175,f=97.0ss2.4.2 强制类型转换与自动类型转换正好相反,强制类型转换是将高精度类型向低精度类型进行转换。在进行强制类型转换时,需要注意的是如果将高精度数据向低精度数据进行类型转换时,可能会因为超出了低精度数据类型的取值范围,导致数据不完整,数据精度变低。实现数据的强制类型转换时,要在被转换的变量前面添加转换的数据类型。转换格式如下:目
25、标类型 变量 = (目标类型)表达式;【例2-11】在程序的main()方法中声明double类型的两个变量score1和score2,并为这两个变量赋值。然后将这两个变量强制转换为int类型,最后输出结果。示例代码如下:public class Test public static void main(String args) double score1 = 98.7;double score2 = 70.2;int result1 = (int) score1 + (int) score2;System.out.println(result1);在上述代码中,score1变量的值强制转换后
26、的结果为98,score2变量的值强制转换后的结果为70,强制转换后这两个变量的精度都变低了。2.5 运算符和表达式表达式是由变量、常量和方法等通过运算符连接起来而形成的一个有意义的算式。而运算符就是在用变量或常量进行运算时经常使用的符号。根据操作数的数目来分,运算符可以分为一元运算符、二元运算符和三元运算符。根据功能来分,运算符可以分为算术运算符、赋值运算符、比较运算符、逻辑运算符以及位运算符等。2.5.1 算术运算符Java中的算术运算符包括+(加号)、-(减号)、*(乘号)、/(除号)和%(求余)5种。这些运算符与大家平常接触的数学运算符具有相同的含义,这里不再详细解释说明。算术运算符支
27、持整型和浮点型数据的运算。当使用运算符把两个操作数结合到一起时,首先会将两个操作数转换成相同类型的数据。(1) 两个操作数中如果有一个是double类型,那么另一个操作数一定会先转换成double类型,然后再进行运算。(2) 两个操作数中如果有一个是float类型,那么另一个操作数一定会先转换成float类型,然后再进行运算。(3) 两个操作数中如果有一个是long类型,那么另一个操作数一定会先转换成long类型,然后再进行运算。(4) 其他任何两个基本类型的数据操作,两个操作数都会自动转换成int类型。【例2-12】分别声明double、int、float、byte和short类型的变量,然
28、后分别使用本节介绍的算术运算符进行计算。示例代码如下:public class bianliang public static void main(String args) double score = 90.5; /double类型的score变量int age = 100; /int类型的age变量float num = 12.5f; /float类型的num变量byte b = 10; /byte类型的b变量short c = 12; /short类型的c变量System.out.println(score + "+" + age + "=" +
29、(score + age);System.out.println(score + "-" + num + "=" + (score - num);System.out.println(age + "*" + b + "=" + (age * b);System.out.println(age + "/" + num + "=" + (score / age);System.out.println(b + "%" + c + "=" +
30、(b % c);在上述代码中,对score和age变量进行加法运算,由于score是double类型,因此会先将int类型的age变量转换为double类型,然后再进行计算。对score和num变量进行减法运算,由于num是float类型,因此会先将double类型的score变量转换为float类型,然后再进行计算。运行上述代码,结果如下:90.5+100=190.590.5-12.5=78.0100*10=1000100/12.5=0.90510%12=102.5.2 赋值运算符赋值就是将数值赋给变量,而这个赋值运算符就充当了这个赋值的任务,最简单的赋值运算符是等号“=”。除了这个赋值运算
31、符外,还包括其他的赋值运算符,如表2-4所示。表2-4 常用的赋值运算符运 算 符说 明例 子a的结果+=将该运算符左边的数值加上右边的数值,其结果赋值给左边变量本身int a=5;a+=27-=将该运算符左边的数值减去右边的数值,其结果赋值给左边变量本身int a=5;a-=23*=将该运算符左边的数值乘以右边的数值,其结果赋值给左边变量本身int a=5;a*=210/=将该运算符左边的数值整除右边的数值,其结果赋值给左边变量本身int a=5;a/=22%=将该运算符左边的数值除以右边的数值,其结果赋值给左边变量本身int a=5;a%=21在大型的程序中,灵活使用这些赋值运算符可以提高
32、程序的易读性和易懂性,并且使程序更加容易保护。 提示:赋值运算符包括一种特殊的复合赋值运算符,如>>=、>>>=、<<=、&=、|=以及=,这些复合赋值运算符并不常用,因此这里不再多做介绍。2.5.3 关系运算符通过关系运算符计算的结果是一个boolean类型值。当表达式有关系运算符时,计算机将会判断运算对象之间通过关系运算符指定的关系是否成立,如果成立,返回值为true,否则返回值为false。Java中的关系运算符包括6种,其说明如表2-5所示。表2-5 关系运算符运 算 符说 明例 子结 果>大于'a'>
33、9;b'false<小于100<20false>=大于等于100>=20true<=小于等于100<=100true!=不等于20!=20.00false=等于20=20.00true关系运算符不仅适用于数值类型,还适用于字符类型,以及其他非基本数据类型(如数组、字符串)。在表2-5中,等于和不等于运算符适用于引用类型和所有的基本数据类型,其他关系运算符只适用于除boolean类型以外的基本数据类型。【例2-13】定义int类型的变量a和b,分别对其进行赋值,并使用关系运算符>、=和!=比较这两个变量的关系。示例代码如下:public clas
34、s Test public static void main(String args) int a=10,b=21; System.out.println("说 a>b,对吗?"+(a>b); System.out.println("说 a=b,对吗?"+(a=b); System.out.println("说 a!=b,对吗?"+(a!=b);运行上述代码,结果如下:说 a>b,对吗?false说 a=b,对吗?false说 a!=b,对吗?true2.5.4 逻辑运算符逻辑运算符只能对布尔类型的数据进行操作,因此
35、,返回的结果也是布尔类型的值。Java语言中的逻辑运算符包括3种,如表2-6所示。表2-6 逻辑运算符运 算 符说 明&&逻辑与,二元运算符。前面两个条件都为真时,返回值为true,否则返回false|逻辑或,二元运算符。前面两个条件有一个为真时,返回值为true,否则返回false!逻辑非,一元运算符。表示否定,!true等于false;!false等于true 注意:当操作元都为布尔类型的数据时,位运算符包括的&和|也被视为逻辑运算符,它们的运算规则与&&和|是相同的,但是在计算运算符两边的表达式时存在着差别。使用不同的逻辑运算符,其运算规则也会有所
36、不同,如表2-7所示为逻辑运算的可能结果。表2-7 逻辑运算符进行逻辑运算的结果条件1的返回结果条件2的返回结果&&运算结果|运算结果!条件1的结果truetruetruetruefalsetruefalsefalsetruefalsefalsetruefalsetruetruefalsefalsefalsefalsetrue【例2-14】定义int类型的变量num1、num2和num3,分别对其进行赋值,并使用逻辑运算符&&、|和!进行运算。示例代码如下:public class bianliang public static void main(String
37、 args) int num1 = 10, num2 = 20, num3 = 30; System.out.println("num1<num2并且num1=num3,对吗?" + (num1 < num2) && (num1 = num3); System.out.println("num1<num2或者num=num3,对吗?" + (num1 < num2) | (num1 = num3); System.out.println("num1>num2或者num2>num3,对吗?&qu
38、ot; + (num1 > num2) | (num2 > num3); System.out.println("num2!=num3的否定结果是:" + !(num2 != num3); 在上述代码中,由于num1<num2的结果为true,num1=num3的结果为false,使用逻辑与“&&”运算符时的返回结果为false,该运算符要求两个返回结果都为true。而使用逻辑或“|”运算符时的返回结果为true,该运算符要求一个条件满足true即可。运行上述代码,结果如下:num1<num2并且num1=num3,对吗?falsen
39、um1<num2或者num=num3,对吗?truenum1>num2或者num2>num3,对吗?falsenum2!=num3的否定结果是:false2.5.5 位运算符在Java的位运算符中,除按位与和按位或运算符外,其他运算符只能用于整数之间的运算。位运算符是针对整数在内存中存储的二进制数据流中的位进行操作的。Java语言中的位运算符又分为按位运算符和移位运算符。1按位运算符按位运算符是对整数的二进制数据流中的每个位进行运算,该运算符包括4种运算,如表2-8所示。表2-8 按位运算符及其运算规则运 算 符说 明运算规则(0和1分别表示二进制位置)&按位与0&a
40、mp;00,1&11,0&10,1&00|按位或0|00,1|11,0|11,1|01按位异或000,110,011,101按位取反01,10从表2-8中可以看出,按位与运算的两个二进制位数都为1时,结果才为1,否则结果为0;按位或运算只要有一个二进制位数为1,则结果为1,否则为0;按位异或运算的两个二进制位数相同(同时为0或1)时,结果为0,否则为1;按位取反运算符为一元运算符,取反运算是将二进制中的0变为1,1变为0。【例2-15】分别使用&、|和运算6与9的结果,并输出最终的返回值。示例代码如下:public class Test public stati
41、c void main(String args) System.out.println("6&9的运算结果:"+(6&9);System.out.println("6|9的运算结果:"+(6|9);System.out.println("69的运算结果:"+(69);执行上述代码,输出结果如下:6&9的运算结果:06|9的运算结果:769的运算结果:15以6&9为例,6的二进制数是110,9的二进制数是1001,将6的二进制数前面补0变成0110,分别对它们的二进制位数进行&运算,运算结果为00
42、00,即0,0的十进制数仍然为0,因此输出0。以6|9为例,将6和9的二进制位数分别进行|运算,结果为1111,1111的十进制数为15,因此输出15。 提示:在Java中,可以将按位运算符与赋值运算符“=”组合为复合赋值运算符。例如,num&=6等价于num=num&6,其中num是一个变量。2移位运算符移位运算符也是对整数的二进制表示中的位进行操作。Java中的移位运算包括3种,分别为左移位运算、有符号整数的右移位运算和无符号整数的右移位运算。l 左移位运算:以m<<n为例,将整数m的二进制数向左移动整数n指定的位数,并用n个0补充二进制数据。其实,向左移n位,
43、就相当于乘以2的n次方。l 有符号右移位运算:以m>>n为例,将整数m的二进制数向右移动整数n指定的位数,并用n个符号位补充二进制数的开头(负数的符号位为1,正数为0)。其实右移n位,相当于除以2的n次方。l 无符号右移位运算:以m>>>n为例,将整数m的二进制数向右移动整数n指定的位数,并用n个符号位补充二进制数的开头(负数的符号位为1,正数为0)。2.5.6 其他运算符除了前面小节介绍的几种运算符外,Java还提供了其他的运算符,如:自增运算符、自减运算符以及三元运算符。从某种意义上来说,可以将自增运算符和自减运算符看作是算术运算符。1自增运算符自增运算符是自
44、动将变量值加1。它又分为两种:一种是前自加,先进行加1运算,再赋值,即+a;另一种是后自加,先赋值,然后再进行加1运算,即a+。运算符放在不同的位置,最终得到的结果也是不同的:前自加会将变量值加1,然后再使用该变量参与表达式的运算;后自加会将变量值参与表达式的运算,然后再将变量值加1。【例2-16】声明int类型的变量a和b,然后将变量a前自加后输出,将变量b后自加后输出,最终输出两个变量相加的结果。示例代码如下:public class Test public static void main(String args) int a = 10;int b = 10;System.out.pri
45、ntln("变量a的值前自加:"+(a+);System.out.println("变量b的值后自加:"+(+b);System.out.println("变量a和b的相加结果:"+(a+b);执行上述代码,输出结果如下:变量a的值前自加:10变量b的值后自加:11变量a和b的相加结果:22在该例子中,由于变量a进行前自加运算,因此先将原来的值输出,再加上1,变成11参与后面的运算。由于变量b进行后自加运算,因此会将原来的值加上1,再进行输出。此时变量b的值变成11后再参与后面的运算。2自减运算符自减运算符是自动将变量值减1。与自加运
46、算符一样,自减运算符也分为两种:一种是前自减,先进行减1运算,再赋值,即-a;另一种是后自减,先赋值,然后再进行减1运算,即a-。【例2-17】声明int类型的变量a和b,然后将变量a前自减后输出,将变量b后自减后输出,最终输出两个变量相加的结果。示例代码如下:public class Test public static void main(String args) int a = 20;int b = 15;System.out.println("变量a的值前自减:"+(a-);System.out.println("变量b的值后自减:"+(-b);
47、System.out.println("变量a和b的相加结果:"+(a+b);执行上述代码,输出结果如下:变量a的值前自减:20变量b的值后自减:14变量a和b的相加结果:33 注意:自增和自减运算符只能操作变量,不能操作常量或表达式,且该变量类型必须是整型、浮点型或Java包装类型,如(num+2)+是不正确的。3三元运算符Java中使用?:表示三元运算符。基本形式如下:布尔表达式 ? 表达式1 : 表达式2;在上述语法中,如果?左边的布尔表达式的值为true,则整个表达式的值为“表达式1”的值;否则为“表达式2”的值。使用三元运算符,“表达式1”和表达式并不会都被执行。
48、【例2-18】声明int类型的score变量,判断变量的值是否小于60。如果小于60则返回结果是“不及格,仍然需要努力”;否则返回结果是“已经及格了,继续保持”,并将返回结果保存到result变量中,最后输出result变量的值。示例代码如下:public class Test public static void main(String args) int score = 56;String result = score<60?"不及格,仍然需要努力":"已经及格了,继续保持"System.out.println(result);三元运算符可以使
49、用if-else语句来代替。以下代码等价于上述代码:int score = 56;if(score<60) System.out.println("不及格,仍然需要努力");else System.out.println("已经及格了,继续保持");2.5.7 运算符的优先级一个表达式中可以存在多个运算符,当需要进行混合运算时,系统会根据运算符的优先级来决定执行顺序。优先级不同会导致最后得出的结果差别很大,如表2-9列出了运算符的优先级别。表2-9 运算符的优先级别优 先 级说 明运 算 符最高括号()自上向下优先级别降低后置运算符正负号+、-一元
50、运算符+、-、!乘除*、/、%加减+、-移位运算>>、>>>、<<比较大小>、>=、<、<=比较是否相等=、!=按位与运算&按位异或运算续表优 先 级说 明运 算 符自上向下优先级别降低按位或运算|逻辑与运算&&逻辑或运算|三元运算符?:最低赋值及复合赋值运算=、+=、-=、*=、/=、%=、>>=、>>>=、<<=、&=、=、|=在表2-9所列运算符的优先级中,运算符的优先级自上而下逐渐降低。其中,优先级最高的是之前未提到的括号,它的使用与数学运算中的括
51、号一样,用来指定括号内的表达式要优先处理,括号内的多个运算符仍然要依照表2-9的优先级顺序进行运算。对于处在同一层级的运算符,则按照它们的结合性,即“先左后右”或是“先右后左”的顺序来执行。Java中除赋值运算符的结合性为“先右后左”外,其他运算符的结合性都是“先左后右”。2.6 关键字列表在2.2.1节介绍标识符的命名规则中提到过,标识符的名称不能是Java的关键字。简单来说,关键字是Java语言中已经被赋予特定意义的一些单词,不可以再把这些单词定义为标识符来使用。例如,在前面介绍的int、double、float和char等类型都是Java关键字。完整的关键字如表2-10所示。表2-10
52、Java关键字列表intpublicthisfinallybooleanabstractcontinuefloatlongshortthrowthrowsreturnbreakforstaticnewinterfaceifgotodefaultbytedocasestrictfppackagesupervoidtryswitchelsecatchimplementsprivatefinallclassextendsvolatilewhilesynchronizedinstanceofcharprotectedimporttransientenumdefaultdoubleassertconst
53、nativevolatile2.7 Java编码规范编码规则可以培养程序员在编程时注意一些细节问题的良好习惯,提高程序的可读性,让程序员能够尽快地理解新的代码,并帮助大家编写出规范的、利于维护的Java代码。2.7.1 代码编写规则规整的代码格式能够为程序的开发和后期代码的维护带来方便。因此,在学习开发的过程中,要形成规范代码编写格式的良好习惯,编写代码时应该注意以下几点。l 在声明变量时,尽量使每个变量的声明单独占一行,即使是声明相同类型的变量,这样做也有助于加入注释。局部变量应在声明的同时进行初始化,在类型和标识符号之间可以使用空格或制表符。声明两个变量,每个变量独占一行,并使用制表符使变
54、量名对齐。示例代码如下:intage = 12;doubleprice = 12;l 语句应以英文状态下的分号“;”结束,且应使每条语句单独占一行。在写返回语句时,书写形式为return value,如果以表达式形式存在,则应该使用小括号。示例代码如下:return false;return (10>20)?"10大于20":"10小于20");l 尽量不要使用技巧性很高,难懂又容易混淆判断的语句,否则会给后期程序的维护带来困难,因为很难保证程序的开发与维护是同一个人。l 代码进行缩进时应使用制表符来代替空格。l 编写代码时,要适当地使用空行分隔代
55、码,并且应在难以理解或关键的部分加入注释,这有助于阅读者很快地了解代码的结构。2.7.2 常用代码注释在Java的编写过程中需要对一些程序进行注释,除了自己方便阅读外,也让别人更好地理解自己的程序。注释可以是编程思路或者是程序的作用,总而言之就是方便自己与他人更好地阅读。在Java源文件的任意位置都可以加入注释,Java编译器会忽略程序中的注释语句。因此,在注释语句中编写的任何东西,对编译出来的程序不会有任何影响。Java语言提供了3种形式的注释,即单行注释、多行注释和文档注释。1单行注释单行注释用于注释一行,使用/符号开始,一直到换行为止的所有内容均作为注释而被编译器忽略。语法如下:/注释内容【例2-19】定义double类型的3个变量,并对这3个变量进行注释。示例代码如下:double originalPrice = 234.5; /商品原价double discou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 27476.7-2022检测实验室安全第7部分:工效学因素
- DZ 0041-1992地质仪器产品质量检验规则
- CJ/T 330-2010电子标签通用技术要求
- CJ/T 267-2007混合动力电动城市客车
- CJ/T 156-2001沟槽式管接头
- CJ/T 120-2016给水涂塑复合钢管
- 初级社会工作者考试的逐步解析试题及答案
- 新版中级社会工作者考试碰撞试题及答案
- 系统分析师考试学习小组试题及答案
- 合理膳食试题及答案
- 五下语文第五单元测试卷及答案
- 5.1基因突变和基因重组课件-高一下学期生物人教版必修2
- 2025年计算机Photoshop图像编辑试题及答案
- 2025年教师职业道德与法规考试试题及答案
- DB65∕T 3420-2012 玛纳斯碧玉(标准规范)
- 企业战略规划与盈利模式创新研究
- 浙江省温州市环大罗山联盟2024-2025学年高一下学期期中考试 英语 PDF版含答案
- 北森领导测评试题及答案
- 2025年绵阳富乐中学小升初数学、语文入学考试题
- 知识图谱与大语言模型在教育领域的应用综述
- 考研项目合同协议模板
评论
0/150
提交评论