static关键字可以用于四种场景:

1.static 修饰成员变量 和 成员方法;

2.static构成静态代码块;

3.static 修饰类(修饰内部类);

4.静态导包(待学,待更);

 

1. static 修饰成员变量 和 成员方法

  1.1 static 修饰成员变量

    ① static修饰的成员变量,不再属于对象自己,而是属于所在类class,使得多个对象共享一份数据,在内存中只有一个副本(存放于方法区中);

     ② 成员方法可以访问成员变量和静态变量;

     ③ 静态变量只有在类初始加载时会被初始化,且初始化的顺序按照定义的顺序进行;

    ④ 静态变量的使用场景:[1] 作为共享变量使用,通常和final关键字一起使用;

                     如: private static final int SIZE = 100;

                     [2] 减少对象的创建;

  1.2 static 修饰成员方法

    ① 静态方法可以访问静态变量和静态成员方法;

       静态方法不能直接访问非静态变量和非静态成员方法;

       静态方法中不能使用this关键字;(静态方法不依附于任何对象)

    ② 内存中,先有静态内容,后有非静态内容。

    ③ 推荐调用格式:类名.静态变量名;

                类名.静态方法名();

    ④ 静态方法的使用场景

2. static构成静态代码块

  ① 静态代码块的格式:

public class 类名称 {
                     static {
                          // 静态代码内容
                       }
                   }

    ② 当第一次用到本类时,静态代码块只会执行一次;

      静态内容总是优先于非静态,所以静态代码块比构造方法先执行。

    ③ 静态代码块的使用场景:用来一次性地对静态成员变量进行赋值。 

3. static 修饰类(修饰内部类 )

  ① 静态内部类的格式:public static class 内部类名称{

                    }

  ② 静态内部类可以直接调用外部类的静态变量和方法;

   静态内部类可以通过创建外部类实例的方法调用外部类的非静态变量和方法;

  ③ 外部类可以通过创建静态内部类实例的方法来调用静态内部类的非静态变量和方法

   外部类可以直接通过“外部类.内部类.变量名/方法名()”的方式直接调用静态内部类中的静态变量和方法

  ④ 在外部类创建静态内部类实例:内部类名称 对象名称 = new 内部类名称();

    非外部类:外部类名称.内部类名称 对象名 = new 外部类名称.内部类名称(); 

4.静态导包(待学,待更)

    import static 包名;

 

备注1:代码部分待更新!

备注2:学习过程中难免会出现很多错误,请大家指教!有问题可以直接评论我,谢谢!