蔡香满屋
站在牛顿头上吃苹果

static--特征修饰符,中文名叫做静态。被static修饰的有:变量,函数,内部类(注意:普通类是不允许声明为静态的,只有内部类才可以)

被static修饰的变量叫做类变量,为什么叫类变量呢?

答:静态变量在内存中只有一份存储空间,静态变量不属于某个实例对象,被一个类中的所有对象所共享,属于类,所以也叫类变量,可以直接通过类名来引用。

被static修饰的函数叫做类函数,被static修饰的内部类叫做静态内部类。

类变量的代码例子有:

private static int age;

类函数的代码例子有:

public static void eat() {}

静态内部类代码例子有:

public class OuterClass {
public static class InnerClass{
InnerClass(){
System.out.println("内部类InnerClass");
      }    
}
}
public class TestStaticClass {
public static void main(String[] args) {
// 不需要new一个OuterClass
new OuterClass.InnerClass();
}
}

   如果没有用static修饰InterClass,则只能按如下方式调用:需要先new 一个外部类实例

OuterClass oc = new OuterClass(); 
在使用外部类实例点内部类实例
oc.new InnerClass();
public class OuterClass {
      public class InnerClass{
          InnerClass(){
              System.out.println("============= 我是一个内部类'InnerClass' =============");
          }
      }
  }
 
 public class TestStaticClass {
     public static void main(String[] args) {
        // OutClass需要先生成一个实例,然后再new一个InnerClass();
         OuterClass oc = new OuterClass();
         oc.new InnerClass();
     }
 }

注:普通内部类的访问方式为 (外部类对象.new 内部类方法()

总结:

static关键字加载顺序问题:

1.静态变量和静态块的加载都是在类加载器加载完成以后加载到一块固定内存区

2.静态随着类的加载而加载。而且优先于对象存在

3.静态方法中不能使用this,super关键字,因为this代表对象,而静态方法存在时,有可能没有对象,所以this无法使用。

--------------------------------

记住:静态方法内部不能访问非静态变量,因为静态方法是在类加载器加载完成之后就加载到内存了,而非静态变量是要在对象创建时才加载到栈内存的。

 

posted on 2019-08-06 21:50  蔡香满屋  阅读(338)  评论(0)    收藏  举报