java基础知识(四)

1.      不可变类

不可变类是指一个对象一旦被创建出来,其整个生命周期中,它的成员变量就不能被修改。所有基本类型的包装类都是不可变类,例如Integer、Float、String类等。

  创建不可变类的基本原则:1)类中所有成员变量被private修饰;2)类中没有写或者修改成员变量的方法(如setxxx),只提供构造函数,一次生成永久不变;3)确保类中所有方法不会被子类覆盖,可以通过把类或其方法定义为final;4)如果一个类成员不是不可变量,那么子成员初始化或者使用get方法获取该成员变量时,需要通过clone方法来确保不可变性;等

2.      值传递与引用传递

方法调用是需要传递一些参数来完成特定的功能。

1  值传递:方法调用中,实参会把中传递给形参,形参只是用实参的值初始化一个临时的存储单元,形参与实参的存储单元不同,形参的改变不会影响实参的值。

2  引用传递:传递的是对象,形参和实参的对象指向的是同一存储单元,形参会影响实参。

publicclass Test {

    publicstaticvoidchangedStringBuffer(StringBuffer ss1,StringBuffer ss2){

        ss1.append(" world");

        ss2=ss1;

    }

    publicstaticvoid main(String[] args) {

        Integer a=1;

        Integer b=a;

        b++;

        System.out.println(a);

        System.out.println(b);

        StringBuffer s1=new StringBuffer("Hello");

        StringBuffer s2 = new StringBuffer("Hello");

        changedStringBuffer(s1, s2);

        System.out.println(s1);

        System.out.println(s2);

    }

}

程序的运行结果:1 2 Hello world  Hello

Integer同时按引用传递的,但是Integer是不可变类,没有提供改变值的方法。而是会创建一个新值为2的Integer复制给b,此时b与a已经没有关系。

   ss1指向字符串的由hello变为Hello world(修改的是这个地址所指向字符串的值) ,从而修改s1的值。但是执行ss2=ss1时,相当于修改了函数内部的局部变量ss2,(这个修改与ss1无关)只会修改ss2的值而对s2无作用。由此可知引用传递不会改变实参的地址。

                  

3.      不同数据类型的转换

转换规则:从低精度向高精度转换,优先级满足byte<short<char<int<long<float<double,

低级数据类型可以自动转换为高级数据类型。返回来使用强制类型转换。需要注意:

   将两个short或byte类型的数据相加得到的是int类型,需要是short时需要显式的把int转换。如:shorts1=1;s1=s1+1;编译错误,因为这时s1+1结果是int类型,所以不能赋值个short类型的s1.但是”+=”可以通过编译:short s1=1;s1+=1正确。

4.      运算符的优先级

例如: int i=15; i>>2的结果是3,移出的部分将被抛弃。
0000 1111(15)右移2位的结果是0000 0011(3),0001 1010(18)右移3位的结果是0000 0011(3)。

 

优先级

运算符

 

1

. () []

 

2

+(正) -(负)++  --  ~ !

 

3

*/  %

 

4

+(加) -(减)

 

5

<<  >> (有符号右移)  >>>(无符号右移)

 

6

<  <=  >  >=  instanceof

 

7

==  !=

 

8

&

 

9

|

 

10

^

 

11

&&

 

12

||

 

13

?:

 

14

=  +=  -=  *=   /=  %=  &=  =|=  ^=  ~=  <<=  >>=  >>>=

 

 

5.      Math类中round、ceil和floor方法的功能

Math类中的方法全是静态方法。

1  round方法表示四舍五入,原理是将原来的数字先加0.5,然后再向下取整,等同于(int)Math.floor(x+0.5f),它的返回类型是int

2  ceil方法是向上取整。即取大于a的最小整数,它的返回类型是double,若a是正数则把小数“入”,是负数,则把小数“舍”。

3  floor方法是向下取整。返回类型是double,取小于a的最大整数。若a是正数,则把小数“舍”,是负数则“入”。

6.      实现无符号右移操作

>>(有符号右移)和>>>(无符号右移)。在进行>>操作时,若参与运算的数字为正数,则在高位补0;若为负数,则在高位补1;在进行>>>操作时,无论参与运算的数字正负,高位都补0。

7.      char型变量中是否可存储一个中文汉字

java默认使用Unicode编码方式,即每个字符占用两个字节,英文占用一个字符,中文占用两个字符。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值