static用法理解

修饰成员变量

修饰类的属性,让其成为类的成员属性
在创建对象时,非static变量保存在堆中,每个对象独立存在,非static变量有各自的取值,不会相互影响;而static变量则保存在静态存储区,只有在第一次创建某个类的对象时会初始化,后期创建该类的其他对象时不会重新初始化,所有对象共享一个static变量,作用相当于全局变量

修饰成员方法

修饰类的方法,让其成为类的成员方法
相比于修饰成员变量,修饰成员方法对于数据的存储没有多大变化,其最大的作用是,不需要创建对象就可以调用类中的方法,即使用“类名.方法名”的方式操作方法,避免了先要new出对象的繁琐和资源消耗
但static方法中不能使用非static变量和方法

静态块

当初始化static修饰的变量时,可以将它们统一放在一个以static开始,用花括号包裹起来的块状语句中,使程序更规整(需理解对象的初始化过程)

静态导包

不同于非static导入,采用static导入包后,在不与当前类的方法名冲突的情况下,无需使用“类名.方法名”的方法去调用类方法了,直接可以采用”方法名”去调用类方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* PrintHelper.java文件 */
package com.dotgua.study;
public class PrintHelper {
public static void print(Object o) {
System.out.println(o);
}
}

/* App.java文件 */
import static com.dotgua.study.PrintHelper.*;
public class App {
public static void main( String[] args ) {
print("Hello World!");
}
/**Output
* Hello World!
*///~
}

注意事项

static的特点:

  1. 随着类的加载而被加载
  2. 优先于对象存在
  3. 被所有对象共享

static的生命周期:

  1. 类变量周期生命最长,随着类的消失而消失
  2. 实例变量生命周期比类变量短,它是随着对象的消失而消失

static方法:

  1. 静态的方法只能访问静态的成员
  2. 非静态得方法即能访问静态得成员(成员变量,成员方法)又能访问非静态得成员
  3. 局部变量不能被static修饰
  4. 静态得方法中是不可以定义this、super关键字的,因为静态优先于对象存在

参考文章

java中static用法理解

《Java编程思想》