Java关键字之static

230 阅读2分钟

static关键字

【static:adj. 静态的 】

可以用于修饰 属性、方法、代码块、内部类

1. 修饰属性:静态变量(类变量)

分类

若用static修饰,则称为静态变量(或类变量),否则是非静态变量(实例变量)

  • 静态变量:创建了类的多个对象,多个对象共享同一个静态变量。当某个对象修改了静态变量时,其他对象读取的是最新的修改值。

  • 实例变量:创建了类的多个对象,每个对象都各自有一套类的非静态属性。当修改其中一个对象中的非静态属性,对其他对象的非静态属性不影响。

  • 两者比较

    调用类变量实例变量
    yesno
    对象yesyes

特性

  • 静态变量随着类的加载而加载。调用方式为 类名.静态变量名
  • 静态变量的加载先于对象的创建。
  • 由于类只加载一次,所以静态变量在内存中只存一份在方法区的静态域中。

应用

Q:在实际开发中,如何确定一个属性是否要声明为static呢?

A:可以被多个对象共享的,多个对象共用一个。牵一发而动全身。

举例

  • System.out
  • Math.PI;

2. 修饰方法:静态方法

特性

  • 随着类的加载而加载。调用方式为 类名.静态方法名

  • 静态方法只能调用静态属性。 即静态方法只能调用静态结构,非静态方法可调用静态结构和非静态结构。 注意点:静态方法中不能使用this关键字、super关键字构造方法不能用static修饰

  • 两者比较

    调用静态方法非静态方法
    yesno
    对象yesyes

应用

Q:在实际开发中,如何确定一个方法是否要声明为static呢?

A:

  • 当属性是static的,即操作静态属性的方法(如get(),set())通常声明为static。
  • 一些不需要创建对象,就能使用的方法(工具类中的方法),习惯上声明为static。如:Math、Arrays、Collections。

3. 修饰代码块

4. 修饰内部类