1.四種訪問控制符
PRivate、不指明、protected、public
2.構造函數沒有返回值
是因為構造函數默認返回的是類的實例對象。所以不需要寫返回值
3.static
static表示類擁有。實例:
public class A
{
public void a()
{
System.out.println("a");
}
public void b()
{
this.a(); }
}
這樣寫是沒有問題的,但是如果我們改一改,改成這樣:
public class A
{
public void a()
{
System.out.println("a");
}
public static void b()
{
this.a();
}
}
因為b()是類擁有,所以可以這樣訪問A.b(),但此時會出問題,因為b方法中用了this對象,但是從來就沒有創建過對象,所以根本就不存在this對象。
結論:靜態成員不能直接訪問非靜態成員
4.形參個數可變的方法要放在方法最后。例如:public void test(int a, String... s)
5.成員變量和局部變量
系統自動為成員變量分配內存空間,并在分配內存空間后,自動為成員變量指定初始值。
局部變量定義后,必須經過顯式初始化后才能使用,系統不會為局部變量執行初始化。
6.package、import、import static
實例:
package lee;
public class Hello
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
如果直接使用javac Hello.java命令來編譯這個文件,將會在當前路徑下生成一個Hello.class文件,而不會生成lee文件夾。
如果使用java -d Hello.java命令編譯,則會產生lee文件夾.
推薦編譯時總是使用-d選項
可以用import導入相應的包中的單個類,或全部類
可以用import static 導入指定類中單個或全部的靜態Field和方法。
7.類的繼承
關鍵字extends。
重寫父類方法,即子類重寫父類方法。
規則是:方法名相同、形參列表相同;子類方法返回值類型應比父類方法返回值類型更小或相等,子類方法聲明拋出的異常類應該比父類方法聲明拋出的異常類更小或相等;子類方法訪問權限應比父類方法訪問權限更大或相等。
如果需要在子類方法中調用父類被覆蓋的實例方法,則可使用super限定來調用父類被覆蓋的實例方法。
子類調用父類構造函數,使用super調用父類構造函數,必須出現在第一行
8.多態
java引用變量有兩個類型:編譯時類型、運行時類型
編譯時類型:指聲明變量明指定的類型
運行時類型:指給變量賦值時的類型
如果兩個類型不同,則稱為多態。實例:
class BaseClass
{
public int a = 6;
public void base()
{
System.out.println("父類的普通方法");
}
public void test()
{
System.out.println("父類的被覆蓋的方法");
}
}
public class SubClass extends BaseClass
{
public String a = "java";
public void test()
{
System.out.println("子類的覆蓋父類的方法");
}
public void sub()
{
System.out.println("子類的普通方法");
}
public static void main(String[] args)
{
BaseClass ploymophicBc = new SubClass();
System.out.println(ploymophicBc.book);
ploymophicBc.base();
ploymophicBc.test();
// ploymophicBc.sub(); 這里會出錯,因為BaseClass類沒有提供sub方法,所以下面代碼編譯時會出現錯誤
}
}
9.強制類型轉換
編寫java程序時,引用變量只能調用它編譯時類型的方法,而不能調用它運行時類型的方法,即使它實際所引用的對象確實包含該方法。如果需要讓這個引用變量調用它運行時類型的方法,則必須把它強制類型轉換成運行時類型,強制類型轉換需要借助于類型轉換運算符。
10.instanceof
instanceof運算符的前一個操作數通常是一個引用類型變量,后一個操作數通常是一個類(也可以是接口),它用于判斷前面的對象是否是后面的類,或者其子類、實現類的實例。如果是,則返回true,否則返回false.
通常先用instanceof判斷一個對象是否可以強制類型轉換,然后再進行強制類型轉換。
11.繼承與組合
繼承與組合同時都能滿足復用類的要求。到底是用繼承還是用組合呢?
繼承要表達的是一種“is-a"的關系,而組合表達的是"has-a"的關系。
12.初始化塊
[修飾符]{
...
}
修飾符只能是static。修飾符只在創建java對象時隱匿執行,而且在執行構造器之前執行。
普通的初始化塊、聲明實例Field指定的默認值都可認為是對象的初始化代碼,它們的執行順序與源程序中的排列順序相同。
靜態初始化塊,如果用static修飾初始化塊,則初始化塊成了靜態初始化塊,靜態初始化塊是屬于類的。
新聞熱點
疑難解答