static--特征修饰符,中文名叫作静态。被static修饰的有:变量,函数,内部类(注意:普通类是不容许声明为静态的,只有内部类才能够)java
被static修饰的变量叫作类变量,为何叫类变量呢?函数
答:静态变量在内存中只有一份存储空间,静态变量不属于某个实例对象,被一个类中的全部对象所共享,属于类,因此也叫类变量,能够直接经过类名来引用。this
被static修饰的函数叫作类函数,被static修饰的内部类叫作静态内部类。spa
类变量的代码例子有:code
private static int age;对象
类函数的代码例子有:blog
public static void eat() {}内存
静态内部类代码例子有:class
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没法使用。
--------------------------------
记住:静态方法内部不能访问非静态变量,由于静态方法是在类加载器加载完成以后就加载到内存了,而非静态变量是要在对象建立时才加载到栈内存的。