1、修飾符 訪問修飾符:(局部變量不需要修飾符,沒有意義,因為范圍只在代碼塊當中) PRivate 屬性 方法 構造方法 (default)屬性 方法 構造方法 類 protected 屬性 方法 構造方法 public 屬性 方法 構造方法 類
static 靜態的 1)屬性 類變量 全類公有 允許直接用類名訪問,與對象無關。 類加載:當JVM第一次使用一個類時,需要通過ClassPath找到這個類對應的.class文件,把這個文件中包含的類的信息讀入JVM并保存起來。一般來說,一個類只會加載一次。 類變量是在類加載的時候分配空間,并且初始化。 類加載的時機: a.創建類的對象 b.訪問類的靜態成員 c.加載子類必須先加載父類 d.如果是僅僅是聲明類的引用,是不會加載的。 2)方法 靜態方法 允許用類名調用 在靜態方法中,只能訪問類的靜態成員。 父類的靜態方法,只能被子類的靜態方法覆蓋。 靜態方法可以被子類的靜態方法覆蓋,而且沒有多態。 對引用調用其靜態方法,僅相當于對引用類型調用靜態方法。 3)初始代碼塊 靜態初始化代碼塊,在類加載的時候執行一次 下面初始代碼塊
{ System.out.println("hh"); }靜態初始代碼塊
static{ System.out.println("hh");}HH只打印一次
package chp7;public class TestStaticInit{ public static void main(String[] args){ new MyClass(); new MyClass(); }}class MyClass{static{ System.out.println("hh");}public MyClass(){ System.out.println("MyClass()"); }}static int b=20; //不是實例變量,是類變量 實例變量是創建對象,分配空間時有的。 類變量,是在類加載時有的。 什么是類加載?
package chp7;public class TestStatic{ public static void main(String[] args){ MyClass mc1=new MyClass(); MyClass mc2=new MyClass(); mc1.a++; mc1.b++; System.out.println(mc2.a); System.out.println(mc2.b); System.out.println(MyClass.b); MyClass.print();}}class MyClass{ int a=10; static int b=20; public static void print(){ // System.out.println(a);error; MyClass c=new MyClass(); System.out.println(c.a); System.out.println(b); System.out.println("11"); }}final final 變量:(實例變量、局部變量、類變量) 常量 一旦賦值 不能改變了 對于final屬性 系統不會提供默認值 如果final實例變量 可以再初始化屬性或是構造方法中賦值。
方法:該方法不能被子類覆蓋 類:該類不能被子類繼承
一個類是final類中所有方法都是默認final方法 final在java中非常最重要的作用: 使用最多的類 String類 體現final
abstract 學習接口的鋪墊 類:抽象類 方法:抽象方法
子類繼承抽象類,如果子類不希望也成為抽象類,就必須實現父類中聲明的所有抽象方法。
利用abstract,可以把方法聲明抽象到父類中,而方法實現留在子類,更好的體現”共性放在父類”原則! private static final 均不能和abstract聯用。
新聞熱點
疑難解答