表达式与语句
变量
变量及其作用域
局部变量:在一对{}表示的代码块中定义的变量(也叫自动变量、临时变量)。其作用域是所在的方法或代码块,当程序执行流进入该部分时创建,退出时消亡。
类成员变量:在方法外声明且属于一个类的变量。作用域是整个类。类成员变量有两种,一种是用static关键字声明的,此时只要所属的类存在它就一直存在;还有一种是没有static关键字的,这种变量叫做实例变量,它在调用方法new XXX()
创建实例时创建,只要有引用指向变量所属对象它就一直存在。
方法参数:方法调用时传递的参数。作用域是所在的方法。
异常处理器参数:catch语句块的入口参数,作用域是catch后面一对{}表示的代码块。
变量的初始化
变量类型 | 初始值 |
---|---|
byte(位) | 0 |
short(短整数) | 0 |
int(整数) | 0 |
long(长整数) | 0L |
float(单精度) | 0.0F |
double(双精度) | 0.0D |
char(字符) | ‘\u0000’ |
boolean | flase |
所有引用型 | null |
类成员变量是系统自动初始化,而局部变量需要手工赋初值进行初始化,否则就会出现编译错误。
局部变量的初始化:
public class TestInit{
int x; //类成员变量
public static void main(String[] args) {
TestInit init = new TestInit(); //引用变量实例化
int x = (int)(Math.random() * 100); //局部变量
int z;
int y = 0; //y在此处如果不手工赋值后面使用到时将会有编译错误
if(x > 50){
y = 9;
}
z = x + y + init.x;
System.out.println("x=" + x + " y=" + y + " z=" + z);
}
}
/*
结果:
x=19 y=0 z=19
*/
运算符和表达式
算数运算符和算术表达式
±× / % 分别对应 加 减 乘 除 取模。还有++ --对应自加和自减。
不同类型的数据混合运算时的转换优先级从低到高依次是:byte、short、char、int、long、float、double。
Java的算数运算和C有几点不同:
1. 取模运算符的操作数可以是浮点数;
2. +可以用来连接字符串;
3. 即便两个操作数全是byte或short,结果依然会是int;
4. Java里没有幂运算符,所以需要进行幂运算的时候要调用Java.lang.Math类的pow()方法(Math.pow(a,ba)),其定义是:`public static double pow(double a,double b)`。返回a的b次方。
关系运算符和关系表达式
> < >= <= == != 对应的含义与C一样。
与C不同的是,Java中任何类型的数据(包括基本数据类型和复合类型)都可以用==或!=来比较是否相等。
逻辑运算符和逻辑表达式
& | !分别对应不短路的与、或和非。
&& 称为短路与,先求左边的值,只有当左边的值为true时才继续求右边的值。
|| 称为短路或,先求左边的值,只有当左边的值为false时才继续求右边的值。
^ 异或运算,当左右两边真假相同时为true,否则为false。
位运算符
位逻辑运算符:& | ^ ~ 分别对应 按位与 按位或 按位异或 按位取反。
移位运算符:Java使用补码来表示二进制数。补码中最高位为符号位,正数为0,负数为1。对正数来说,最高位为0,其余位代表数值本身;对负数来说,其补码该数绝对值的补码按位取反再加1;0的补码唯一,是00000000。
a>>b 把a向右移动b位,最高位填充以原来的最高位。(不是原来的最低位,这种叫带符号的移动)
a<<b 把a向左移动b位,最高位填充以原来的最高位。
a>>>b 把a向左移动b位,最高位用0填充。(无符号移动)
赋值运算符和赋值表达式
a+=b 等价于 a=a+b
其余的都是这个原理,可以此类推。
其他运算符
a?b:c a为true时返回b,否则返回c。
[ ] 声明数组,括号里可加元素数。
. 引用对象的成员。
( ) 方法调用
(type) 强制类型转换
new 创建对象或数组。(实例化时使用)
a instanceof b 如果a是b的实例,返回true,否则返回false。
优先级
优先级 | 运算符 | 简介 | 结合性 |
---|---|---|---|
1 | [ ] 、. 、( ) | 方法调用,属性获取 | 从左向右 |
2 | !、~、 ++、 – | 一元运算符 | 从右向左 |
3 | * 、/ 、% | 乘、除、取模(余数) | 从左向右 |
4 | + 、 - | 加减法 | 从左向右 |
5 | <<、 >>、 >>> | 左位移、右位移、无符号右移 | 从左向右 |
6 | < 、<= 、>、 >=、 instanceof | 小于、小于等于、大于、大于等于, 对象类型判断是否属于同类型 | 从左向右 |
7 | == 、!= | 2个值是否相等,2个值是否不等于。 下面有详细的解释 | 从左向右 |
8 | & | 按位与 | 从左向右 |
9 | ^ | 按位异或 | 从左向右 |
10 | | | 按位或 | 从左向右 |
11 | && | 短路与 | 从左向右 |
12 | || | 短路或 | 从左向右 |
13 | ?: | 条件运算符 | 从右向左 |
14 | =、 += 、-= 、*= 、/=、 %=、 &=、 |=、 ^=、 <、<= 、>、>= 、>>= | 混合赋值运算符 | 从右向左 |
强制类型转换
用(type)expression
的形式进行强制类型的转换。基本类型和数组或对象等引用型变量之间不能互相转换。
语句
- 表达式语句:如赋值语句、增量语句、方法调用语句和对象创建语句。
- 声明语句:声明变量或方法,如
int a = 0
。 - 程序控制流语句:由{}括起来的语句,可以出现在任何单个语句可以出现的位置,如for循环和if循环语句。