📜  Java静态变量和非静态变量的区别

📅  最后修改于: 2021-09-12 11:09:54             🧑  作者: Mango

Java有三种类型的变量:

  • 局部变量
  • 实例变量
  • 静态变量

局部变量和实例变量统称为非静态变量。因此也可以说Java变量可以分为两类:

  • 静态变量:当变量被声明为静态时,将创建该变量的单个副本并在类级别的所有对象之间共享。静态变量本质上是全局变量。类的所有实例共享相同的静态变量。

    静态变量的要点:-

    • 我们只能在类级别创建静态变量。看这里
    • 静态块和静态变量按它们在程序中的顺序执行。

    下面的Java程序演示了静态块和静态变量是按照它们在程序中的存在顺序执行的。

    // Java program to demonstrate execution
    // of static blocks and variables
    class Test {
        // static variable
        static int a = m1();
      
        // static block
        static
        {
            System.out.println("Inside static block");
        }
      
        // static method
        static int m1()
        {
            System.out.println("from m1");
            return 20;
        }
      
        // static method(main !!)
        public static void main(String[] args)
        {
            System.out.println("Value of a : " + a);
            System.out.println("from main");
        }
    }
    

    输出:

    from m1
    Inside static block
    Value of a : 20
    from main
    
  • 非静态变量
    • 局部变量:在块或方法或构造函数中定义的变量称为局部变量。
      • 这些变量是在进入块或函数被调用并在退出块后或调用从函数返回时被销毁时创建的。
      • 这些变量的作用域只存在于声明变量的块中。即我们只能在该块内访问这些变量。
      • 局部变量的初始化是强制性的。
    • 实例变量:实例变量是非静态变量,在任何方法、构造函数或块之外的类中声明。
      • 由于实例变量是在类中声明的,因此在创建类的对象时创建这些变量,并在销毁对象时销毁这些变量。
      • 与局部变量不同,我们可以对实例变量使用访问说明符。如果我们不指定任何访问说明符,则将使用默认访问说明符。
      • 实例变量的初始化不是强制性的。它的默认值为 0
      • 实例变量只能通过创建对象来访问。

    例子 :

    // Java program to demonstrate
    // non-static variables
      
    class GfG {
      
        // non-static variable
        int rk = 10;
      
        public static void main(String[] args)
        {
            // Instance created inorder to access
            // a non static variable.
            Gfg f = new Gfg();
      
            System.out.println("Non static variable"
                               + " accessed using instance"
                               + " of a class");
            System.out.println("Non Static variable "
                               + f.rk);
        }
    }
    
    输出:
    Non static variable accessed using instance of a class.
    Non Static variable 10
    

静态变量和非静态变量的主要区别是:

Static variable Non static variable
Static variables can be accessed using class name Non static variables can be accessed using instance of a class
Static variables can be accessed by static and non static methods Non static variables cannot be accessed inside a static method.
Static variables reduce the amount of memory used by a program. Non static variables do not reduce the amount of memory used by a program
Static variables are shared among all instances of a class. Non static variables are specific to that instance of a class.
Static variable is like a global variable and is available to all methods. Non static variable is like a local variable and they can be accessed through only instance of a class.