【3】Java基本语法 Java同C一样,实际上同C++非常像,都有一种基本数据类型,另外JAVA对这些基本数据类型还提供了一种对象封装类型,这就是JDK5之后的BOXING概念,也就是装箱概念。实际上这也好理解,JAVA是纯面向对象的,因此,理论上它不应该再提供基本数据类型,它应该像RUBY一样,全是对象才符合它的概念。而设置了基本数据类型其实就破坏了纯对象的口号,我不知道这种考虑是否是基于性能设计的,毕竟对象都是建立在堆上,而基本数据类型都在栈上。
这里就其中几点进行强调一下:
1)整型不再像C/C++与机器和操作系统有关,它是基于JVM的。常量默认是int型,可以加L或l指明long型,其它如0开头表示八进制,0x表示十六进制。需要注意的是long是8字节,与C/C++中通常的4字节不同。
2)浮点型同整形一样,不再受机器限制。而且与C不同的,存储字节数,翻倍了,C都是32位和16位。JAVA是32位和64位。表示方式同C类似,十进制和科学计算法如,3.14 3.14e2,对小数据数据默认是double型。如float f =12.3f后面必须加f才能不出错。
3)字符型char,同C也不一样,默认采用unicode-16编码,因此是两个字节。支持中文单词。
4)布尔型Boolean,同C写法不一样是boolean而不是BOOL等。它是两个特殊值true和false,不是0和1.不能与0、1相等。
前面讲了基本数据类型,同C一样,JAVA也有变量与常量之分。当然在JAVA中不再有DEFINE这种概念,也没有对应有const关键字,不过有静态FINAL变量,充当常量。JAVA中变量声明方式比较灵活,命名是以字符、下划线及$开头,其后可以跟数字。但不可以数字开头,一般约定类名是大写开头,变量名是小写开头,后面函数名也是小写开头。这是一种缺省规范。同C有很大的不同。C经常命名以大写字开头去命名函数。同C一样,不能用关键字命名变量名。下图是JAVA的关键字。
操作符的概念同C基本相同唯一不同的就是+,除了用作算术运算符,还被重载成连接运算。另一个是+=也被重载。
1)逻辑运算符 && || !这三种都是自左向右计算。同C一样,如果在左边条件满足的情况下,右边是不在参与计算。因此不可将一些后面需要用的表达式计算放在右侧。
2)位操作符 ~ & ^这三个符号同C中一样,如下图所示:
3)移位操作符 前面我们学习JAVA的基本数据类型时可能会发现在JAVA中没有Unsigned概念,而进行移位时是一定要知道这个概念,因此移位中除了<< >>之外还有一种>>>。JAVA中移位不改变正负,还有很奇怪的就是移位一定是按32位进行的。因此对byte,short,char都要选转为int因此,这样写法是错的byte a =1;byte b = a<<2.左右类型不正确。
4)赋值操作符和扩展赋值操作符 = += �C= *= /= %=,这种赋值有一概念就是自动类型转换,比喻long l =100。右边100默认是int,自动转换为long,但int i = l需要强制转换。其它向char c =100都是自动转型。特殊一点是short s = 10; s=s+10是错误的,但s+=10则是正确的。这是因为后面是自动转型。
5)连接符 + 除用于加法之外不可以连接,如String s=”hello”+”world”。注意,这里需要注意String不是基本类型。
以上是一些比较重要的,与C/C++不同的运算符,运算符都有优先级,如下图所示,基于这些优先级的运算符加上运算因子组成表达式。
因此,对一个表达式来说,有两点比较重要,一个就是运算符的优先级,另一个就是运算因子的类型,不同类型的运算因此进行运算,会进行类型的自动转型,通常都是向高位转型。最后的结果也会是一个类型,如果进行赋值运算,赋值左右类型不同需要进行强制转型,不能自动转型。对三目运算符来说,表达式也要进行类型自动转型,比喻char x=’e’;int i=0; system.out.println(true?x:0)首先要对x:0进行类型自动转型成char型,输出结果是e,而system.out.println(false?i:x)则自动转型成int,输出101。