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沒法使用。
--------------------------------
記住:靜態方法內部不能訪問非靜態變量,由於靜態方法是在類加載器加載完成以後就加載到內存了,而非靜態變量是要在對象建立時才加載到棧內存的。