static關鍵字修飾類


java里面static一般用來修飾成員變量或函數。但有一種特殊用法是用static修飾內部類,普通類是不允許聲明為靜態的,只有內部類才可以。

被static修飾的內部類可以直接作為一個普通類來使用,而不需實例一個外部類(見如下代碼):

需要注意的是當一個內部類沒有使用static修飾的時候,是不能直接使用內部類創建對象,須要先使用外部類對象點new內部類對象及(外部類對象.new 內部類())

public class OuterClass {
 2     public static class InnerClass{
 3         InnerClass(){
 4             System.out.println("============= 我是一個內部類'InnerClass' =============");
 5         }
 6     }
 7 }
 8 
 9 
10 public class TestStaticClass {
11     public static void main(String[] args) {
12         // 不需要new一個InnerClass
13         new OuterClass.InnerClass();
14     }
15 }

如果沒有用static修飾InterClass,則只能按如下方式調用:需要先new 一個外部類實例

OuterClass oc = new OuterClass(); 在使用外部類實例點內部類實例
oc.new InnerClass();
package inner_class;
 2 
 3 public class OuterClass {
 4     public class InnerClass{
 5         InnerClass(){
 6             System.out.println("============= 我是一個內部類'InnerClass' =============");
 7         }
 8     }
 9 }
10 
11 public class TestStaticClass {
12     public static void main(String[] args) {
13         // OutClass需要先生成一個實例,然后再new一個InnerClass();
14         OuterClass oc = new OuterClass();
15         oc.new InnerClass();
16     }
17 }

 注意:如果內部類沒事有使用static 修飾,是不能創建實例的回報錯 入下圖代碼所示

public class SyncDubbo2 {

    static class Main {
        public int i = 10;
        public synchronized void operationSup(){
            try {
                i--;
                System.out.println("Main print i = " + i);
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
     class Sub extends Main { //沒有使用static修飾的內部類不能直接創建對象 public synchronized void operationSub(){
            try {
                while(i > 0) {
                    i--;
                    System.out.println("Sub print i = " + i);
                    Thread.sleep(100);        
                    this.operationSup();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    public static void main(String[] args) {
        
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {  
                Sub sub = new Sub(); //此處內部類沒用static修飾會報錯誤The value of the local variable sub is not used
                                     //沒有使用static修飾的內部類不能直接創建對象
} }); t1.start(); } }

 

 
        
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM