浅谈Java中的引用和对象

浅谈Java中的引用和对象

——变量是内存中的一块区域

引用也是一种变量类型,引用类型和基本类型的区别是:
对于基本数据类型来说,变量中保存的值可以直接解释为这个变量的最终值;对于引用类型来说,有一个间接的过程,变量中保存的值,可以理解为一个去堆中找到对象的线索。

注意:
对象指的是一大块内存,而引用只是找到该对象的线索(引用是一块比较小的内存,一般是32bit/64bit)。

引用保存在Java内存区域中的哪块位置呢?
主要和四种“形态”有关系:

  • 局部变量、形参 存放在栈帧中 栈
  • 属性 存放在对象中——堆中(所有的对象都在堆中)
  • 静态属性 方法区

注意:

  • 保存在Java内存区域中的哪块位置,和数据类型无关,只和数据的形态有关系。
  • 类型不决定存放那块区域,只决定如何去解释这块内存中的值

引用类型:

  1. 类类型的引用:
    (能指向) 该类的对象、该类的子类对象、null
  2. 接口类型的引用
    (能指向) null、实现了该接口的类对象
  3. 数组类型的引用
    (能指向)null、元素相同的数组

解引用(dereference):用线索找对象,并且用使用对象
举个解引用的例子:
arr[3]: 根据arr这个引用,找到它指向的对象,然后把3号下标处的值取到。
String t=“hello”; t.length():根据t这个引用,找到它指向的对象,然后计算字符串长度。

注意:
NullPointerException(一般解引用时出现,解引用一般在使用 .[ ] 时出现),即在解引用过程中,要用到对象时,发现这个引用没有指向任何对象,此时就会抛出NullPointerException异常。

习题:
静态方法

class Test{
static void  method(){
}
public static void main(){
  ((Test)null).method();//正确
}
}

对于一个静态方法可以用对象引用或类引用。当用对象引用时,编译器会忽视该对象,找到该静态方法的类,所以对象是啥都无所谓。

注意:
静态方法可以使用类名去调用Test.method();也可以使用引用去调用Test t; t.method()等价于Test.method(); t是啥无所谓,只要t的类型是Test就可以。

发布了54 篇原创文章 · 获赞 6 · 访问量 4792

猜你喜欢

转载自blog.csdn.net/glpghz/article/details/104903287