一个惆怅的问题 有一个类叫BOX里面有变量i.然后我用BOX mybox=new BOX();有的书上说mybox是对象,但是有的书上说mybox只是一个变量,用来储存对象的地址的,真正的对象是BOX里面的变量,这些说话哪个是对的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BOX mybox=new BOX();mybox是个引用类型的变量,你可以认为它的内容是一个地址(这个和具体的jvm实现机制有关系),该地址表示对象在堆中的具体位置 。 mybox这个值在栈中,new 的BOX这个对象的信息在堆中,mybox的值是BOX对象的地址。 这个未必,比如class Test{ BOX mybox=new BOX();} 这些话基本正确,mybox是对象的引用这个对象在堆里边 mybox 本来就是个实例变量 也叫对象变量 就是个对象啊 当JAVA程序运行时,系统会为JAVA程序分配一块单独的内存空间供JAVA虚拟机使用。JAVA虚拟机又把这块内存空间分为主要的三大区域,分别是:栈区、堆区及方法区。栈区:用来存放局部变量(即方法中定义的变量)。椎区:用来存放实例变量(即没有用static修辞的成员变量)。方法区:用来存放静态变量及成员方法(包括实例方法和静态方法)。下面,我以你的Box类举个例子,为你说明下JAVA各个变量及方法在内存中的存储情况及对象的创建。 public class MyJava{ public static void main(){ Box mybox=new Box(); } } class Box{ int a=10; static int b=20; void make1(){}; static void make2(){}; }在以上这段代码中,变量有mybox、a、b。方法有main()、make1()、make2()。mybox:是局部变量,在JAVA栈区中。a:是实例变量,在JAVA堆区中。b:是静态变量,在JAVA方法区中。main():main方法的字节码在方法区中。make1():make1方法的字节码在方法区中。make2():make2方法的字节码在方法区中。当JAVA虚拟机执行Box mybox=new Box()这条语句时,首先,在栈区中定义一个Box类的变量mybox,然后在堆区中创建一个Box类型的对象(注意:对象是创建在堆区中,实例变量是在堆区中对象的里面。),然后返回这个堆区中Box类型对象的地址,赋值给mybox。所以mybox变量的值,实际上存放的是Box类型对象在堆区中的地址,这里的mybox就叫做引用变量。 当JAVA程序运行时,系统会为JAVA程序分配一块单独的内存空间供JAVA虚拟机使用。JAVA虚拟机又把这块内存空间分为主要的三大区域,分别是:栈区、堆区及方法区。栈区:用来存放局部变量(即方法中定义的变量)。椎区:用来存放实例变量(即没有用static修辞的成员变量)。方法区:用来存放静态变量及成员方法(包括实例方法和静态方法)。下面,我以你的Box类举个例子,为你说明下JAVA各个变量及方法在内存中的存储情况及对象的创建。 public class MyJava{ public static void main(){ Box mybox=new Box(); } } class Box{ int a=10; static int b=20; void make1(){}; static void make2(){}; }在以上这段代码中,变量有mybox、a、b。方法有main()、make1()、make2()。mybox:是局部变量,在JAVA栈区中。a:是实例变量,在JAVA堆区中。b:是静态变量,在JAVA方法区中。main():main方法的字节码在方法区中。make1():make1方法的字节码在方法区中。make2():make2方法的字节码在方法区中。当JAVA虚拟机执行Box mybox=new Box()这条语句时,首先,在栈区中定义一个Box类的变量mybox,然后在堆区中创建一个Box类型的对象(注意:对象是创建在堆区中,实例变量是在堆区中对象的里面。),然后返回这个堆区中Box类型对象的地址,赋值给mybox。所以mybox变量的值,实际上存放的是Box类型对象在堆区中的地址,这里的mybox就叫做引用变量。 mybox 是对象的引用在栈上分配而他指向在堆上分配的对象 对象里分配成员变量 mybox 是一个引用类型的变量,mybox的值是BOX对象的地址 哪位大侠推荐本深入了解有关java运行时内存分配的书? mybox是一个类的实例所以它肯定是个对象,当然它也是变量.至于说BOX里面被实例化了的变量,我们可否也认为是对象,这些对象组合成mybox对象.这可否理解成是组合的一种形式 BOX mybox=new BOX();-----------------------------------------------mybox只是一个BOX类类型的引用。当new BOX()生成一个BOX类型的对象后,就赋给BOX类类型的引用myboxmybox是变量,而它的值就是BOX类型对象的引用值 跪求大侠告知,jta20.jar的使用方法,我就想用它的telnet服务嵌到界面中去!多谢多谢! java面试题(高手解答) 如何读取<h1></h1>之间的东东 struts 问题,高手帮忙解决,在线等,急~~ 高级jtree UI设计? socket 收数据的小问题.在线等. Java里的泛型语法是什么?语义和C++的有什么不同? java数据库date问题。 [跪求一个算法]数组int[] num={1,2,3,4,5,6,7,8,9,10}[请进] 如何用java实现在数据库中只查询20条记录 如何让批处理文件出错时不关闭窗口 乱码问题
mybox是个引用类型的变量,你可以认为它的内容是一个地址(这个和具体的jvm实现机制有关系),该地址表示对象在堆中的具体位置 。
mybox这个值在栈中,new 的BOX这个对象的信息在堆中,mybox的值是BOX对象的地址。
class Test{
BOX mybox=new BOX();
}
椎区:用来存放实例变量(即没有用static修辞的成员变量)。
方法区:用来存放静态变量及成员方法(包括实例方法和静态方法)。下面,我以你的Box类举个例子,为你说明下JAVA各个变量及方法在内存中的存储情况及对象的创建。 public class MyJava{
public static void main(){
Box mybox=new Box();
}
} class Box{
int a=10;
static int b=20;
void make1(){};
static void make2(){};
}在以上这段代码中,变量有mybox、a、b。方法有main()、make1()、make2()。
mybox:是局部变量,在JAVA栈区中。
a:是实例变量,在JAVA堆区中。
b:是静态变量,在JAVA方法区中。
main():main方法的字节码在方法区中。
make1():make1方法的字节码在方法区中。
make2():make2方法的字节码在方法区中。当JAVA虚拟机执行Box mybox=new Box()这条语句时,首先,在栈区中定义一个Box类的变量mybox,然后在堆区中创建一个Box类型的对象(注意:对象是创建在堆区中,实例变量是在堆区中对象的里面。),然后返回这个堆区中Box类型对象的地址,赋值给mybox。所以mybox变量的值,实际上存放的是Box类型对象在堆区中的地址,这里的mybox就叫做引用变量。
椎区:用来存放实例变量(即没有用static修辞的成员变量)。
方法区:用来存放静态变量及成员方法(包括实例方法和静态方法)。下面,我以你的Box类举个例子,为你说明下JAVA各个变量及方法在内存中的存储情况及对象的创建。 public class MyJava{
public static void main(){
Box mybox=new Box();
}
} class Box{
int a=10;
static int b=20;
void make1(){};
static void make2(){};
}在以上这段代码中,变量有mybox、a、b。方法有main()、make1()、make2()。
mybox:是局部变量,在JAVA栈区中。
a:是实例变量,在JAVA堆区中。
b:是静态变量,在JAVA方法区中。
main():main方法的字节码在方法区中。
make1():make1方法的字节码在方法区中。
make2():make2方法的字节码在方法区中。当JAVA虚拟机执行Box mybox=new Box()这条语句时,首先,在栈区中定义一个Box类的变量mybox,然后在堆区中创建一个Box类型的对象(注意:对象是创建在堆区中,实例变量是在堆区中对象的里面。),然后返回这个堆区中Box类型对象的地址,赋值给mybox。所以mybox变量的值,实际上存放的是Box类型对象在堆区中的地址,这里的mybox就叫做引用变量。
而他指向在堆上分配的对象 对象里分配成员变量
-----------------------------------------------
mybox只是一个BOX类类型的引用。
当new BOX()生成一个BOX类型的对象后,就赋给BOX类类型的引用mybox
mybox是变量,而它的值就是BOX类型对象的引用值