java中的全局变量和静态变量是在编译时分配内存还是在加载时分配内存??

如题所述

全局变量是在创建对象的时候分配内存的 创建对象过程为 

    分配空间。

    递归的创建父类对象。

    初始化成员变量。

    调用构造方法创建一个对象。

静态变量是在类加载的时候分配空间的,静态变量和对象没有关系 是在JVM第一次读到一个类的时候加载信息的过程中分配空间的 加载过程为

1 .加载父类(如果父类已经加载过,则不在加载)。

2.初始化静态属性 。

3 .按顺序的初始化静态代码块   初始化的前提就是分配空间 。

而且静态变量在以后的创建对象的时候不在初始化 所以一般用静态来保存共享信息

    静态变量存在于方法区中,成员变量存在于堆内存中,成员变量所属于对象JAVA成员变量和静态变量的区别,成员变量随着对象创建而存在。随着对象被回收而消失。静态变量随着类的加载而存在。

    静态变量是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由static加以定义后才能成为静态外部变量,或称静态全局变量。

    对于自动变量,它属于动态存储方式。但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。

    而在以Pascal为代表的许多程序语言中,所有局部变量都由系统自动分配存储空间,而所有全局变量的存储空间则以静态分配的方式获取,因此由于实际上“局部变量”和“全局变量”这两个术语已足以涵盖所有的情况,在这些程序语言中通常不使用“静态变量”这一术语,而直接以“全局变量”代之。

    在这些程序语言中,静态变量就是全局变量,而即使在有明确区分全局和静态变量的程序语言中,在编译后的代码里二者也以相同的方式获取存储空间。而今术语“静态变量”的概念则主要基于C族语言的“static”的定义。

    静态变量也可以用于存储常数。具体来说,静态变量可用const,constant或final等关键字标识,这时其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-26
关于这个问题,全局变量(成员变量)是在创建对象的时候分配内存的创建对象过程为1分配空间2递归的创建父类对象(无父类这步可省略)3初始化成员变量4调用构造方法创建一个对象
静态变量是在类加载的时候分配空间的,静态变量和对象没有关系是在JVM第一次读到一个类的时候加载信息的过程中分配空间的类加载过程为1加载父类(如果父类已经加载过,则不在加载)2初始化静态属性3按顺序的初始化静态代码块
初始化的前提就是分配空间
而且静态变量在以后的创建对象的时候不在初始化所以一般用静态来保存共享信息
希望对你有所帮助本回答被网友采纳
第2个回答  2013-11-05
用static修饰的变量是在编译的时候分配内存,没有用static修饰的变量是在加载时分配

java中的全局变量和静态变量是在编译时分配内存还是在加载时分配内存...
静态变量是在类加载的时候分配空间的,静态变量和对象没有关系 是在JVM第一次读到一个类的时候加载信息的过程中分配空间的 加载过程为 1 .加载父类(如果父类已经加载过,则不在加载)。2.初始化静态属性 。3 .按顺序的初始化静态代码块 初始化的前提就是分配空间 。而且静态变量在以后的创建对...

全局变量的存储空间在什么时候分配?分配在哪?
静态局部变量是在编译时赋初值的,在静态存储区内分配存储单元。

java在声明一个变量时有没有分配内存空间?
1、栈区— 由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源 2、堆区— 一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收 3、静态区— 存放全局变量,静态变量和字符串常量,不...

内存的分配方式有哪几种
1. 从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储。2. 在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限。3. 在堆区分配:动态分配...

全局变量和静态局部变量有什么区别
静态全局变量在静态存储区分配存储单元,在程序运行期间都不释放,静态全局变量在编译时赋值(若在定义时未进行赋值处理,则默认赋值为0(对数值型变量)或空字符(对字符型变量));只能在当前文件中使用;参考谭浩强的《C程序设计第二版》P180,可从三个方面对以上四种变量进行区分:

全局变量,静态变量,局部变量和new的变量 系统处理垃圾的机制是什么深...
静态变量是在data segment( 数据内存)只有一个,直接调用,类名.变量名。方法里声明的变量是局部变量,必须同时赋值,只在栈内存中咱一块空间名和值在一块。c语言的话得您亲自释放内存,不能释放多,也不能不释放(我没学过,不太清楚),C和Java 里 在方法执行完后new 的对象 会立刻消失,所以...

java中static作用详解
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象...

全局变量 与 static型的局部变量 有什么区别
从静态存储区域分配内存的特点是,内存在程序编译时就已经分配好,这块内存在程序运行期间都存在,这也就导致了全局变量和static变量的生命期存在于整个程序运行中(即程序开始运行到程序结束)static变量分为两种:第一种:static局部变量 在函数体内定义int i;和static int i;的区别 首先他两都只在定义...

静态局部变量和普通全局变量以及静态全局变量的区别
静态局部变量和普通全局变量以及静态全集变量在编译时,编译器会自动给他们分配地址。而且是从MCU上电运行开始,一直驻留,不会被回收的。而真正的区别在于他们的作用域。静态局部变量的作用域是在于定义它的那个函数内。由于其在编译时编译器就给他们分配了地址,并且做了初始化,所以它只能被初始化一次,...

如何分配内存啊
内存分配方式有三种:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器...

相似回答