Java语言也和其他编程语言一样,使用标识符作为变量、对象的名字,也提供了系列的关键字用以实现特别的功能。
Java语言里的分号(;)、花括号({})、方括号([])、圆括号(())、空格、圆点(.)都具有特殊的分隔作用,因此被统称为分隔符。
标识符就是用于给程序中变量、类、方法命名的符号。
Java语言的标识符必须以字母、下画线()、美元符()开头,后面可以跟任意数目的字母、数字、下画线()和美元符()。此处的字母并不局限于26个英文字母,而且可以包含中文字符、日文字符等。
使用标识符时,需要注意如下规则:
Java一共包含51个关键字,如表所示。
enum是从Java 5新增的关键字,用于定义一个枚举。而goto和const这两个关键字也被称为保留字,Java还提供了三个特殊的直接量(literal):true、false和null;Java语言的标识符也不能使用这三个特殊的直接量。
Java语言支持的类型分为两类:基本类型(Primitive Type)和引用类型(Reference Type)。
基本类型包括boolean类型和数值类型。数值类型有整数类型和浮点类型。整数类型包括byte、short、int、long、char,浮点类型包括float和double。
提示:
char代表字符型,实际上字符型也是一种整数类型,相当于无符号整数类型。
引用类型包括类、接口和数组类型,还有一种特殊的null类型。
注意:
空引用(null)只能被转换成引用类型,不能转换成基本类型,因此不要把一个null值赋给基本数据类型的变量。
通常所说的整型,实际指的是如下4种类型。
byte:一个byte类型整数在内存里占8位,表数范围是-128(-27)~127(27-1)。
short:一个short类型整数在内存里占16位,表数范围是-32768(-215)~32767(215-1)。
int:一个int类型整数在内存里占32位,表数范围是-2147483648(-231)~2147483647(231-1)。
long:一个long类型整数在内存里占64位,表数范围是(-263)~(263-1)。
int是最常用的整数类型,因此在通常情况下,直接给出一个整数值默认就是int类型。除此之外,有如下两种情形必须指出。
➢ 如果直接将一个较小的整数值(在byte或short类型的表数范围内)赋给一个byte或short变量,系统会自动把这个整数值当成byte或者short类型来处理。
➢ 如果使用一个巨大的整数值(超出了int类型的表数范围)时,Java不会自动把这个整数值当成long类型来处理。如果希望系统把一个整数值当成long类型来处理,应在这个整数值后增加l或者L作为后缀。
字符型通常用于表示单个的字符,字符型值必须使用单引号(’)括起来。
字符型值有如下三种表示形式。
- 直接通过单个字符来指定字符型值,例如’A’、'9’和’0’等。
- 通过转义字符表示特殊字符型值,例如’\n’、’\t’等。
- 直接使用Unicode值来表示字符型值,格式是’\uXXXX’,其中XXXX代表一个十六进制的整数。
原码、反码、补码之间的类型转换。
注意:负数在计算机里是以补码形式存在的!
经常上网的读者可能会发现有些网页上会包含临时生成的验证字符串,那么这个随机字符串是如何生成的呢?可以先随机生成一个在指定范围内的int数字(如果希望生成小写字母,就在97~122之间),然后将其强制转换成char类型,再将多次生成的字符连缀起来即可。
public class RandomStr {
public static void main(String[] args) {
//随机生成6位小写字母验证码
//定义一个str
String str = "";
//进行六次循环
for (int i = 0; i < 6; i++) {
//生成一个97-122之间的int类型整数
int val = (int) (Math.random()*26+97);
//将val强制转换位char类型后连接到str后面
str = str + (char) val;
}
System.out.println(str);
}
}
String a = "45";
//使用Integer的方法将一个字符串转换成int类型
int iValue = Integer.parseInt(a);
Java为8种基本类型都提供了对应的包装类:boolean对应Boolean、byte对应Byte、short对应Short、int对应Integer、long对应Long、char对应Character、float对应Float、double对应Double,8个包装类都提供了一个parseXxx(String str)静态方法用于将字符串转换成基本类型。
Java语言使用运算符将一个或多个操作数连缀成执行性语句,用以实现特定功能。
Java语言中的运算符可分为如下几种。
➢ 算术运算符
➢ 赋值运算符
➢ 比较运算符
➢ 逻辑运算符
➢ 位运算符
➢ 类型相关运算符
Java支持的位运算符有如下7个。
一般来说,位运算符只能操作整数类型的变量或值。位运算符的运算法则如表3.3所示。
例:
System.out.println(5 & 9); //将输出1
System.out.println(5 | 9); //将输出13
System.out.println(~-5); //将输出4
System.out.println(5 ^ 9); //将输出12
System.out.println(5 << 2); //将输出20
System.out.println(-5 << 2); //将输出-20
在图3.15中,上面的32位数是-5的补码,左移两位后得到一个二进制补码,这个二进制补码的最高位是1,表明是一个负数,换算成十进制数就是-20。
Java的右移运算符有两个:>>和>>>,对于>>运算符而言,把第一个操作数的二进制码右移指定位数后,左边空出来的位以原来的符号位填充,即如果第一个操作数原来是正数,则左边补0;如果第一个操作数是负数,则左边补1。>>>是无符号右移运算符,它把第一个操作数的二进制码右移指定位数后,左边空出来的位总是以0填充。
System.out.println(-5 >> 2); //将输出-2
System.out.println(-5 >>> 2); //将输出1073741822
比较运算符用于判断两个变量或常量的大小,比较运算的结果是一个布尔值(true或false)。
==:等于,如果进行比较的两个操作数都是数值类型,即使它们的数据类型不相同,只要它们的值相等,也都将返回true。例如97=='a’返回true,5.0==5也返回true。
如果两个操作数都是引用类型,那么只有当两个引用变量的类型具有父子关系时才可以比较,而且这两个引用必须指向同一个对象才会返回true。Java也支持两个boolean类型的值进行比较,例如,true==false将返回false。
注意:
基本类型的变量、值不能和引用类型的变量、值使用==进行比较;boolean类型的变量、值不能与其他任意类型的变量、值使用==进行比较;如果两个引用类型之间没有父子继承关系,那么它们的变量也不能使用==进行比较。
逻辑运算符用于操作两个布尔型的变量或常量。逻辑运算符主要有如下6个。
&&:与,前后两个操作数必须都是true才返回true,否则返回false。
&:不短路与,作用与&&相同,但不会短路。
||:或,只要两个操作数中有一个是true,就可以返回true,否则返回false。
|:不短路或,作用与||相同,但不会短路。
!:非,只需要一个操作数,如果操作数为true,则返回false;如果操作数为false,则返回true。
^:异或,当两个操作数不同时才返回true,如果两个操作数相同则返回false。
对于|与||的区别,参见如下代码:
//定义变量a,b,并为两个变量赋值
int a = 5;
int b = 10;
// 对a > 4 和 b++ > 10 求或运算
if (a > 4 | b++ > 10) {
//输出a的值为5,b的值为11
System.out.println("a的值为:" + a + ",b的值为:" + b);
}
执行上面程序,看到输出a的值为5,b的值为11,这表明b++>10表达式得到了计算,但实际上没有计算的必要,因为a>4已经返回了true,则整个表达式一定返回true。
再看如下代码,只是将上面示例的不短路逻辑或改成了短路逻辑或。
//定义变量c,d,并为两个变量赋值
int c = 5;
int d = 10;
// 对c > 4 和 d++ > 10 求或运算
if (a > 4 || b++ > 10) {
//输出c的值为5,d的值为10
System.out.println("c的值为:" + c + ",d的值为:" + d);
}
三目运算符只有一个 a ? b : c,三目运算符的语法格式如下:
三目运算符的规则是:先对逻辑表达式expression求值,如果逻辑表达式返回true,则返回第二个操作数的值,如果逻辑表达式返回false,则返回第三个操作数的值。
所有的数学运算都认为是从左向右运算的,Java语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。
运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。表3.4列出了包括分隔符在内的所有运算符的优先级顺序,上一行中的运算符总是优先于下一行的。