1. 程式人生 > >Java中Static Class及靜態內部類和非靜態內部類與靜態導包

Java中Static Class及靜態內部類和非靜態內部類與靜態導包

上次有朋友問我,java中的類可以是static嗎?我給他肯定的回答是可以的,在java中我們可以有靜態例項變數、靜態方法、靜態塊。當然類也可以是靜態的,下面小編整理了些關於java中的static class相關資料分享在指令碼之家平臺供大家參考

java中的類可以是static嗎?答案是可以。在java中我們可以有靜態例項變數、靜態方法、靜態塊。類也可以是靜態的。

java允許我們在一個類裡面定義靜態類。比如內部類(nested class)。把nested class封閉起來的類叫外部類。在java中,我們不能用static修飾頂級類(top level class)。只有內部類可以為static。

     靜態內部類和非靜態內部類之間到底有什麼不同呢?下面是兩者間主要的不同。

    (1)內部靜態類不需要有指向外部類的引用。但非靜態內部類需要持有對外部類的引用。

    (2)非靜態內部類能夠訪問外部類的靜態和非靜態成員。靜態類不能訪問外部類的非靜態成員。他只能訪問外部類的靜態成員。

    (3)一個非靜態內部類不能脫離外部類實體被建立,一個非靜態內部類可以訪問外部類的資料和方法,因為他就在外部類裡面。

基於上面的討論,我們可以通過這些特性讓程式設計更簡單、有效。

/* 下面程式演示如何在java中建立靜態內部類和非靜態內部類 */
class OuterClass{
  private static String msg = "GeeksForGeeks";
  // 靜態內部類
  public static class NestedStaticClass{
    // 靜態內部類只能訪問外部類的靜態成員
    public void printMessage() {
     // 試著將msg改成非靜態的,這將導致編譯錯誤 
     System.out.println("Message from nested static class: " + msg); 
    }
  }
  // 非靜態內部類
  public class InnerClass{
    // 不管是靜態方法還是非靜態方法都可以在非靜態內部類中訪問
    public void display(){
     System.out.println("Message from non-static nested class: "+ msg);
    }
  }
} 
class Main
{
  // 怎麼建立靜態內部類和非靜態內部類的例項
  public static void main(String args[]){
    // 建立靜態內部類的例項
    OuterClass.NestedStaticClass printer = new OuterClass.NestedStaticClass();
    // 建立靜態內部類的非靜態方法
    printer.printMessage();  
    // 為了建立非靜態內部類,我們需要外部類的例項
    OuterClass outer = new OuterClass();    
    OuterClass.InnerClass inner = outer.new InnerClass();
    // 呼叫非靜態內部類的非靜態方法
    inner.display();
    // 我們也可以結合以上步驟,一步建立的內部類例項
    OuterClass.InnerClass innerObject = new OuterClass().new InnerClass();
    // 同樣我們現在可以呼叫內部類方法
    innerObject.display();
  }
}


以上內容是小編給大家介紹Java中Static Class的相關資料,希望對大家學習java中的static class有所幫助。

靜態匯入Static import(靜態導包)


要使用靜態成員(方法和變數)我們必須給出提供這個靜態成員的類。

  使用靜態匯入可以使被匯入類的靜態變數靜態方法在當前類直接可見,使用這些靜態成員無需再給出他們的類名。

  靜態匯入也是JDK5.0引入的新特性,下面以例項來說明靜態匯入的用法:

  比如先在一個包中定義一個這樣的類:

複製程式碼
package com.example.learnjava;

public class Common
{

    
public static final int AGE = 10; public static void output() { System.out.println("Hello World!"); } }
複製程式碼


  在另一個包中使用時,如果不用靜態匯入,是這樣用的:

複製程式碼
package com.example.learnjava2;

import com.example.learnjava.Common;

public class StaticImportTest
{
    public static void main(String[] args)
    {
        int a = Common.AGE;
        System.out.println(a);
        
        Common.output();
    }

}
複製程式碼


  前面加入了匯入語句,將Common類匯入,使用其中的靜態成員變數和靜態方法時需要加上類名

使用靜態匯入

  靜態匯入的語法是:

  import static 包名.類名.靜態成員變數;

  import static 包名.類名.靜態成員函式;

  注意匯入的是成員變數和方法名。

  如前面的程式使用靜態匯入後:

複製程式碼
package com.example.learnjava2;

import static com.example.learnjava.Common.AGE;
import static com.example.learnjava.Common.output;

public class StaticImportTest
{
    public static void main(String[] args)
    {
        int a = AGE;
        System.out.println(a);
        
        output();
    }

}
複製程式碼

缺點

  過度地使用靜態匯入會在一定程度上降低程式碼的可讀性。