關於Java中的final,static

final

  • 修飾屬性、方法、類
  • 修改屬性:值不能更改(常量)
  • 修飾方法:方法不能重寫(繼承中子類不能重寫父類中被final修飾的成員方法)
  • 修飾類:類不能被繼承
  • 被final修飾的屬性:要不顯示賦值,要不構造方法賦值
    //錯誤:final修飾的屬性/變量不能被修改
    class Test {
      final int PI = 3.1415926;  
      public Test(int pi){
        this.PI = pi;
      }
    }
    
  • 面試題:
    • 構造方法能不能被final修飾?(不允許)
    • final abstract能不能同時修飾一個類?(不能)

static

  • 修飾:屬性、一般方法、遊離塊、內部類
  • 面試題:能不能修飾外部類和局部變量?(不能)
  • 修飾屬性:靜態屬性/類變量
  • 修飾方法:靜態方法
  • static修飾的成員變量不屬於對象的數據結構
  • static成員變量和類的信息放在一起,僅保留一份,用於共享,而不是在堆中保留在每個對象裏的多個副本
  • 被static修飾的屬性和方法可以用類名字直接調用,可以不創建對象。不過,對象也可以直接調用
  • 靜態方法裏不能使用非靜態屬性。(eg:main函數不能直接使用本類中的非靜態的成員變量)
  • static遊離塊在類加載的就被執行,且只執行一次
  • 同時被final,static修飾的是常量,必須聲明的同時初始化,不可被改變(在編譯時就被指定具體值)
  • static參與的程序執行次序
  • 面試題
    class Test {
        // Test example = new Test();
        static Test example = new Test();
    
        public Test() {
            System.out.println("lalala");
        }
    
        public static void main(String[] args) {
            Test test = new Test();
        }
    }
    // 不加static修飾,程序就存在遞歸
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章