答:在 Java 語言中,類主要是由方法和變量兩部分組成。java
答:類是一個抽象的概念,是對某一事物的描述;而對象是類的實例,是實實在在存在的個體。好比,「人」就是一個類(一個概念),而老王就是實實在在的一個「對象」。編程
答:Java 中只能單繼承,但能夠實現多接口。ide
答:從技術的實現角度來講,是爲了下降編程的複雜性。假設 A 類中有一個 m() 方法,B 類中也有一個 m() 方法,若是 C 類同時繼承 A 類和 B 類,那調用 C 類的 m() 方法時就會產生歧義,這無疑增長了程序開發的複雜性,爲了不這種問題的產生,Java 語言規定不能多繼承類,但能夠實現多接口。函數
答:覆蓋和重載的區別以下:this
A:方法的參數類型不一樣 B:方法的返回值不一樣 C:方法的參數個數不一樣 D:方法的參數順序不一樣線程
答:Bcode
答:由於在方法調用時,若是不指定類型信息,編譯器就不知道你要調用哪一個方法了。好比,如下代碼:對象
float max(int x,int y); int max(int x,int y); // 方法調用 max(1,2);
由於 max(1,2)
沒有指定返回值,編譯器就不知道要調用哪一個方法了。繼承
答:構造方法的特徵以下:接口
答:構造函數能夠重載,但不能覆蓋。
A:類中的構造方法不能忽略 B:構造方法能夠做爲普通方法被調用 C:構造方法在對象被 new 時被調用 D:一個類只能有一個構造方法
答:C
class ExecTest { public static void main(String[] args) { Son son = new Son(); } } class Parent{ { System.out.print("1"); } static{ System.out.print("2"); } public Parent(){ System.out.print("3"); } } class Son extends Parent{ { System.out.print("4"); } static{ System.out.print("5"); } public Son(){ System.out.print("6"); } }
答:打印的結果是:251346
加載順序以下:
class A { public int x = 0; public static int y = 0; public void m() { System.out.print("A"); } } class B extends A { public int x = 1; public static int y = 2; public void m() { System.out.print("B"); } public static void main(String[] args) { A myClass = new B(); System.out.print(myClass.x); System.out.print(myClass.y); myClass.m(); } }
答:打印的結果是:00B
題目解析:在 Java 語言中,變量不能被重寫。
class A { public void m(A a) { System.out.println("AA"); } public void m(D d) { System.out.println("AD"); } } class B extends A { @Override public void m(A a) { System.out.println("BA"); } public void m(B b) { System.out.println("BD"); } public static void main(String[] args) { A a = new B(); B b = new B(); C c = new C(); D d = new D(); a.m(a); a.m(b); a.m(c); a.m(d); } } class C extends B{} class D extends B{}
答:打印結果以下。
BA BA BA AD
題目解析:
答:this 和 super 都是 Java 中的關鍵字,起指代做用,在構造方法中必須出如今第一行,它們的區別以下。
答:在靜態方法中不能使用 this 或 super,由於 this 和 super 指代的都是須要被建立出來的對象,而靜態方法在類加載的時候就已經建立了,因此沒辦法在靜態方法中使用 this 或 super。
答:靜態方法的使用須要注意如下兩個問題:
答:final 修飾符做用以下:
答:Oracle 官方的文檔對於 equals() 重寫制定的規則以下。
此題目不要求記憶,能知道大概便可,屬於加分項題目。
答:notify() 方法隨機喚醒一個等待的線程,而 notifyAll() 方法將喚醒全部在等待的線程。
答:若是是同一個類中使用的話,只須要實現 Cloneable 接口,定義或者處理 CloneNotSupportedException 異常便可,請參考如下代碼:
class CloneTest implements Cloneable { int num; public static void main(String[] args) throws CloneNotSupportedException { CloneTest ct = new CloneTest(); ct.num = 666; System.out.println(ct.num); CloneTest ct2 = (CloneTest) ct.clone(); System.out.println(ct2.num); } }
若是非內部類調用 clone() 的話,須要重寫 clone() 方法,請參考如下代碼:
class CloneTest implements Cloneable { int num; public static void main(String[] args) throws CloneNotSupportedException { CloneTest ct = new CloneTest(); ct.num = 666; System.out.println(ct.num); CloneTest ct2 = (CloneTest) ct.clone(); System.out.println(ct2.num); } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } public class CloneTest2 { public static void main(String[] args) throws CloneNotSupportedException { CloneTest ct = new CloneTest(); ct.num = 666; System.out.println(ct.num); CloneTest ct2 = (CloneTest) ct.clone(); System.out.println(ct2.num); } }