1 变量
1.1 变量初始化
- 声明一个变量后,必须对变量进行显示初始化
int vactionDays;
System.out.println(vactionDays);//Error:(4, 28) java: 可能尚未初始化变量vactionDays
- 变量初始化原则
a. 先声明,后赋值
int vactionDays;
vactionDays = 1;
System.out.println(vactionDays);
b. 声明和赋值同时进行
int vactionDays = 1;
System.out.println(vactionDays);
c. 尽可能将变量声明在第一次使用变量的附近
1.2 常量
Java中用关键字final指示常量。
final double CM_PER_INCH = 2.54;
double paperWidth = 8.5;
double paperHight = 11;
System.out.println("Paper size in centimeters: "
+ paperWidth * CM_PER_INCH + " by " + paperHight * CM_PER_INCH);
关键字表示这个变量只能被赋值一次。一旦被赋值后就不能被更改了,习惯上,常量使用全大写。
与Scala比较,被val修饰的变量不能被再次更改了。
在Java中,经常希望某个常量可以在一个类中被多个方法使用,这样的常量被称为类常量,可以使用关键字static final设置一个类常量。
public class Demo01 {
public static final double CM_PER_INCH = 2.54;
public static void main(String[] args) {
final double CM_PER_INCH = 2.54;
double paperWidth = 8.5;
double paperHight = 11;
System.out.println("Paper size in centimeters: "
+ paperWidth * CM_PER_INCH + " by " + paperHight * CM_PER_INCH);
}
}
类常量被定义在main方法的外部,因此在该类中的其他方法都能使用该类常量,而且一个常量被public修饰,那么其他类也能使用该常量。
2 运算符
在Java中,使用算数运算符+,-,*,/表示加、减、乘、除运算。当两个操作数都是整数时,运算结果是整数,否则表示浮点出发。求余使用%符号。
整数被0除会产生异常,当浮点数被0除式,会得到无穷大或者NaN结果。
2.1 数学函数与常量
在Math类中,包含了许多数学函数。
计算一个数值的平方根用sqrt方法:
double x = 4;
double y = Math.sqrt(x);
System.out.println(y);
Java中没有幂运算,因此要借助pow方法,语句:
double x = 4;
double y = Math.pow(x,2);
System.out.println(y);
pow有两个double类型的参数,其返回值也是double类型的。
floorMod用于求余的,当除数和被除数都是正数时,和%操作符求余是一样的,但当被除数是负数时,为了得到正的模,该方法会调整被除数,通过被除数加除数,直至为正数时,在求模:
int y = Math.floorMod(-7,12);
System.out.println(y);//5
当为负数时,还是负数,在这里就不展开说明了。
Math类还提供了一些常用的三角函数:sin,cos,tan,atan,atan2
还有指数函数及其反函数:exp,log,log10
同时,还提供了用于表示Π和e常量的近似值:PI,E。
2.2数值类型之间的转换
2.3 强制类型转换
强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟带转换的变量名:
double x = 9.997;
int y = (int)x;//9 通过截断小数部分将浮点值转换为整型
int z = (int)Math.round(x);//舍入运算 10
2.4 结合赋值和运算符
可以在赋值中使用二元运算符:
x += 4;
等价于
x = x + 4
一般地,要把运算符放在=号的左边,如 *=或者 %=。
如果运算符得到一个值,其类型与左边操作数的类型不同,就会发生强制类型转换。如果x是一个int,则
x +=3.5;
是合法的,将把x设置为(int)(x+3.5).
2.5 自增与自减运算符
n ++:使变量n当前值加1
n --:使变量当前值减1
int m = 7;
int n = 7;
int a = 2 * ++m;//16
int b = 2 * n++;//14
用在表达式中时,前缀会先完成计算;而后缀会使用变量原来的值。
2.6 关系和boolean运算符
Java中包含丰富的关系运算符。
检测相等性:==
检测不相等:!=
还有:<,>,<=,>=运算符。
使用&&表示逻辑“与”,使用||表示逻辑“或”,!是逻辑“非”。&&和||是按照“短路”的方式设计的:如果第一个操作数能够确定表达式的值,第二个操作数就不必计算了。
例如,在下面的表达式中:x != 0 && 1 > x+y
如果x等于0,那么第二布冯就不会计算。因此,如果x为0,也就不会计算1/x,除以0的错误就不会出现。
类似地,如果第一个表达式为true,expression1 || expression2的值就会为true,而无需计算第二个表达式。
Java支持三元操作符?:,这个操作符有时候很有用。如果条件为true,下面的表达式
condition ? expression1 : expression2
就为第一个表达式的值,否则计算为第二各表达式的值。例如,
下x < y ? x : y
会返回x和y中较小的一个。
2.7 位运算
2.8 括号与运算的级别
如果不使用圆括号,就按照给出的运算符优先级次序进行计算。同一个级别的运算符按照从左至右的次序进行计算(除了表中给出的右结合运算符外。)例如,由于&&的优先级比||高,所以表达式
a && b || c
等价于
(a && b) || c
又因为+=是右结合运算符,所以表达式
a += b += c
等价于
a +=(b += c)
也就是将b+=c的结果(加上c之后的b)加到a上。
2.9 枚举类型
有时候变量的取值只在一个有限的集合中。例如:销售的服装或比萨饼只有小、中、大和超大这四种类型。当这样存在一定的隐患。在变量中很可能保存的是一个错误的值(如0或则m).
针对这种情况,可以自定义枚举类型。枚举类型包含有限个命名的值,例如,
enum Size {SMALL, MEDIUM, LAGRE, EXTAR_LARGE}