什么叫 local objects?

misslyy 2001-12-17 04:34:29
什么叫 local objects? <thinking in java 2nd ed>里说:
Java doesn’t allow you to create local objects—you must always use new.
...全文
88 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
enbug 2021-06-20
  • 打赏
  • 举报
回复

local object,可以理解成在栈内存中存放的对象。

栈,是方法被调用时,虚拟机给方法分配的内存空间。

方法执行完毕后,分配给方法的栈空间会被虚拟机回收。

java的栈中只能存放基本数据类型,或者对象的引用。不能存放对象本身。

new 创建的对象是存放在堆中的,对象何时被回收,不取决于方法何时执行完毕。

 

我感觉,local object,就是在方法中声明定义,然后在方法的栈内存中创建的对象,其所在方法执行完毕后,该object会被回收。

 

这句话跟其他语言对比就容易理解了。

比如说C++,

在C++中,

fun1(....){

    ClassA c = ClassA();

}

这样创建的是local objcet,即c这个对象都是放在函数的栈空间中的。函数执行完毕后,函数的栈内存被回收,c对象也会被销毁。

在C++中,

fun1(...){

    ClassA *c1 = new ClassA();

}

这样创建的是 非local object,c1这个指针指向这个objcet,这个object对象是存放在堆空间中的。函数执行完毕后,函数的栈内存被回收,但是c1指向的对象不会被销毁,被销毁的只是c1这个指针。

 

在java中,只能这样创建对象。

method(...){

    ClassA c2 = new ClassA();

}

这样,c2这个引用指向的对象,是放在堆内存中的。c2这个引用本身,是放在方法的栈内存中的。c2这个引用本身,在方法结束后,一定会被回收。但是c2指向的引用,在方法这个方法执行完毕后,可能会被回收,也可能不会,具体会不会,要依照jvm的垃圾回收机制。

 

 

个人理解,可能有误。

Luke_cn 2001-12-17
  • 打赏
  • 举报
回复
我想就是说在在方法中对象要实例的意思
misslyy 2001-12-17
  • 打赏
  • 举报
回复
那上面那句话是什么意思?java里不许在类中定义对象?好像不对啊
Luke_cn 2001-12-17
  • 打赏
  • 举报
回复
在类中定义的对象
misslyy 2001-12-17
  • 打赏
  • 举报
回复
怎没人知道啊

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧