静态变量和成员变量的区别

静态变量和成员变量的不同:

① 所属范围不同。静态变量是属于类范围的;成员变量是属于对象范围的。

② 存活时间不同。类的一生有着静态变量的伴随;而成员变量只能陪类走一程,对象产生的时候它就产生,而且它会随着对象的消亡而消亡。

③ 存储位置不同。静态变量时存储在方法区里的静态区;成员变量存储在堆栈内存区。

④ 调用方式不同。静态变量可以通过类名调用,也可以通过对象来调用;成员变量只能通过对象名调用。

接下来,就是稍微地理解一下上面说的这些不同啦~

①     所属范围不同

首先给出一小段代码,定义了静态变量和成员变量。

public class StaticTest{
    static int num01 = 9;
    public static void main(String[] args){
        int num02 = 10;
    }
}

用javap -p反编译了一下,可以得到:

由此可知,静态变量是随着类的产生而产生的,而且成员变量只有在对象被创建的时候才会产生。

 

② 存活时间不同。

依然使用以上的源码,使用javap -v反编译一下:

由此可知,当num01产生了之后,在main()函数调用结束之后,num01还会保存下来,但是num02就会随着对象的调用而消亡。

③ 存储位置不同。

依然是使用以上的源码,也是经过javap -v反编译了一下:

此外我们可以看到,在”Constant pool”(常量池)里面只有num01的踪迹,而没有num02的踪迹。

④ 调用方式不同。

重新写一段代码,我们可以看到num01是一个静态变量,而且在test01()方法里面定义了成员变量num02,我们可以看到num01无论在哪里调用都行,但是成员变量只有在对象被调用的时候才会产生。

public class StaticTest{
    static int num01 = 9;
    public static void main(String[] args){
        System.out.println("Static Num:"+num01);
        StaticTest st =  new StaticTest();
        num01 = 11;
        st.test01();
    }
    public void test01(){
        int num02 = 10;
        System.out.println("Static Num:"+num01);
        System.out.println("Member Num:"+num02);
    }
}

结果如下:

原文地址:https://www.cnblogs.com/NYfor2018/p/9481069.html

时间: 2024-10-25 16:13:58

静态变量和成员变量的区别的相关文章

07_面向对象(成员变量和局部变量区别、类作为形式参数的问题、匿名对象、封装、private关键字、this关键字、构造方法、成员方法、static关键字、静态变量和成员变量、main方法)_02

7:构造方法(掌握)    (1)作用:用于对对象的数据进行初始化    (2)格式:        A:方法名和类名相同        B:没有返回值类型,连void都不能有        C:没有返回值                思考题:构造方法中可不可以有return语句呢?        可以.而是我们写成这个样子就OK了:return;        其实,在任何的void类型的方法的最后你都可以写上:return;    (3)构造方法的注意事项        A:如果我们没写构

静态变量和成员变量的区别 && 成员变量和局部变量的区别

============================================================================= 1)静态变量和成员变量的区别: (1):所属不同: 静态变量:属于类,也称为类变量. 成员变量:属于对象,也称为对象变量或实例变量. (2):在内存中的位置不同: 静态变量:存储于方法区的静态区. 成员变量:存储于堆内存. (3):生命周期不同: 静态变量:静态变量是随着类的加载而加载,随着类的消失而消失. 成员变量:成员变量是随着对象的创建

iOS开发中 类、对象、实例变量、成员变量、属性变量等区别和关系

类(class):具有相同属性和行为等同一类元素等总称,类是一个抽象的概念. 区分是类还是对象,看它能否继续被细分. 在OC中,类是表示对象类型的结构体,对象通过类来获取自身的各种信息.类由两个部分组成:*.h和*.m文件组成. *.m文件中 implemention部分是类的实现部分,内部包含类中的各种信息,包括各种实例方法或类方法. 类别( category):是为现有的类添加新方法的方式,通常以"类名称+类别名称"来命名. 类别中不能添加新的实例变量.但是可以在类别中添加属性.

随笔⑨ java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量

java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量 ① 类变量(也叫静态变量)是类中独立于方法之外的变量,用static 修饰,静态变量随着类的加载而加载. ② final变量:用final关键字修饰,不能被修改.与static一起用可表示常量. ③ 成员变量(也叫"实例变量"."域"):也是类中独立于方法之外的变量,不过没有static修饰.可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型

Objective-C 基本语法:实例变量与成员变量的区别.l........实例方法和类方法区别

http://leopard168.blog.163.com/blog/static/16847184420138153296930/ http://blog.csdn.net/thdxs/article/details/10988343 1.类方法是属于整个类,而不属于某个对象.2.类方法只能访问类成员变量,不能访问实例变量,而实例方法可以访问类成员变量和实例变量.3.类方法的调用可以通过类名.类方法和对象.类方法,而实例方法只能通过对象.实例方法访问.4.类方法只能访问类方法,而实例方法可以

Objective-C 基本语法:实例变量与成员变量的区别

在Objective-C中,定义一个类,需要有两部分: 第一是接口(interface),第二是实现(implementation). 接口对应接口文件,而实现对应了实现文件. 接口文件包含了类的声明,成员变量(member variable)和方法(method). 接口文件通常是.h 实现文件通常是.m文件.  接口中所声明的方法(method),需要在.m 文件中,通过xcode 来实现这个方法(method). 今天查看apple 的官方文档时(如下).https://developer

java易混淆概念之类变量、成员变量、局部变量

java易混淆概念之类变量.成员变量.局部变量 类变量.成员变量.局部变量 类变量(也叫静态变量)是类中独立于方法之外的变量,用static 修饰.(static表示“全局的”.“静态的”,用来修饰成员变量和成员方法,或静态代码块(静态代码块独立于类成员,jvm加载类时会执行静态代码块,每个代码块只执行一次,按顺序执行)). 成员变量(也叫“实例变量”.“域”)也是类中独立于方法之外的变量,不过没有static修饰. 局部变量是类的方法中的变量. 看下面的伪代码说明: public class 

静态变量和成员变量有什么区别?应该怎么调用?

成员变量从属于对象,是对象的一部分,放在堆中. 静态变量是很多对象共享的,放在数据段中. 成员变量是对象特有的,彼此独立,一个对象成员变量值的更改,不会影响别的对象. 静态变量是对象共享的,一个对象更改后,会影响所有的对象. 静态变量在类加载时产生,加载时机在对象之前;成员变量在对象产生时加载.所以静态方法不能直接访问成员方法. 成员变量调用通过 对象名.成员变量 静态变量调用通过 对象名.静态变量    类名.静态变量

C++类特殊成员变量(引用、静态、常成员变量)的初始化操作

有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同.这些特殊的类型的成员变量包括: a.引用 b.常量 c.静态 d.静态常量(整型) e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化. 静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末. 参考下面的代码以及其中注释: #include <iostream> using namespace std; class BClass { public: BClas