2.1 标识符与关键字
2.1.1标识符
定义:
用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符,简单地说,标识符就是一个名字 。
规则:
标识符由字母、下划线、美元符号和数字组成,长度不受限制。
标识符的第一个字符不能是数字字符。
标识符不能是关键字(关键字见下面的2.1.3节)。
标识符不能是true、false和null(尽管true、false和null不是关键字)。
练习:
判断下列符号是否是合法的标识符:
$var1、 _var2、aInt 、student_Number
2student、 try、var#
注意:
标识符中的字母是区分大小写的。
2.1.2关键字
定义:
关键字就是具有特定用途或被赋予特定意义的一些单词,不可以把关键字作为标识符来用 。
注意:
关键字都是小写的。遇到大写肯定不是关键字。
2.2数据类型与表达式
2.2.1 变量与常量
2.2.1.1 变量
定义
一个由标识符命名的项,其值可以被改变
每个变量都有类型,例如 int 类型或 Object类型
变量有作用域,根据变量的作用域,变量可以分为类成员变量和局部变量
变量定义格式:
Type varName1[=value1][,varName2=[value2]…];
例如,int num,total=0;
2.2.1.2 常量
定义
常量一旦被初始化以后就不可改变。
常量定义格式:
final Type varName1[=value1][,varName2=[value2]…];
例如,final int PRICE=30;
final double PI=3.14;
2.2.2 数据类型
2.2.2.1 基本数据类型
有8种基本数据类型:
boolean、byte、short、int、long、float、double、char。
8种基本数据类型习惯上可分为以下四大类型:
- 逻辑类型(布尔型):boolean
- 整数类型:byte、short、int、long
- 字符类型:char
- 浮点类型:float、double
(1)逻辑类型(布尔型)
布尔类型只有两个值true 和 false,它们不对应于任何整数值
(2)字符型(char)
用于存储单个字符,用单引号括起来
char采用16位Unicode编码,表示范围0 ~ 65535 。
常量:
‘A’,‘b’,‘?’,‘!’,‘9’,‘好’,‘\t’,‘き’,‘モ’
等,即用单引号扩起的Unicode表中的一个字符。
变量:
使用关键字char来声明char型变量,对于char型变量,内存分配给2个字节,占16位
例如:char ch=‘A’,home=‘家’,handsome=‘酷’;
转意字符常量:
有些字符(如回车符)不能通过键盘输入到字符串或程序中,就需要使用转意字符常量,
例如:\n(换行), \b(退格),\t(水平制表),\‘(单引号), \“(双引号),\\(反斜线)
等。
比较
Java语言中char采用16位Unicode标准字符集,最多可以识别65536个字符
C语言等的字符类型是采用ASCII编码,每个数据占用8比特的长度,总共可以表示256个不同的字符。
(3)整数类型
int 型
- 变量:使用关键字int来声明int型变量,声明时也可以赋给初值.
例如:int x= 12,平均=9898,jiafei;
- 常量:int型常量共有三种表示方法:
十进制:
123,6000
(十进制)
八进制:077
(八进制,是零开头)
十六进制:0x3ABC
(十六进制)
对于int型变量,内存分配给4个字节(byte),占32位.
byte 型
变量:使用关键字byte来声明byte 型变量.
例如:byte x= -12, tom=28, 漂亮=98;
常量:一定范围内的int型常量赋值给byte型变量.
对于byte型内存分配给1个字节,占8位 .
short 型
- 变量:使用关键字short来声明short型变量。
例如:short x=12,y=1234;
- 常量:和byte型类似,Java中也不存在short型常量的表示法,但可以把一定范围内的int型常量赋值给short型变量。
对于short型变量,内存分配给2个字节,占16位.
long 型
- 变量:使用关键字long来声明long型变量。
- 常量:long型常量用后缀L来表示,例如
108L(十进制)、07123L(八进制)、 0x3ABCL(十六进制) 。 例如: long width=12L,height=2005L,length;
对于long型变量,内存分配给8个字节,占64位。
(4)浮点类型
- 一个浮点数包括以下几个部分
-- 整数部分;小数点 ;小数部分;指数 (e or E)
-- 类型后缀 (f or F for float, d or D for double)
可以用小数点和科学计数法两种形式表示
float型
常量:453.54F(小数表示法),2e40f(2乘10的40次方,指数表示法).
变量:使用关键字float来声明float型变量,
例如:float x=22.76f,tom=1234.987f,weight=1e-12F;
对于float型变量,内存分配给4个字节,占32位。精度:float变量在存储时保留8位有效数字。
float 类型常量举例:
1f 2.f .3f 0f 3.1f 4f 1.893e+2f
double 型
常量:238.539d,231.987(小数表示法),1e-90(1乘10的-90次方,指数表示法).对于double常量,后缀有“d”或“D”,但允许省略后缀.
变量:使用关键字double来声明double型变量,
例如:double height=23.345,width=34.56D,length=1e12;
对于double型变量,内存分配给8个字节,占64位 。
-精度:double变量在存储double型数据时保留16位有效数字,实际精度取决于具体数值。double 类型文字量举例:
1e1 2. .3 0.0 3.1 4 1e-9d 1e137
特别注意
默认情况下,一个具有小数部分的数据的缺省类型是double而不是float。所以float常量后面必须要有后缀“f”或“F”。
Java的数据类型与C语言的异同
基本数据类型是相近的,其不同之处在于:
1)Java的各种数据类型占用固定的内存长度,与具体的软硬件平台环境无关;(跨平台特性)
C或C++语言:16位机中,short, int占用2字节,long占用4字节;32位机中,short占用2字节,int, long占用4字节
2)Java的每种数据类型都对应一个缺省的数值,使得这种数据类型的变量的取值总是确定的。
(安全稳定性)
C或C++:变量在未赋值前其值是不确定的。
2.3 表达式与运算符
表达式
表达式是由一系列常量、变量、运算符、方法调用构成的,用于计算、对变量赋值,以及作为程序控制的条件
运算符
(1) 算术运算符
+ , –, *, /, % (可用于浮点数)
+ , –, ++ , --
(2)赋值运算符
- 简单赋值运算符 =
- 复合赋值运算符
*= /= %= += -= <<= >>= >>>= &= ^= |=
E1 op= E2 等效于 E1 = (T)((E1) op (E2)), 其中T 是 E1的类型 - 举例
a=5 表达式的值为 5
a=b=c=d=3 表达式以及 a, b, c 的值都是3
a=3+(b=10) 表达式的值是13, a 是13, b是10
a=(b=14)/(c=7) 表达式的值是2, a是2, b是14, c是7
a=(b=4)+(c=6) 表达式的值是 10, a是10,b是4,c是6
a+=a-=aa 等效于 a=a+(a=a-aa)
(3)关系运算符
- 关系表达式的类型永远是布尔类型(boolean).
- 算术比较运算符 <, <=, >, >=
- 类型比较运算符 instanceof
- 例如:
e instanceof Point //Point 是一个类
相等关系运算符
数字相等运算符 = = , !=
布尔相等运算符 = = , !=
引用相等运算符 = = , !=
(4) 逻辑运算符
- “与”运算 &&
如果两个操作数的值都为true运算结果为true; 否则,结果为false. - “或”运算 ||
如果两个操作数的值都为false运算结果为false;否则,结果true - “非”运算符!
操作数的类型必须是布尔类型
如果操作数的结果为 false,则表达式的结果为 true ,如果操作数的结果为 true则表达式的结果为 false
(5)位运算符
- 按位取反():对数据的二进制位取反,即0变1,1变0。如,00101010=11010101
- 按位与(&):两个操作数相应位都为1,则该位结果为1,否则为0。如,00110111&01000110=0000110
- 按位或(|) :两个操作数相应位都为0,则该位结果为0,否则为1。如,00110111| 01000110=01110111
- 按位异或(^) :两个操作数相应位相同,则该位结果为0,否则为1。如,00110101&00111010=00001111
- 左移运算符(<<):将一个数的二进制位全部左移若干位,符号位保持不变,高位左移后舍弃,低位补0。在没有溢出的情况下,左移n位相当于乘以2n。
例如
a=00011100; a<<2=01110000
b=10011011; b<<2=11101100
- 右移运算符(>>):
将一个数的二进制位全部右移若干位,舍弃移出的低位,最高位则移入原来高位的值(空位补符号位)。右移n位相当于除以2n取商。
例如
a=00011100; a>>2=00000111
b=10011011; b>>2=11100110
- 无符号右移运算符(>>>):将一个数的二进制位无符号右移若干位。舍弃移出的低位,最高位补0。
说明:
无符号右移运算符>>> 只是对32位和64位的值有意义,在表达式中过小的值总是被自动扩大为int 型。这样,对第7位以0开始的byte 型的值进行无符号移动是不可能的,因为在实际移动运算时,是对扩大后的32位值进行操作。
例如
b=10011011; b将扩充至32位后(高24位为符号位1) 进行移位,b>>>2=0011 1111 … 1110 0110 (…处表示16个1)
(6)条件运算符 (表达式1?表达式2:表达式3)
- 三目运算符
首先计算表达式1,如果表达式1的值为 true,则选择表达式2的值;否则选择表达式3的值
如,int a=6, b=8, max=0; max=a>b?a:b;
2.4类型转换运算
- 每个表达式都有类型
- 如果表达式的类型与程序上下文不符
-有时可能会导致编译错误
-有时语言会进行隐含的类型转换。 -
类型转换分为扩展转换和窄化转换
Java中数据的基本类型(不包括逻辑类型)按精度从“低”到“高”排列:
byte short char int long float double
规则:
- 当把级别低的变量的值赋给级别高的变量时,系统自动完成数据类型的转换。
例如:float x=100;
- 当把级别高的变量的值赋给级别低的变量时,必须使用显示类型转换运算。显示转换的格式:(类型名)要转换的值;例如:
int x=(int)34.89;
- 当把一个int型常量赋值给一个byte和short型变量时,不可以超出这些变量的取值范围,否则必须进行类型转换运算;
例如:byte b=128;(error) byte b=(byte)128(ok)
下面四种情况下可能发生类型转换:
-
赋值转换
将表达式类型转换为被赋值的变量类型
如,double d=10*2+5;
-
方法调用转换
适用于方法或构造函数调用中的每一个参数
-
强制类型转换
将一个表达式类型强制转换为指定的类型
如, (double)6
-
字符串转换
- 任何类型(包括null类型)都可以转换为字符串类型
- 当一个操作数是String类型,即在“字符串+操作数”的情况下,操作数会被自动转换为字符串类型
2.5输入、输出数据
2.5.1 输出基本型数据
- java使用
System
类中的方法实现数据输出
例如:System.out.println()
或System.out.print()
输出串值,表达式的值。二者的区别是前者输出数据后换行,后者不换行。
如:
System.out.println(m+"个数的和为"+sum);
System.out.println(":"+123+"大于"+122);
如果需要输出的字符串的长度较长,可以将字符串分解成几部分,然后使用并置符号:“+”将它们首尾相接,
例如:
System.out.println("你好,"+
"很高兴认识你" );
- printf
JDK1.5新增了和C语言中printf函数类似的输出数据的方法,格式如下:
System.out.printf("格式控制部分",表达式1,表达式2,…表达式n)
格式控制部分由格式控制符号:%d、%c、%f、%s和普通的字符组成,普通字符原样输出。格式符号用来输出表达式的值。
%d输出int类型数据值;%c输出char型数据;%f输出浮点型数据,小数部分最多保留6位;%s输出字符串数据。
输出数据时也可以控制数据在命令行的位置,例如:%md输出的int型数据占m列;%m.nf输出的浮点型数据占m列,小数点保留n位。
例如:System.out.printf("%d,%f",12, 23.78);
2.5.2 输入基本型数据
可以使用Scanner类创建一个对象:
Scanner reader=new Scanner(System.in);
其中:reader对象调用下列方法,读取用户在命令行输入的各种基本类型数据:
nextBoolean()、 nextByte()、 nextShort()、 nextInt() 、 nextLong()、nextFloat()、nextDouble()。
上述方法执行时都会堵塞,程序等待用户在命令行输入数据回车确认。