1、static的使用

当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过 new 关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。
我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份。

例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。

  1. static 关键字的使用
  2. 1.static:静态的。
  3. 2.static 可以用来修饰:属性、方法、代码块、内部类。

1.1、使用 static 修饰属性:静态变量(或类变量)。

1.1.1、属性:是否使用 static 修饰,又分为:静态属性 VS 非静态属性(实例变量)

非静态变量:
我们创建了类的多个对象,每个对象都独立的拥有了一套类中的非静态属性。当修改其中一个非静态属性时,不会导致其他对象中同样的属性值的修饰。
静态变量:
我们创建了类的多个对象,多个对象共享同一个静态变量。当通过静态变量去修改某一个变量时,会导致其他对象调用此静态变量时,是修改过的。

1.1.2、static 修饰属性的其他说明

  • 静态变量随着类的加载而加载。可以通过”类.静态变量”的方式进行调用。
  • 静态变量的加载要早于对象的创建。
  • 由于类只会加载一次,则静态变量在内存中也只会存在一次。存在方法区的静态域中。

    1.2、static 修饰方法

    1.2.1、使用 static 修饰方法:静态方法

  • 随着类的加载而加载,可以通过”类.静态方法”的方式调用

  • 静态方法中,只能调用静态的方法或属性。非静态的方法中,可以调用所有的方法或属性

    1.3、static 注意点:

  • 在静态的方法内,不能使用 this 关键字、super 关键字

  • 关于静态属性和静态方法的使用,大家从生命周期的角度去理解。

1.4、开发中,如何确定一个属性是否需要声明 static 的?

  • 属性是可以被多个对象所共享的,不会随着对象的不同而不同的。
  • 类中的常量也常常声明为 static

    1.5、开发中,如何确定一个方法是否要声明为 static 的?

  • 操作静态属性的方法,通常设置为 static 的

  • 工具类中的方法,习惯上声明为 static 的。比如:Math、Arrays、Collections