Java中static关键字详解

static关键字特点

  • static是一个修饰符,用于修饰成员。(成员变量,成员函数)static修饰的成员变量 称之为静态变量或类变量。
  • static修饰的成员被所有的对象共享。
  • static优先于对象存在,因为static的成员随着类的加载就已经存在。
  • static修饰的成员多了一种调用方式,可以直接被类名所调用,(类名.静态成员)。
  • static修饰的数据是共享数据,对象中的存储的是特有的数据。

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

1、生命周期的不同:

  • 成员变量随着对象的创建而存在随着对象的回收而释放。
  • 静态变量随着类的加载而存在随着类的消失而消失。

2、调用方式不同:

  • 成员变量只能被对象调用。
  • 静态变量可以被对象调用,也可以用类名调用。(推荐用类名调用)

3、别名不同:

  • 成员变量也称为实例变量。
  • 静态变量称为类变量。

4、数据存储位置不同:

  • 成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
  • 静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

静态使用时需要注意的事项

  • 静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)
  • 静态方法中不可以使用this或者super关键字。
  • 主函数是静态的

static关键字的基本用法

1.static修饰成员变量

(1)当分析对象中所具备的成员变量的值都是相同的。这时这个成员就可以被静态修饰。
(2)只要是数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中,是非静态的。
(3)如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,是静态的。

对静态变量的引用有两种方式:

类.静态变量
对象.静态变量
静态变量无需实例化对象,直接通过类名即可访问。而没有static修饰的成员变量,则需要首先由类实例化对象,再通过对象访问该成员变量才可以。

2.static修饰成员方法

(1)static的另一个作用,就是修饰成员方法。相比于修饰成员属性,修饰成员方法对于数据的存储上面并没有多大的变化,因为我们从上面可以看出,方法本来就是存放在类的定义当中的。
(2)static修饰成员方法最大的作用,就是可以使用”类名.方法名”的方式操作方法,避免了先要new出对象的繁琐和资源消耗。
(3)static修饰的方法成为类的方法,使用时通过“类名.方法名”的方式就可以方便使用,相当于定义了一个全局的函数(只要导入该类所在的包即可)。所以相应地,非静态方法则还是要通过实例化对象,再通过“对象.方法名”的方式访问。
(4)由于静态方法可以直接通过类名调用,说明调用静态方法的时候,是不存在对象的,所以,静态方法中不能有this与super关键字!并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用,即使存在类实例化的对象,也不清楚具体调用哪一个对象的非静态成员变量或者方法。

静态方法只能访问所属类的静态成员变量和成员方法。但是反过来,非静态方法是可以访问静态方法与静态成员变量的。

3.static 修饰代码块

static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

4.static内部类

static内部类是指被申明为static的内部类,他可以不依赖于外部类实例对象而被实例化,而通常的内部类需要外部类实例化后才能实例化。静态内部类不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态成员方法,只有内部类才能被申明为static。

发布了120 篇原创文章 · 获赞 11 · 访问量 6950

猜你喜欢

转载自blog.csdn.net/weixin_45366499/article/details/105330403