轉發請在文章中提供本文的鏈接,謝謝!
一、 內部類
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方法一般比較的是對象中的屬性。