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

Java中有三种类型的变量:

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

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

静态变量

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

  • 只能在类级别创建静态变量。
  • 静态块和静态变量按照它们在程序中出现的顺序执行。

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

// Java program to demonstrate execution // of static blocks and variables  class Yiibai {     // 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 Yiibai {      // non-static variable     int rk = 10;      public static void main(String[] args)     {         // Instance created inorder to access         // a non static variable.         Yiibai f = new Yiibai();          System.out.println("Non static variable"/n                        + " accessed using instance"/n                        + " of a class");         System.out.println("Non Static variable "/n                        + f.rk);     } } 

运行结果:

Non static variable accessed using instance of a class. Non Static variable 10 

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

静态变量 非静态变量
可以使用类名访问静态变量 可以使用类的实例访问非静态变量
静态变量可以通过静态和非静态方法访问 非静态变量不能在静态方法中访问。
静态变量减少了程序使用的内存量。 非静态变量不会减少程序使用的内存量
静态变量在类的所有实例之间共享。 非静态变量特定于该类的实例。
静态变量就像一个全局变量,可用于所有方法。 非静态变量就像一个局部变量,它们只能通过类的实例来访问。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264273.html

(0)
上一篇 2022年6月7日
下一篇 2022年6月7日

相关推荐

发表回复

登录后才能评论