当前位置:  技术问答>java相关

菜鸟问题:关于作用域的问题

    来源: 互联网  发布时间:2015-03-11

    本文导语:  Java对象不具备与主类型一样的存在时间。用new关键字创建一个Java对象的时候,它会超出作用域的范围之外。所以假若使用下面这段代码: { String s = new String("a string"); } /* 作用域的终点 */ 那么句柄s会在作用域...

Java对象不具备与主类型一样的存在时间。用new关键字创建一个Java对象的时候,它会超出作用域的范围之外。所以假若使用下面这段代码:

{
String s = new String("a string");
} /* 作用域的终点 */

那么句柄s会在作用域的终点处消失。然而,s指向的String对象依然占据着内存空间。在上面这段代码里,我们没有办法访问对象,因为指向它的唯一一个句柄已超出了作用域的边界。

“用new关键字创建一个Java对象的时候,它会超出作用域的范围之外”   “ 在上面这段代码里,我们没有办法访问对象,因为指向它的唯一一个句柄已超出了作用域的边界”我对这不太明白,请各位能否给解释一下?


|
我认为可能是下面的意思:

因为在JAVA中,String类型是按下面的规则存放的,假如有两个String,abcde和bdfgh,那么两个String中的bd是指向同一个内存地址的,当abcde被垃圾收集器收回的时候,bd的内存还没有释放。
而上面的s会消失是因为以后的代码中再也没有用到s,所以s会被垃圾收集器收回。

不知道各位有什么意见?

|
[“用new关键字创建一个Java对象的时候,它会超出作用域的范围之外”在上面这段代码里,我们没有办法访问对象,因为指向它的唯一一个句柄已超出了作用域的边界”]

 - s只在{}中可以引用,这是”变量的作用域“问题。

 - 但s所指向的”内存对象“何时”可以被GCed“,则比较复杂,这部分取决于{}在什么地方:
   * 如果{}在一个方法内,则s相当于local-field,在方法结束时,s就变成”可以被GCed“
   * 如果{}在init-block内,则s相当于class-field/instance-field,
     我猜测当{}结束时,s就变成”可以被GCed“,即上述代码相当于:
     {
         String s = new String("a string");
         s=null;
      }
 
 - 若是上述代码变成:
     {
         String s = "a string";
      }
   则问题要麻烦一些,这种”不用new定义的String",何时GCed,不太清楚,我猜测
   在当前JVM关闭之前,这样的String不会被GCed :-) 即:即使你写成:
     {
         String s = "a string";
         s=null;
      }
   "a string"所占用的内存也依然不会被GCed   

|
是这样的s出了作用范围,就可以被GC,如果没有其他的object指向"a string",那么"a string"也可以被GC,但什么时候被GC,是有不同的jvm实现的,我们不能知道,即使用System.gc()也不行.

注意new String("a string")和"a string"是不一样的
区别是new String("a string")和new String("a string")是两个东西
"a string" 和 "a sting"是同一个东西(东西指内存区)

|
我也觉得上面说的很好接受啊, 有什么不明?

    
 
 

您可能感兴趣的文章:

  • 菜鸟问一个关于j2ee的菜鸟问题
  • 菜鸟求问菜鸟问题 ,域名绑定
  • gcc问题---菜鸟发问之一,老大们帮忙啊!!菜鸟分不多,只好给这点了,对不起!!
  • 菜鸟又来问菜鸟问题了
  • 一个关于日期的问题!(菜鸟问题,请高手不吝赐教)
  • linux下游戏问题。(菜鸟问题)
  • 菜鸟问题:现在要做unix下的c/c+编程的几个问题?
  • 菜鸟问题,在jbuilder中的编程小问题
  • 超级菜鸟的~~不好意思问题~~REDHAT9的视频播放问题~!
  • 菜鸟问题 : 关于使用Flex的问题
  • [菜鸟问题]关于live555的问题
  • 小菜鸟问题请 遇到过相同问题的朋友们请介绍下经验,谢过先
  • (菜鸟飞飞)问个关于软中断和系统调用的问题
  • 菜鸟提问了,关于编译问题?
  • 菜鸟,java的运行问题
  • 菜鸟问题:如何在red hat 9下加入一个新的分区
  • 菜鸟问题:在Java中如何接收从键盘输入的字符串?
  • 菜鸟问题~~快点进来拿分
  • 菜鸟菜问题1
  • 菜鸟问题:如何在Solaris下配置显卡和显示器
  • 菜鸟的问题:请问WebLogin是什么,能起什么作用?
  • 菜鸟处女问!网卡配置文件各项的作用?
  • weblogic6.1环境中mydomain下的各文件作用及配置--(大虾、菜鸟都欢迎)
  • 菜鸟问题:谁能给我解释一下CLASSPATH的作用及设置.
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ----菜菜鸟第三问:-菜鸟菜问:JAVA如何求 根号、开次方? -----
  • 怎样从一个菜鸟级的java programer升级到一个菜鸟级的java developer
  • 一个连菜鸟都算不上的菜鸟
  • ===菜鸟系列===:写过毕业论文的前辈请进!!!菜鸟散分啦!!!!
  • 菜鸟提问,我怎么装redhat7。1 iis7站长之家
  • 菜鸟刚学jsp,还不知道怎么和sql server2000的数据库相连,我已经把odbc配好了,谁能给我一段和数据库相连的并显示所有数据的代码!菜鸟
  • 菜鸟提问,我怎么装redhat7。1
  • 菜鸟写的俄罗斯方块,请多多批评!
  • 小问题,你一定能够帮忙!——菜鸟请求帮忙!!
  • 一个菜鸟的请求: 哪位前辈能给晚辈讲讲“匿名类”
  • ※菜鸟送分之一※ Red Hat Linux 的最高版本是多少?
  • ★菜鸟问:怎么在RED HAT LINUX7.2中用169上网??
  • 菜鸟提问:包是什么概念?
  • 如何解压光盘上的gz文件到某个目录?(Linux 超级菜鸟问题之一)
  • 菜鸟的问题:求助,关于red hat linux 引导程序
  • 菜鸟问题,如何在Windows 设置CLASSPATH,我还没吃午饭
  • 菜鸟到此报到,各位前辈多多指教^_^
  • 初级菜鸟的简单问题,关于DeviceIoControl,各位高手指点一下吧!
  • 菜鸟问题!!!
  • 菜鸟提问:请问Unix下面有没有类似Win32下_T这样的宏?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3