导航:首页 > 安装方法 > 类的方法存储在哪里

类的方法存储在哪里

发布时间:2022-03-03 18:03:09

1. c++中的类和实例分别存储在什么地方

类不会储存在什么地方,只是告诉程序,如何去创建这个类型的变量、需要多少个字节、以及如何销毁等等等。
至于实例,也可以说对象,在什么地方,就是我们通常说的堆栈。抛开全局常量区以及静态存储区这些不谈。
如果你new了一个对象(还有其他的c的分配方式,比如malloc不推荐使用),这种就属于动态分配内存,分配在堆上。堆相对于栈很大,所以很多时候我们分配在堆上,但也意味着,你需要知道什么时候去销毁他,所以与delete或delete []成对出现。
Student stu; 类似于这样的我们没有使用new的对象就分配在了栈上。他的对象是自己管理的。在 {}函数体中的最后会自动按照栈的后进先出,销毁对象。所以不需要你去管理对象的内存,但也意味着对象所在的生命周期通常就是一个{}中。

补充,堆除了比栈空间大,它是在程序运行时来分配内存的,比如分配
int * i = new i[ m] ; //m 是在程序运行后,从输入中得到的数值。
但栈不可以,int i[ m ];//这里必须是常量 const int m = 1000; 在程序编译的时候,他就必须知道数组有多大。

2. JAVA中类中的方法存储在什么地方

类加载时 方法信息保存在一块称为方法区的内存中, 并不随你创建对象而随对象保存于堆中。可参考《深入java虚拟机》前几章。
另参考(他人文章):
如果instance method也随着instance增加而增加的话,那内存消耗也太大了,为了做到共用一小段内存,Java 是根据this关键字做到的,比如:instance1.instanceMethod(); instance2.instanceMethod(); 在传递给对象参数的时候,Java 编译器自动先加上了一个this参数,它表示传递的是这个对象引用,虽然他们两个对象共用一个方法,但是他们的方法中所产生的数据是私有的,这是因为参数被传进来变成call stack内的entry,而各个对象都有不同call stack,所以不会混淆。其实调用每个非static方法时,Java 编译器都会自动的先加上当前调用此方法对象的参数,有时候在一个方法调用另一个方法,这时可以不用在前面加上this的,因为要传递的对象参数就是当前执行这个方法的对象。

3. java一个类在内存中是如何存储的

关于您提出的问题,网络也有过这样的回答了.那么java的类定义完了之后在哪里呢.当然一般一个类,当你没有new的时候,也就是说并没有在内存中分配地址,所以就像你说的无处存

4. (以C#为例)方法在内存中是如何存储的

个int属性会内联存在堆上,内联的意思就是对象的值类型属性直接存储在堆上,就是在堆上直接开一个32bit的空间.说到这好像也没太大区别,但是和对象的存储比较一下就清楚了.
如果有个对象的属性和一个值类型的属性:
classA
{
int v1;
classB v2;
}
那么实例化classA的对象时,v1那个位置直接存一个32位int数
v2那个地方存的是在堆上另一个对象的位置,相当于一个32位指针.

static类型是程序加载时就分配内存的.
普通类型是需要时才分配.
static类型是整个类公用的,所有该类的实例共享的都是同一个变量
另外不需要实例化一个类型,就可以以 类名.成员 的方式访问静态成员

5. java中,静态方法被调用是,存储在内存的哪个区域是栈还是放大区还是两者都有

在JDK8之前,静态成员(静态变量和静态方法)都是存储在方法区(永久代)中的静态区中(这里指类被加载后,静态成员的存储位置)。但在JDK8之后,永久代被移除了,取而代之的是元空间(metaspace)。但元空间中存储的主要是.class文件的元数据信息,静态成员的存储位置由方法区转到了堆内存(heap)中。
不过,不管是JDK8,还是更早的版本中,静态方法的执行(不仅仅是静态方法,还有普通的成员方法)都是在栈内存(stack)中进行的。每个线程都会在栈内存中开辟一个栈,在调用方法时,对应的方法都会在执行这个方法的线程的栈中创建一个“栈帧”,栈帧中保存了局部变量表(基本数据类型和对象引用)、操作数栈、动态连接和返回地址等信息。等到方法执行完毕,栈帧被销毁,对应的内存也将被释放。

6. java中使用类创建对象后,该对象的方法在堆内存中是怎样存储的

方法不存在在堆内存中,是放在代码区,只有在调用的时候,才会构建该方法的运行时环境,包括参数,局部变量等,当然,这些也都是在栈内存中的。对内存只存放被new出来的东西。
你可以读读编译原理相关的书,这种问题就清楚了。

7. 类创建的对象中的方法存储在什么地方

象,创建它的方法是ADODB.connection.

8. c++中,如何自己定义一个类,储存在哪里,什么格式,如何调用,请说详细一点,新手。

C++程序写完成后,必定会有编绎器帮助你做以下事情,编绎源程序,链接其他可能调用的文件(一般都是用include ,如#include <iostream.h>,就是该文件会调用到iostream.h这个文件,里面会有接口实现标准输入输出,如果你也有写类,也可以通过此处来链接到你想要的文件,以调用里面的定义好的内容)最终生成一个可执行文件,比如最简单的程序,输出helloworld吧
#include <stdio.h> //不管C和C++都是一样,用C打比方吧。此处作用告诉程序,当前文件会用到stdio.h这个文件
int main(){ //程序开始执行地方,开始程序执行的地方
printf("Hello World"); //调用stdio.h里面的 void printf()这个方法,来实现输出指定内容到
//DOS页面,
return 0;//程序返回
}
这就是你定义的类如何被其他文件"调用"(应该说是使用)的原理,说储存吧,实际上应该是定义。标准说法。
再说类吧,其实可能参考 int x = 0;这个
有没有想过int 是什么? 其实int有点类似类的使用,就是定义一个 变量x ,其类型为短整型的。
如类,class Hello(){} Hello y;类其实也是差不多,也是定义一个变量y,其类型为自己定义的类别Hello.仅此而且,在使用你定义的类型与前人提供的最基本类型都具有相似,都有其类型的限制性等 ,如int 型不能赋给带有小数点的数,否则会丢失精度(前人的代码定义好的)。你定义的也是一样。 当你学习了计算机编绎原理、汇编、计算机组成原理后,会有一个更清晰的理解。大学学基本原理,以上学科也是有作用的,慢慢学习吧

9. java中一个类的方法是怎么存储的

java内存分析:
都是将内存分为三块
第一块内存区域是:栈
第二块内存区域是:堆
第三块内存区域是:方法区
栈空间里装的都是局部变量
堆空间里装的都是new出来的东西,特殊的对象 (非static修饰的全局变量是特殊的对象,在堆内存区域内)
方法区里装的都是基本类型常量和字符串常量、static修饰的全局变量、代码

10. Java构造函数(方法)存储在jvm哪个内存里

存放到方法区当中;
new出来的是实例对象,实例对象才是存放在堆当中;
构造函数对应的是<init>方法,方法信息随着类加载器加载到方法区当中。
栈:
以栈帧为单位,存放的不是方法具体的结构,只是通常一个方法对应一个栈帧,对应的入栈出栈就是栈帧的入栈出栈。栈帧中有局部变量表,操作数栈,方法返回地址,动态链接。其中局部变量表存放局部变量,包括形参,非静态方法默认在第一个索引存放一个this变量;操作数栈用于操作局部变量表和一些值的运算,比如读取表中变量的值进行运算,或存放相应的值到局部变量表中;方法返回地址则是用于记录对应方法的下一条指令的地址;动态链接是符号引用变成的直接引用。
堆:
存放实例对象,在jdk7开始,还存放静态变量和字符串常量池
方法区:
存放类元信息,比如完整类名全称,public,abstract等修饰符,实现的接口有序列表等;方法信息,比如修饰符,返回类型等;JIT代码缓存,也就是被即时编译器编译后的热点代码,用于提高性能;域信息,也就是属性信息,比如修饰符,类型等;运行时常量池,字节码文件中常量池的运行时表现,类似符号引用的记录,不过蕴含的信息更为丰富,而且具有动态性。jdk6及以前,还存放静态变量,运行时常量池中还存放字符串常量池,到了jdk7则移到了堆中。

阅读全文

与类的方法存储在哪里相关的资料

热点内容
燃烧热的计算方法有哪些 浏览:353
一年级儿童诗的教学方法 浏览:537
祛腋臭简单有效的方法是什么 浏览:137
电脑光标使用方法视频 浏览:626
尿频多的治疗方法 浏览:364
高中英语学好的技巧方法 浏览:77
研究直线运动的基本思路和方法 浏览:952
常见的导线连接方法学生考试 浏览:34
懒人减肥的正确方法 浏览:29
酒店床上螨虫怎么去除简单方法 浏览:775
阿尔派汽车cd机改aux最简单方法 浏览:196
黄金美容棒使用方法视频 浏览:970
校验码计算方法 浏览:533
对论证进行分析和评估的方法 浏览:787
水池电接点液位计安装方法 浏览:190
多肉干湿的鉴别方法 浏览:698
大众15机油压力传感器检测方法 浏览:321
如何纠正输送带跑偏的方法是什么 浏览:945
山羊口疮治疗方法 浏览:519
实验室应熟悉各项检测和校准方法 浏览:809