day02-局部变量-final修饰符-位移运算(<<、>>、>>>) - switch case 选择结构
1.局部变量只能初始化之后才可以使用;全局变量不初始化的情况,会默认进行初始化,int默认是0;
2. final修饰基本数据类型的变量时候,该变量的值不能发生改变(即不能重新赋值给该变量);
final修饰引用数据类型的变量时候,它存储的仅仅是一个引用的地址,final会保证该变量的地址不会发生改变,但是该变量的其他属性完全可以改变。
比如 下面的代码
final Student s = new Student();//final 修饰引用数据类型的变量p
s.setName = "张三";//p对象的其他属性完全可以发生改变
s=null;//编译报错,p对象不能重新赋值。
final 修饰其他时候 比如:
·fianl 修饰类的时候,表示该类不能被继承,它不可有有子类
·final 修饰方法时候,表示子类继承父类时候,被fina修饰的该方法不可以被重写,其他没有final修饰的方法仍可以被重写。
·final 修饰全局变量时候,该全局变量一定要初始化赋值,因为final修饰成员变量后,系统不会对其进行默认零值初始化,所以编译失败。
·final 修饰局部变量时候,该局部变量可以先不初始化,使用前再对其进行赋值。
3.位移运算:<< 、>>、 >>>
<< 、>> 考虑符号位移 :符号位不变,其他位数变化
正数(符号位0):缺少的高位补0;
负数(符号位1):缺少的高位补1;负数移位时先用补码(原码取反 +1)做位移运算,然后再将补码转为原码(原码=补码-1 再取反)
>>> 不考虑符号位移 :符号位一起移动 缺少的位数直接补0
问题:为什么说位移运算要比乘除效率高呢?
因为从CPU运算的角度来讲,乘法运算实际上CPU是执行多次的累加操作,除法运算是执行多次的减法操作;
而位移运算直接二进制移位就可以了,不需要那么多的操作,因此效率高。(不足望指正)
4.switch case 选择结构:
switch (要判断的东西){
case "匹配的结果1" :
要执行的语句;
(break);
case "匹配的结果2" :
要执行的语句;
default :
默认没有匹配结果后执行的语句;
}
注意:如果case里面不写break,那么程序会从匹配的case开始执行,一直执行到遇到break语句或者跳出语句,若每个case都写了break,那么匹配一个case后程序就跳出,不会继续匹配。如果所有的case都不匹配则进入default部分。
这样的情况我们也可以很好的利用,比如工资分档,6000-8000(包含6000不包含8000)分档,我梯度为1000时候,那么薪资/1000 就有6跟7是在同一个档次的,那么我们就可以使用case 6跟case 7 执行一个档次的代码块。如下例子
/**6000-8000为一个档次 梯度设置为1000**/
switch(salary/1000){
case 6:
case 7:
System.out.println("薪资还ok");
break;
case 8:
……
}