• 【转载】java中成员变量,局部变量,静态变量的辨析


    java中成员变量,局部变量,静态变量的辨析

    Java中的变量大致分为 成员变量局部变量 两大类。

    成员变量:在类体里面定义的变量称为成员变量;

      如果该成员变量有 static 关键字修饰,则该成员变量称为静态变量或类变量;

      如果该成员变量没有 static 关键字修饰,则该成员变量被称为非静态变量或实例变量。

    局部变量:形参、方法内定义的变量、代码块中定义的变量,都属于局部变量。

    下表是三者的区别:

     

    三者的根本区别在于:所在存储位置的不同决定了不同的特性。

    下面主要介绍一下静态变量的利弊:

    特点:

      1、想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰。

      2、被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式。

      3、静态随着类的加载而加载。而且优先于对象存在。

    弊端:

      1、有些数据是对象特有的数据,是不可以被静态修饰的。因为那样的话,特有数据会变成对象的共享数据。这样对事物的描述就出了问题。所以,在定义静态时,必须要明确,这个数据是否是被对象所共享的。

      2、静态方法只能访问静态成员,不可以访问非静态成员。因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。

      3、静态方法中不能使用this,super关键字。因为this代表对象,而静态在时,有可能没有对象,所以this无法使用。

    什么时候使用静态变量?

      在程序运行期间,类中的静态变量其内存空间对所有该类的实例是共享的,因此在某些时候,为了节省内存空间开销,共享资源,我们可以将类中的变量声明为静态变量。但是因为静态变量生命周期太长,并且不易被系统回收,所有如果使用不合理,就会适得其反,从而造成大量内存的浪费。因此建议在全部符合下列条件的情况下才使用静态变量:

    (1)变量所包含的对象体积较大,占用内存较多

    (2)变量所包含的对象生命周期较长

    (3)变量所包含的对象数据稳定

    (4)该类的实例有对该变量包含对象的共享需求

    总结:

      尽管三者的本质都是变量,可是使用时却有相当大的区别,稍不留神就可能陷入陷阱。且先记住:在一个类中,如果一个变量能够用来描述一个类的属性,那就定义为成员变量,否则,它就应该定义为局部变量。而如果一个变量在全局中都能使用(某个内容是被所有对象所共享),那么我们就可以把这个变量用static来修饰,即为静态变量。

    原文地址:https://baijiahao.baidu.com/s?id=1625360816541592483&wfr=spider&for=pc

  • 相关阅读:
    Asp.Net Core Web应用程序—探索
    C# -Asp.Net.SignalR.Core之Hub
    C#净化版WebApi框架
    C#-Xamarin的Activity传值与Fragment引用
    C#-Xamarin利用ZXing.Net.Mobile进行扫码
    Junit4 架构设计系列(1): Request,ClassRequest 和 RunnerBuilder
    非常好用的正则表达式"\s+"
    简单易懂, JUnit 框架问答
    JUnit扩展:引入新注解Annotation
    让你的自动化代码更健壮
  • 原文地址:https://www.cnblogs.com/here-I-am/p/11585531.html
Copyright © 2020-2023  润新知