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 6case 7:
       System.out.println("薪资还ok");
        break;
   case 8:
     ……
}

 

posted on 2018-07-14 10:09  志爱007  阅读(256)  评论(0编辑  收藏  举报