-
不理解,哪位达人详细解释下,谢谢.30
整理出来的代码不理解,哪位达人详细解释下,谢谢.package com.test2; public class AAA { public interface Inte1 { public String getName(); } // class Student { public String name = "猪是我!"; } // ////// class Test12 { public Student zhang3 = new Student(); public Inte1 inte12 = null; public Inte1 ffname() { inte12 = new Inte1() { public String getName() { return zhang3.name; } }; return inte12; } public void setName() { zhang3.name = "我是猪!"; } } public static void main(String[] args) { Inte1 ente111 = null; if (true) { AAA aaa = new AAA(); Test12 etest = aaa.new Test12(); ente111 = etest.ffname(); etest.setName(); } /// // aaa///这里aaa,zhang3无法引用了, //这里怎么还能输出呢?变量是怎么存放的哦....? System.out.println(ente111.getName()); } }
2008年7月26日 12:49
7个答案 按时间排序 按投票排序
-
存在堆内存中的对象相当于一个电视机,aaa是存在栈内存中的相当于一个遥控器,aaa定义的代码块之外是无法引用,没法使用遥控器,但不代表电视机不在了。
通俗易懂,如何!2008年8月05日 16:30
-
Java把内存划分成两种:一种是栈内存,一种是堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。
当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
堆内存用来存放由new创建的对象和数组。
在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 (堆中的对象是要在没有栈中变量引用的时候才会回收)
在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。
引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。
所以你的aaa只是在一段代码块定义的一个变量,在代码块结束后就会释放所分配的栈空间,那么aaa变量就无效了。
但是你在上面代码块中创建的对象还在堆内存中,而且其中一个对象的引用赋给了变量ente111,那么ente111在其有效代码块内就可以调用所引用的对象方法和属性。
2008年7月29日 11:54
-
kamhung说的没错, java的变量作用域是以代码块为单位的。
Inte1 ente111 = null; 定义在main函数里 自然整个函数都能用。
AAA aaa = new AAA(); 定义在if语句里, 出了if就不能用了。
aaa 写在if外边就会报错,用IDE的情况。
都不用编译就会出错,是语法错误。2008年7月28日 17:24
-
ente111 = etest.ffname();
将inte12的引用传递给了ente111
建议:以后变量名,方法名取的有意思且能让人看得懂2008年7月27日 16:26
-
变量引用当然不存在了。
if(ture){} 是一个代码块 。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,所以 aaa 在 if 之外的地方是无法引用的。
aaa 不能引用, aaa 里面的对象当然也不能被引用, 所以 zhang3 也不能被引用。
也就是说出了 if(ture){} 之后, aaa 的引用就不存在了。 如果 在 if(true){}之后java紧接着执行了垃圾回收的话, aaa就会被回收。
2008年7月26日 18:29
相关推荐
C#基于Unity3D开发的捕鱼达人小游戏源码.zipC#基于Unity3D开发的捕鱼达人小游戏源码.zipC#基于Unity3D开发的捕鱼达人小游戏源码.zipC#基于Unity3D开发的捕鱼达人小游戏源码.zipC#基于Unity3D开发的捕鱼达人小游戏...
【Java+JSP捕鱼达人游戏项目】是一个基于Java编程语言和JSP技术的实战项目,旨在帮助学习者深入了解和掌握Java后端开发以及Web前端展示的综合应用。在这个项目中,开发者将运用Java的核心概念,如面向对象设计、类与...
1. 安全性:抓包可能会暴露个人隐私数据,因此在未授权的情况下不应抓取他人的网络通信,同时也要注意保护自己的个人信息不被泄露。 2. 分析数据:抓取的数据可能包含复杂的HTTP请求和响应,需要一定的网络基础知识...
结合具体的开发案例捕鱼达人,理解并初步掌握智能手机开发的主要环节和步骤以及智能手机游戏开发的知识。 一、课程设计目的与任务 * 通过实践使同学们经历智能手机软件开发的全过程 * 受到一次综合训练,以便能较...
SOA达人迷.zip.001
达人认证需求-20170401.xlsx
达人主动提交客户信息.rp
达人月报所需SQL.txt
本项目是参照iphone版的捕鱼达人制作,版本是cocos2d-x-2.1.4.拥有捕鱼达人的大部分功能,首次使用cocos2d-x,代码中难免有不足之处,大家仅作学习交流只用,压缩包里还有能直接在win7下运行的exe文件和源代码。
词达人校二等奖.pdf
android 手机游戏设计达人讲座(光盘).part2
词达人自动答题V37.exe
词达人全自动答题V39.exe
这份“抖音达人商品分享指导手册”深入剖析了如何有效地利用抖音平台进行商品推广,帮助达人和商家更好地理解这一模式,提升销售业绩。 首先,我们需要了解抖音达人是什么。抖音达人是平台上具有大量粉丝、影响力较...
在五年级的课程中,教师可以设计各种教学活动来让学生深入理解立己达人的仁爱精神。例如,可以通过讲述古代典故,如孔融让梨,让学生理解到在个人利益面前,懂得谦让是一种仁爱的表现。同时,可以让学生分享他们在...
抖音达人创意带货详细方案.pdf 在这个压缩包中,我们主要关注的是“抖音达人创意带货详细方案”,这是一个关于利用抖音平台进行商品推广和销售的深度研究报告。抖音,作为中国最大的短视频分享平台之一,拥有庞大的...
《2022达人营销发展洞察报告》是针对当前市场环境下,达人营销这一新兴且快速发展领域的深度分析。达人营销,也称为KOL(关键意见领袖)营销,是借助具有广泛影响力和专业技能的网络红人,通过他们的推荐和分享来...
fishjoy源码,翻译为“捕鱼达人”,此为完整的捕鱼达人 Android 版源码分享,这个好像是原版的代码,来自国外的android开发基地,注释也是英文的,这点有点遗憾啊,不过能写andorid的,英文应该都不错吧,发上来给感...
Fishname-捕鱼达人www.javaclimb.com.rar,亲测可以使用。
下面,我们将详细探讨面试过程中需要注意的关键点以及如何有效回答问题,旨在帮助你成长为一名真正的职场达人。 首先,了解并分析职位需求是至关重要的。在准备面试前,你应该仔细阅读招聘广告,理解岗位职责和要求...