java创建对象底层原理是什么,java中的对象到底在内存中是什么,别说什么类的具体实例化
java创建对象底层原理是什么,java中的对象到底在内存中是什么,别说什么类的具体实例化第一次创建对象先加载类,类的方法在方法区中,创建对象调用构造方法在堆内存开辟一片...
java创建对象底层原理是什么,java中的对象到底在内存中是什么,别说什么类的具体实例化第一次创建对象先加载类,类的方法在方法区中,创建对象调用构造方法在堆内存开辟一片空间,以前一直不知道这片空间里放的是什么,后来上网查了下应该是属性值,对象能够调用原类中的方法还是通过加载类时把方法放入方法区中去调用的
java中到底对象算是内存中的哪部分,只是new出来的堆内存的一片空间吗
以前一直在想创建的对象内有没有方法还是只是调用原类方法,后来自己用断点走了一次发现还是调用的原类中的方法 展开
java中到底对象算是内存中的哪部分,只是new出来的堆内存的一片空间吗
以前一直在想创建的对象内有没有方法还是只是调用原类方法,后来自己用断点走了一次发现还是调用的原类中的方法 展开
2个回答
展开全部
对象是类的实例,同一个类的不同实例当然拥有相同的机器指令(相同的方法行为),不同的实例拥有不同的属性内存,相同的指令操作不同的内存得到各自的结果。
举个例子:
我们描述一个类:水果,它有两个属性,名称和数量,一个方法设置数量(setNum)。
现在,我们实例两个水果,一个苹果和一个西瓜(假如初始是一个),此时得为苹果和西瓜各自准备一个不同的存放空间(不能重叠了是吧,这就是为不同对象分配不同的堆内存),然后我们为两个对象都执行设置数量方法(都是setNum,同一个行为),假如苹果改为2,西瓜
改为5,此时两个不同对象执行了同一个方法得到个各自的结果。
下面补充一些官方描述:
java创建类时,也即是你所说的原类,其实只是对那个类的对象的外观与行为的描述(此时并未开辟堆内存,当然static例外)。只有当使用new创建那个类的对象时才会分配数据存储空间,其方法才供外界调用。
java为指定类创建对象,其实就是为类的描述创建属性值存储空间并初始化,并在堆栈中创建其指针,如果有方法局部变量,方法也会有自己的临时堆栈。
一个对象是一个堆栈地址所指向的一组堆内存,然后对象的行为则是java语言编译后的机器指令代码,指令执行操纵内存的数据。
如果有更合理的理解,或者认为我的理解有不对的地方欢迎指正,学习就是不断接近真相。
举个例子:
我们描述一个类:水果,它有两个属性,名称和数量,一个方法设置数量(setNum)。
现在,我们实例两个水果,一个苹果和一个西瓜(假如初始是一个),此时得为苹果和西瓜各自准备一个不同的存放空间(不能重叠了是吧,这就是为不同对象分配不同的堆内存),然后我们为两个对象都执行设置数量方法(都是setNum,同一个行为),假如苹果改为2,西瓜
改为5,此时两个不同对象执行了同一个方法得到个各自的结果。
下面补充一些官方描述:
java创建类时,也即是你所说的原类,其实只是对那个类的对象的外观与行为的描述(此时并未开辟堆内存,当然static例外)。只有当使用new创建那个类的对象时才会分配数据存储空间,其方法才供外界调用。
java为指定类创建对象,其实就是为类的描述创建属性值存储空间并初始化,并在堆栈中创建其指针,如果有方法局部变量,方法也会有自己的临时堆栈。
一个对象是一个堆栈地址所指向的一组堆内存,然后对象的行为则是java语言编译后的机器指令代码,指令执行操纵内存的数据。
如果有更合理的理解,或者认为我的理解有不对的地方欢迎指正,学习就是不断接近真相。
展开全部
java是用c++写的!你尝试往c++那方面想一下!然而c++的类又和c++的结构体有惊人的相似之处。然而c++的结构体又是c语言的结构体的加强!c语言的结构体呢?又是存放数据的一个集合!
class Student{
String name;
int age;
int score;
}
/*结构体 和数组差不多,只不过数组只能存放相同的数据结构!相同地:结构体大小等于里面的数据结构大小之和!*/
/*大小可以使用sizeof算一算……sizeof(stu)=sizeof(stu.name)+sizeof(stu.age)+sizeof(stu.score)*/
struct student{
char name[10];
int age;
int score;
}stu;
看!是不是很像!功能也大致相同!
class Student{
String name;
int age;
int score;
}
/*结构体 和数组差不多,只不过数组只能存放相同的数据结构!相同地:结构体大小等于里面的数据结构大小之和!*/
/*大小可以使用sizeof算一算……sizeof(stu)=sizeof(stu.name)+sizeof(stu.age)+sizeof(stu.score)*/
struct student{
char name[10];
int age;
int score;
}stu;
看!是不是很像!功能也大致相同!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询