类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。
2012-08-23 15:19
337 查看
类体由2部分构成:
一部分是变量的定义;
一部分是方法的定义(一个类中可以有多个方法)
在变量定义部分定义的变量叫做类的成员变量,成员变量在整个类中都有效.
(全局变量应该是成员变量的俗称)
在方法体中定义的变量叫做局部变量,局部变量只在定义它的方法中有效.
成员变量又分为
实例变量
和
类变量(static静态变量).
class One
{
float x; //x为实例变量
static int y; //只要有关键字static, y为类变量
}
局部变量是在函数或方法中的变量,实例变量指的是类的一个实例,就是一个对象, 成员变量就是类中的变量(不是方法中的变量!), 类变量是类中的静态变量。
局部、实例、成员变量的作用域和生存周期同局部变量一样,而类变量如果用public声明则作用域同全局变量,如果是private则作用域只在类的内部,
生存周期同全局变量.
成员方法和类方法跟局部变量和类变量的关系一样.
ava优化编程-静态变量
静态变量
在程序运行期间,类中的静态变量其内存空间对所有该类的实例是共享的,因此在某些时候,为了节省内存空间开销,共享资源,
我们可以将类中的变量声明为静态变量。
但是因为静态变量生命周期太长,并且不易被系统回收,所有如果使用不合理,就会适得其反,从而造成大量内存的浪费。
因此建议在全部符合下列条件的情况下才使用静态变量:
(1)变量所包含的对象体积较大,占用内存较多
(2)变量所包含的对象生命周期较长
(3)变量所包含的对象数据稳定
(4)该类的实例 有 对该变量包含对象的共享需求
关键字: java 变量 作用域
1. 类的静态变量在内存中只有一个。静态变量位于方法区,被类的所有实例共享。静态变量的生命周期取决于类的生命周期(即类何时被加载和卸载)。
2. 类的每个实例都有相应的实例变量。实例变量位于堆区中。实例变量的生命周期取决于实例的生命周期(即实例何时被创建及销毁)。
3. 假如成员变量(包括静态变量和实例变量)是引用变量,那么当该成员变量结束生命周期时,并不意味着它所引用的对象也一定结束生命周期。变量的生命周期
和对象的生命周期是两个不同的概念。
4. 局部变量位于栈区,其生命周期取决于所属的方法何时被调用及结束调用。
总结一下:
局部变量位于栈区,静态变量位于方法区,实例变量位于堆区,方法的字节码位于方法区,对象本身位于堆区,对象的引用位于栈区。
转载地址:/article/10803869.html
一部分是变量的定义;
一部分是方法的定义(一个类中可以有多个方法)
在变量定义部分定义的变量叫做类的成员变量,成员变量在整个类中都有效.
(全局变量应该是成员变量的俗称)
在方法体中定义的变量叫做局部变量,局部变量只在定义它的方法中有效.
成员变量又分为
实例变量
和
类变量(static静态变量).
class One
{
float x; //x为实例变量
static int y; //只要有关键字static, y为类变量
}
局部变量是在函数或方法中的变量,实例变量指的是类的一个实例,就是一个对象, 成员变量就是类中的变量(不是方法中的变量!), 类变量是类中的静态变量。
局部、实例、成员变量的作用域和生存周期同局部变量一样,而类变量如果用public声明则作用域同全局变量,如果是private则作用域只在类的内部,
生存周期同全局变量.
成员方法和类方法跟局部变量和类变量的关系一样.
1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放 4.另外还有一个专门放常量的地方。- 程序结束释放 java类的成员变量有俩种: 一种是被static关键字修饰的变量,叫类变量或者静态变量; 另一种没有static修饰,为实例变量。 类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。 而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。 public class Temp { int t; //实例变量 public static void main(String args[]){ int t=1; //局部变量 System.out.println(t); //打印局部变量 Temp a= new Temp(); //创建实例 System.out.println(a.t); //通过实例访问实例变量 } } 结果为: 1 0 (成员变量具有缺省值 而局部变量则没有) 把代码改为 public class Temp { static int t; //类变量 public static void main(String args[]){ System.out.println(t); //打印类变量 int t=1; //局部变量 System.out.println(t); //打印局部变量 Temp a= new Temp(); //创建实例 System.out.println(a.t); //通过实例访问实例变量 } } 结果则为 0 1 0
|
静态变量
在程序运行期间,类中的静态变量其内存空间对所有该类的实例是共享的,因此在某些时候,为了节省内存空间开销,共享资源,
我们可以将类中的变量声明为静态变量。
但是因为静态变量生命周期太长,并且不易被系统回收,所有如果使用不合理,就会适得其反,从而造成大量内存的浪费。
因此建议在全部符合下列条件的情况下才使用静态变量:
(1)变量所包含的对象体积较大,占用内存较多
(2)变量所包含的对象生命周期较长
(3)变量所包含的对象数据稳定
(4)该类的实例 有 对该变量包含对象的共享需求
关键字: java 变量 作用域
1. 类的静态变量在内存中只有一个。静态变量位于方法区,被类的所有实例共享。静态变量的生命周期取决于类的生命周期(即类何时被加载和卸载)。
2. 类的每个实例都有相应的实例变量。实例变量位于堆区中。实例变量的生命周期取决于实例的生命周期(即实例何时被创建及销毁)。
3. 假如成员变量(包括静态变量和实例变量)是引用变量,那么当该成员变量结束生命周期时,并不意味着它所引用的对象也一定结束生命周期。变量的生命周期
和对象的生命周期是两个不同的概念。
4. 局部变量位于栈区,其生命周期取决于所属的方法何时被调用及结束调用。
总结一下:
局部变量位于栈区,静态变量位于方法区,实例变量位于堆区,方法的字节码位于方法区,对象本身位于堆区,对象的引用位于栈区。
转载地址:/article/10803869.html
相关文章推荐
- 内存管理:类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量的解释
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量的定义与区别
- 牛客网Java刷题知识点之全局变量(又称成员变量,分为类变量和实例变量)、局部变量、静态变量(又称为类变量)
- 成员变量、全局变量、实例变量、类变量、静态变量和局部变量的区别
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的区别
- 全局变量、局部变量、静态变量和实例变量的区别
- iOS 成员变量,属性变量,局部变量,实例变量,全局变量 详解
- ios学习路线—静态变量,全局变量exterm,局部变量,实例变量
- 全局变量、局部变量、静态变量和实例变量的区别
- java 中的 成员变量、局部变量、静态变量、类变量、非静态变量、实例变量、向前引用、非法向前引用、静态代码块、非静态代码块 执行时机
- Java成员变量、局部变量、静态变量、成员方法、全局方法等概念的区别
- 全局变量,局部变量,静态变量和实例变量的区别
- IOS之成员变量,属性变量,局部变量,实例变量,全局变量
- Java成员变量、局部变量、静态变量、成员方法、全局方法等概念的区别
- java 中的 成员变量、局部变量、静态变量、类变量、非静态变量、实例变量、向前引用、非法向前引用、静态代码块、非静态代码块 执行时机
- Java成员变量、局部变量、静态变量、成员方法、全局方法等概念的区别