Java初學總結

來源:互聯網
上載者:User

1.對象的比較

  •    “==”操作符用於比較兩個對象的記憶體位址值是否相等
  •    equals() 方法用於比較兩個對象的內容是否一致

 如下列:

 1 public class text3 { 2  3     public static void main(String[] args) { 4         String str1 = new String("java"); 5         String str2 = new String("java"); 6         String str3 = str2; 7          8         if(str1 == str2) 9         {10             System.out.println("str1 == str2");11         }12         else13         {14             System.out.println("str1 != str2");15         }16         if(str2 == str3)17         {18             System.out.println("str2 == str3");19         }20         else21         {22             System.out.println("str2 != str3");23         }    24 25     }26 27 }

運行結果為:

str1 != str2str2 == str3

str1與str2的內容完全一樣,為什麼會不等於呢? 這兩個對象指向不同的記憶體空間,所以它們的記憶體位址是不一樣的。用“==”比較的是記憶體位址值。

如要比較內容,可用“equals”。

 1 public class text3 { 2  3     public static void main(String[] args) { 4         String str1 = new String("java"); 5         String str2 = new String("java"); 6         String str3 = str2; 7          8         if(str1.equals(str2))    9         {10             System.out.println("str1 == str2");11         }12         else13         {14             System.out.println("str1 != str2");15         }16         if(str2.equals(str3))17         {18             System.out.println("str2 == str3");19         }20         else21         {22             System.out.println("str2 != str3");23         }    24 25     }26 27 }

運行結果為:

str1 == str2str2 == str3

 2.兩種String對象的聲明方式到底有什麼不同?

        String str1 = new String("java");

        String str2 = "java";

如下例:

 1 public class text3 { 2  3     public static void main(String[] args) { 4         String str1 = "java"; 5         String str2 = new String("java"); 6         String str3 = "java"; 7                  8         System.out.println("str1 == str2 ? -->"+(str1 == str2)); 9         System.out.println("str1 == str3 ? -->"+(str1 == str3));10         System.out.println("str3 == str2 ? -->"+(str3 == str2));11         12     }13 }

運行結果:

str1 == str2 ? -->falsestr1 == str3 ? -->truestr3 == str2 ? -->false

str1與str3相等,則證明str1與str3是指向同一個記憶體空間的。

String對象的內容一旦聲明則不能輕易改變。

如果想改變一個String對象的值,則第一步要做的是先將原有的String引用斷開,之後再開闢新的記憶體空間。

用new關鍵字開闢String對象的記憶體空間的話,則實際上就開闢了兩個記憶體空間。

3.類對象的產生

格式:

類名  對象名 = new 類名();

建立屬於某類的對象,需要通過如下兩個步驟來實現:

  1. 聲明指向“由類所建立的對象”的變數
  2. 利用new建立新的對象,並指派給先前所建立的變數

舉例:建立Person類的對象

Person p;                    //先聲明一個Person類的對象pp = new Person();     //用new關鍵字執行個體化Person的對象p

當然也可以用如下方式來聲明變數:

Person p = new Person() ;     // 聲明Person對象p並直接執行個體化此對象

      對象只有在執行個體化之後才能被使用,而執行個體化對象的關鍵字就是new。

4.訪問對象中某個變數或方法

訪問屬性:   對象名稱。屬性名稱存取方法:   對象名稱。方法名()

如:想訪問Person類中的name和age屬性

p.name;        //訪問Person類中的name屬性p.age;            //訪問Person類中的age屬性

5.類的屬性封裝(private)

要設定或取得屬性值,則只能用setXxx()getXxx()方法,這是一個明確且標準的規定。

封裝類中的屬性或方法:

封裝屬性:  private 屬性類型 屬性名稱封裝方法:  private 方法傳回型別  方法名稱(參數)

加入一些setXxx()getXxx()方法,主要用來設定和取得類中的私人屬性,解決封裝問題,如下列:

 1 class Person 2         { 3             private String name; 4             private int age; 5             void talk() 6             { 7                 System.out.println("wo shi:  "+name+", jinnian: "+age+"sui"); 8             } 9             10             public void setName(String str)11             {12                 name = str;13             }14             15             public void setAge(int a)16             {17                 if(a > 0)18                     age = a;19             }20             21             public String getName()22             {23                 return name;24             }25             26             public int getAge()27             {28                 return age;29             }30         }31         32 public class text17 {33 34     public static void main(String[] args) {35         36         Person p = new Person();37         p.setName("zhang san");38         p.setAge(-25);39         p.talk();40 41     }42     43 }

運行結果:

wo shi:  zhang san, jinnian: 0sui

 6.內部類

定義內部類的格式:

標示符  class  外部類的名稱{     //外部類的成員     標示符  class  內部類的名稱    {          //內部類的成員    }   }

外部類是無法找到內部類中所聲明的屬性,而內部類則可以訪問外部類的屬性。

用static聲明的內部類則變成外部類,但是用static聲明的內部類不能訪問非static的外部類屬性。(《Java基礎教程》P193)

 7.類的繼承

類的繼承格式:

class  父類                 //定義父類{}class  子類  extends  父類   // 用extends關鍵字實作類別的繼承{}

在java中只允許單繼承,不允許多重繼承,也就是說一個子類只能有一個父類,但java中卻允許多層繼承

多層繼承如:

class A{}class  B  extends  A{}class  C  extends  B{}

子類對象在執行個體化時會預設先去調用父類中的無參構造方法,之後再調用本類中的相應構造方法。

 

super 主要的功能是完成子類調用父類中的內容,也就是調用父類中的屬性或方法

用super調用父類中的構造方法,只能放在程式的第一行。

super調用屬性或方法:

super.父類中的屬性;super.父類中的方法();

8.this與super的比較

this

  • 1.表示當前對象
  • 2.調用本類中的方法或屬性
  • 3.調用本類中的構造方法時,放在程式首行

super

  • 1.子類調用父類的方法或屬性
  • 2.調用父類中的構造方法時,放在程式首行

從上表中發現,用super或this調用構造方法時都需要放在首行。所以,super與this調用構造方法的操作時不能同時出現的

9.抽象類別定義規則

  • 抽象類別和抽象方法都必須用abstract關鍵字來修飾
  • 抽象類別不能被執行個體化,也就是不能用new關鍵字去產生對象
  • 抽象方法只需聲明,而不需實現
  • 含有抽象方法的類必須被聲明為抽象類別,抽象類別的子類必須複寫所有的抽象方法後才能被執行個體化,否則這個子類還是個抽象類別

10.final關鍵字

在Java中聲明類、屬性和方法時,可使用關鍵字final來修飾。

  • final標記的類不能被繼承。
  • final標記的方法不能被子類複寫。
  • final標記的變數(成員變數或局部變數)即為常量,只能賦值一次。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.