Java初學第一天之Java中的類與物件
Java初學第一天之Java中的類與物件
類:類是對物件的抽象,也就是說類是同一類物件的總稱,這些物件具有相同的屬性和方法。
物件:物件就是一個具體的事物,Java作為面向物件的語言,可以說在Java中萬事萬物皆物件。物件本身具有自己的屬性和方法。
(感覺類與物件是Java這個語言貫穿始終的話題)
舉個簡單的例子:
學生這個概念就是一個類,在學生這個類裡面又涉及到小學生,中學生和大學生這些不同的物件。這個時候學生是類,大學生是物件。
但是大學生又可以分為理工科大學生,人文社科大學生,這個時候大學生又變成了類。所以類與物件這個概念可能在某一個維度上是可以共存的。(這裡又涉及到子類和父類的概念)
接下來先展示一下類的定義方法。
public class 類名{
訪問修飾符 型別名 屬性名 ;//可以設定多個屬性
//構造方法
訪問修飾符 構造方法名([資料型別 引數名]){
}
//普通方法
訪問修飾符 返回值型別 方法名(資料型別 引數名.......){
}
}
從程式碼可以看出,類是由屬性(可以是變數或者常量,或者兩者兼有)和方法組成;
類裡面的方法可以分為構造方法和普通方法。
Java中的方法的型別有以下幾種:
- 普通方法
- 構造方法
- 靜態方法(static修飾)
- 最終方法(final修飾)
構造方法
我們例項化一個物件的時候,通常使用的方法是這樣的:類名 物件名=new 類名();
構造方法的定義是這樣的:public 類名(引數型別 引數名…){ }
這裡的構造方法需要注意的幾個地方是:
1.如果類裡面沒有定義構造方法,我們一樣可以新建物件,這種情況下JVM會為每個類提供一個預設的無參的構造的方法。這點要證明也很容易,在類裡面在不寫任何的構造方法是可以正常的例項化物件的,如果寫了無參的構造方法JVM也不會報錯。
2.如果自己在類裡面定義了一個有參的構造方法,那麼JVM就不會再為類提供預設的無參構造器了。這點可以自己在一個類中定義一個有參的構造方法,然後在例項化得時候呼叫無參的構造方法,這時可以看到JVM會報錯。
3.構造方法的方法名必須和類名的相一致,而且構造方法是沒有返回值型別的。
構造方法的作用:
1.例項化物件(new關鍵字只是在記憶體中開闢了一個空間,而構造方法則把類的屬性和方法寫入到堆記憶體中,然後返回這段記憶體的首地址)
2.給屬性賦初始值
方法的過載
1.方法過載的條件:必須在同類或者是有繼承關係的類中;方法過載時方法的方法名必須完全相同,然後方法的引數必須不同,返回值的型別可以相同也可以不同。
2.什麼情況下需要用方法的過載呢?
普通方法的過載:可以想象生活中的這樣的例子,比如學習或者工作累我們有放鬆的方法,但是每個人的放鬆的方法都不一樣,比如:放鬆(旅遊);放鬆(玩遊戲);放鬆(睡覺)。
構造方法的過載:比如要生產兩種手機,一種是鍵盤機,一種是觸屏機,那麼在新建物件的時候就可以呼叫不同的構造方法來例項化這兩個不同的物件。
3.過載方法的呼叫:根據方法的引數來確定,引數不同就呼叫不同的方法。
這裡有一個需要注意的地方就是過載和重寫:
過載:在相同類或者有繼承關係的類中,方法的方法名相同,引數不同,用於處理不同型別的資料。
重寫(覆寫,覆蓋):在有繼承關係的類中,方法的方法名,引數,返回值都必須和被覆寫的方法一致。這時候新的方法就會覆蓋繼承的方法,所以叫方法的重寫或者覆寫。方法的重寫主要是用以實現和父類不一樣的功能。
this關鍵字
1、this關鍵字的用途:
在構造方法中,如果構造方法的引數名和類的屬性名一致時,使用this關鍵字表示當前類的屬性。如果不使用this關鍵字的話,Java會根據就進原則來給變數賦值,也就是把引數賦值給了引數,不會對類的屬性產生任何的影響。
this還可以呼叫當前類的方法,如呼叫構造方法:this(引數列表),呼叫普通方法:this.方法名(引數列表);
2、this關鍵字的表示的是誰?
this關鍵字表示的當前的物件,當前正在呼叫方法的物件,就是thsi關鍵字表示的物件。
Person p1=new Person();
this.tell();//就是表示p1這個物件呼叫tell方法。
Person p2=new Person();
this.tell();//這時候表示的就是p2這個物件。