程式猿們,你們真的懂“物件”嗎?
知道JAVA程式設計師和C程式設計師的差別嗎?食堂裡,吃完飯就走的是JAVA程式設計師,吃完飯還要自己收拾的那就是是C程式設計師。至於為什麼會這樣,大家都明白(因為JAVA自帶垃圾回收機制,C需要手動釋放記憶體)←這就是原因。
你懂Java的物件嗎?不懂小編告訴你,Hhhh~
首先,Java作為一種面嚮物件語言。
支援以下基本概念:
多型
繼承
封裝
抽象
類
物件
例項
方法
過載
物件: 物件是類的一個例項(物件不是找個女朋友),有狀態和行為。例如,一條狗是一個物件,它的狀態有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
類: 類是一個模板,它描述一類物件的行為和狀態。

物件的建立
物件的建立: 類名 物件名=new 類名();也許大多數學習java的都會寫,但是理解方面是這樣的。
new一個類名,就會得到一個物件,而這個物件的型別就是這個類名的型別
比如說:Car car=new Car();//就是通過 new一個 Car 類名,得到 car 這個物件,而這個物件就是 Ca r型別的。

類的使用
類必須先定義才能使用。類是建立物件的模板,建立物件也叫類的例項化。
package com.cnblogs;//定義包的格式,關鍵詞package,包的名字最規範的格式是域名的反寫,比如com.什麼。
public class People {//class 關鍵字,定義類的關鍵字,People是類的名稱。
public String name;//類的屬性 public String sex; public int age; //類的方法 public void sleep(){ System.out.println("人疲倦的時候喜歡睡覺覺"); } public void eat(){ System.out.println("人飢餓的時候喜歡吃飯飯"); } public static void main(String[] args) {//主函式 People p=new People();//物件的例項化 p.eat();//呼叫類的方法 p.sleep(); } }
構造方法
構造方法的名稱必須與類的名稱相同,並且沒有返回值。
每個類都有構造方法。如果沒有顯式地為類定義構造方法,Java編譯器將會為該類提供一個預設的構造方法。
package com.cnblogs; public class People { public String name; public String sex; public int age; public People(){//預設的構造方法,初始化物件的時候呼叫預設構造方法 System.out.println("類預設的構造方法,不含引數"); } public People(String name){//含參的構造方法 System.out.println("含參的構造方法"); } public void sleep(){ System.out.println("人疲倦的時候喜歡睡覺覺"); } public void eat(){ System.out.println("人飢餓的時候喜歡吃飯飯"); } public static void main(String[] args) { People p=new People(); p.eat(); p.sleep(); } }
控制類、屬性和方法的訪問許可權
Java 通過修飾符來控制類、屬性和方法的訪問許可權和其他功能,通常放在語句的最前端。
許可權(訪問)修飾符關鍵字包含: public ,private ,protected ,另外一個就是預設的;

public: 對所有類可見,包含本類,同包其他類或者子類,其他包的類或者子類。
protected: 對本類可見,對同包其他類或者子類可見,對其他包的類或者子類不可以見。
private: 只對本類可見,對同包其他類或者子類不可見,對其他包的類或者子類不可以見。
預設: 則是對同一包內可見。
package com.cnblogs; public class Men { public String name;//共有屬性 private int age;//私有屬性 protected String sex;//受保護的屬性 int a=10;//預設的 }
變數的作用域
變數的作用域,包含全部變數和區域性變數
package com.cnblogs; public class Men { //全部變數,在整個作用域都可以使用 public String name;//共有屬性 private int age;//私有屬性 protected String sex;//受保護的屬性 int a=10; public static void main(String[] args) { //定義的i是區域性變數,只可以在for迴圈這個區域性內進行使用 for(int i=0;i<10;i++){ System.out.println("區域性變數,在可以在區域性進行使用"+i); } } }
this關鍵字
this 關鍵字用來表示當前物件本身,或當前類的一個例項,通過 this 可以呼叫本物件的所有方法和屬性。
成員變數與方法內部的變數重名時,希望在方法內部呼叫成員變數,怎麼辦呢?這時候只能使用this。

作為方法名來初始化物件,也就是相當於呼叫本類的其它構造方法,它必須作為構造方法的第一句。
作為引數傳遞,需要在某些完全分離的類中呼叫一個方法,並將當前物件的一個引用作為引數傳遞時。
package com.cnblogs; public class Dog { int a=21; int b=12; public Dog(){//this關鍵字作為方法名來初始化物件 this(23,43); } public Dog(int a, int b) { // TODO Auto-generated constructor stub this.a=a; this.b=b; System.out.println(a+" "+b); } public void add(){//通過this關鍵字可以呼叫類的屬性和方法 int c=this.a+this.b; System.out.println(c); } public void setA(int a){//使用this關鍵字區分同名變數 this.a=a; } public int getA(){ return a; } public static void main(String[] args) { // TODO Auto-generated method stub Dog d=new Dog(); d.add(); d.setA(44); int dd=d.getA(); System.out.println(dd); } }
JAVA中方法的過載
JAVA中方法的過載(構造方法也可以過載)
即方法的名字相同,而方法的引數型別,個數,順序不同即為方法的過載。
注意1: 宣告為final的方法不可以過載,宣告為static的方法不能被過載,但是能夠被再次宣告。
注意2: 僅僅是返回值型別不同,不能構成方法的過載。
package com.cnblogs; public class Cat { public void cat(){ System.out.println("方法的過載"); } public void cat(int a,int b){ System.out.println("方法的過載,方法中引數的個數"); } public void cat(String c,int d){ System.out.println("方法的過載,方法中引數的型別不同"); } public void cat(int e,String f){ System.out.println("方法的過載,方法中引數順序不同"); } public static void main(String[] args) { // TODO Auto-generated method stub } }
包裝類,拆箱和裝箱
基本型別和對應的包裝類可以相互裝換:
由基本型別向對應的包裝類轉換稱為裝箱,例如把double包裝成 Double 類的物件;
包裝類向對應的基本型別轉換稱為拆箱,例如把 Integer 類的物件重新簡化為 int。
package com.cnblogs; public class Sun { public static void main(String[] args) { // TODO Auto-generated method stub int a=32; Integer i=new Integer(a); System.out.println("手動進行裝箱"+i); int a2=i.intValue();//此方法的作用是以int值返回此Integer物件 System.out.println("手動進行拆箱"+a2); int a4=54; Integer i4=a4;//自動裝箱 System.out.println("自動進行裝箱"+i4); } }
重點筆記,加強理解多型的含義
多型存在的三個必要條件:
繼承
重寫
父類引用指向子類物件
原始檔宣告規則
當在一個原始檔中定義多個類,並且還有import語句和package語句時,要特別注意這些規則。
一個原始檔中只能有一個public類
一個原始檔可以有多個非public類
原始檔的名稱應該和public類的類名保持一致
例如:原始檔中public類的類名是Employee,那麼原始檔應該命名為Employee.java。

如果一個類定義在某個包中,那麼 package 語句應該在原始檔的首行。
如果原始檔包含 import 語句,那麼應該放在 package 語句和類定義之間。如果沒有 package 語句,那麼 import 語句應該在原始檔中最前面。
import 語句和 package 語句對原始檔中定義的所有類都有效。在同一原始檔中,不能給不同的類不同的包宣告。