【Java要點】4. 內部類、eclipse快捷鍵、Object類的常見方法

轉發請在文章中提供本文的鏈接,謝謝!

一、 內部類

1.1 內部類概述

*在java中,可以將一個類定義在另一個類裏面或者一個方法裏面,這樣的類稱爲內部類。內部類一般來說包括這四種:①成員內部類、②局部內部類、③匿名內部類和④靜態內部類。

*內部類可以直接訪問外部類的成員,包括私有成員變量和私有成員方法。

*成員內部類是依附外部類而存在的,外部類要訪問內部類的成員,必須創建相應的對象。

1.2 成員內部類

*成員內部類位於另一個類的內部。

*內部類可以擁有private訪問權限、protected訪問權限、public訪問權限及包訪問權限。

*創建成員內部類對象的一般形式爲:  外部類類名.內部類類名 xxx = 外部類對象名.new 內部類類名()

class Circle {//外部類
    private double radius = 0;
 
    public Circle(double radius) {
        this.radius = radius;
        getDrawInstance().drawSahpe();   //必須先創建成員內部類的對象,再進行訪問
    }
     
    private Draw getDrawInstance() {//獲得內部類的一個實例
        return new Draw();
    }
     
    class Draw {     //內部類
        public void drawSahpe() {
            System.out.println(radius);  //外部類的private成員
        }
    }
}

1.3 局部內部類

*局部內部類是定義在一個作用域裏面的類,它和成員內部類的區別在於局部內部類的訪問僅限於該作用域內。

*局部內部類就像是方法裏面的一個局部變量,不能有public、protected、private以及static修飾符。

 *局部內部類要想訪問局部變量,那麼這個局部變量必須用final修飾。

class People{
}
 
class Man{
    public Man(){
         
    }
     
    public People getWoman(){
        class Woman extends People{   //局部內部類
            int age =0;
        }
        return new Woman();
    }
}

1.4 匿名內部類

*匿名內部類本質上就是內部類的簡化寫法。

*前提:使用匿名內部類時,我們必須是繼承一個類或者實現一個接口,但是兩者不可兼得,同時也只能繼承一個類或者實現一個接口。

*匿名內部類中是不能定義構造函數的。

*匿名內部類不能是抽象的,它必須要實現繼承的類或者實現的接口的所有抽象方法。

class Demo{
	public static void main(String[] args) {
		Outer o = new Outer();
		o.method();
	}
}

interface Inter {
	public void show1();
	public void show2();
}
//匿名內部類只針對重寫一個方法時候使用
class Outer {
    public void method() {
	    new Inter(){
		    public void show1() {
		    	System.out.println("show1");
		    }

		    public void show2() {
			    System.out.println("show2");
		    }
	    }.show1();


		Inter i = new Inter(){
			public void show1() {
				System.out.println("show1");
			}

			public void show2() {
				System.out.println("show2");
			}

			/*public void show3() {
				System.out.println("show3");
			}*/
		};

		i.show1();
		i.show2();
		//i.show3();						//匿名內部類是不能向下轉型的,因爲沒有子類類名
	}
}

1.5 靜態內部類

*靜態內部類也是定義在另一個類裏面的類,只不過在類的前面多了一個關鍵字static。靜態內部類是不需要依賴於外部類的。

*創建靜態內部類對象的一般形式爲:  外部類類名.內部類類名 xxx = new 外部類類名.內部類類名()

class Demo1_InnerClass {
	public static void main(String[] args) {
		//外部類名.內部類名 對象名 = 外部類名.內部類對象;
		Outer.Inner oi = new Outer.Inner();
		oi.method();

		Outer.Inner2.print();
	}
}

class Outer {
	static class Inner {
		public void method() {
			System.out.println("method");
		}
	}

	static class Inner2 {
		public static void print() {
			System.out.println("print");
		}
	}
}

注:這裏講的比較簡略,有關內部類的詳細介紹請參考鏈接https://www.cnblogs.com/dolphin0520/p/3811445.html


二、 Eclipse中快捷鍵

* A:新建 ctrl + n
* B:格式化  ctrl+shift+f
* C:導入包  ctrl+shift+o 
* D:註釋  ctrl+/,ctrl+shift+/,ctrl+shift+\
* E:代碼上下移動 選中代碼alt+上/下箭頭
* F:查看源碼  選中類名(F3或者Ctrl+鼠標點擊)
* G:查找具體的類 ctrl + shift + t
* H:查找具體類的具體方法 ctrl + o
* I:給建議 ctrl+1,根據右邊生成左邊的數據類型,生成方法
* J:刪除代碼 ctrl + d
* K:抽取方法alt + shift + m 
* L:改名alt + shift + r 

*M:Alt+/ 起提示作用

*N:alt + shift + s 自動生成指定方法


三、Object類

3.1 Object類概述

*Object類是類層次結構的根類,所有類都直接或者間接的繼承自該類。

3.2 Object類的hashCode()方法

* 聲明方法:public int hashCode();
* 該方法返回該對象的哈希碼值。默認情況下,該方法會根據對象的地址來計算
* 不同對象的hashCode()一般來說不會相同。但是,同一個對象的hashCode()值肯定相同。

3.3 Object類的getClass()方法

*聲明方法:public final Class getClass();

*返回此 Object 的運行時類Class。

*可以通過Class類中的一個方法public String getName(),獲取對象的真實類的全名稱。    
3.4 Object類的toString()方法

*聲明方法:public String toString()
*該方法返回該對象的字符串表示,調用System.out.println方法對該對象進行打印時,會默認調用該方法。
* 如果不重寫該方法的話,其默認的值等於: 
    getClass().getName() + "@" + Integer.toHexString(hashCode()) 
* 一般建議重寫該方法。

3.5 Object類的equals()方法

*指示其他某個對象是否與此對象“相等”。

*默認情況下比較的是對象的引用是否相同。

*一般建議重寫該方法。

*與==的區別:==是一個比較運算符號,既可以比較基本數據類型,也可以比較引用數據類型,基本數據類型比較的是值,引用數據類型比較的是地址值;

equals方法是一個方法,只能比較引用數據類型,所有的對象都會繼承Object類中的方法,如果沒有重寫Object類中的equals方法,equals方法和==號比較引用數據類型無區別,重寫後的equals方法一般比較的是對象中的屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章