1. 程式人生 > 實用技巧 >【Java學習筆記二】——物件與類

【Java學習筆記二】——物件與類

宣告:本文章內容主要摘選自尚矽谷宋紅康Java教程、《Java核心卷一》、《Java語言程式設計-基礎篇》,示例程式碼部分出自本人,更多詳細內容推薦直接觀看以上教程及書籍,若有錯誤之處請指出,歡迎交流。

PS:本篇筆記僅作為物件與類的先導文章,介紹有關類的相關知識點大綱,最後在介紹一些Java物件的特徵,類的特徵將於後面的筆記中具體介紹。

面向過程(POP)與面向物件(OOP)二者都是一種思想,面向物件是相對於面向過程而言的。面向過程,強調的是功能行為,以函式為最小單位,考慮怎麼做。面向物件,將功能封裝進物件,強調具備了功能的物件,以類/物件為最小單位,考慮誰來做。面向物件更加強調運用人類在日常的思維邏輯中採用的思想方法與原則,如抽象、分類、繼承、聚合、多型等。

面向物件的兩個要素

類(class):對一類事物的描述,是抽象的、概念上的定義
物件(object):是實際存在的該類事物的每個個體,因而也稱為例項(instance)

面向物件的三大特徵

封裝(Encapsulation)
繼承(Inheritance)
多型(Polymorphism)

類的成員構成

屬性(Field):對應類中的成員變數
行為(Method):對應類中的成員方法
程式碼塊(block):由一對大括號括起來的若干條簡單的Java語句
內部類(inner class):定義在另一個類中的類

java中的名稱命名規範

包名:多單片語成時所有字母都小寫:xxxyyyzzz
類名、介面名:多單片語成時,所有單詞的首字母大寫:XxxYyyZzz
變數名、方法名:多單片語成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫:xxxYyyZzz
常量名:所有字母都大寫。多單詞時每個單詞用下劃線連線:XXX_YYY_ZZZ

方法與物件的相關知識點補充

一、方法(即行為)的過載(overload)loading

1.定義:在同一個類中,允許存在一個以上的同名方法,只要它們的引數個數或者引數型別不同即可。
“兩同一不同”:同一個類、相同方法名
引數列表不同:引數個數不同,引數型別不同
2.舉例;Arrays類中過載的sort()/binarysearch()
3.判斷是否是過載:
跟方法的許可權修飾符、返回值型別、形參變數名、方法體都沒有關係!

//4個過載的方法
class OverloadTest{
      public int plus(int a, int b){
            return a + b;
      }
      public double plus(double a, double b){
            return a + b;
      }
      public double plus(int a, double b){
            return a + b;
      }
      public double plus(double a, int b){
            return a + b;
      }
}
//呼叫時,隨意填入任何int或double型別的變數都可以
int a = 5;
int b = 8;
double c = 11.4;
double d = 19.23;
int result1;
double result2;

result1 = plus(a, b);
result2 = plus(c, d);
result2 = plus(a, d);
result2 = plus(c, b);

//以下方法均構成過載
void play(int a, double b){};
void play(int a, char b){};
double play(int a, double b, char c){};
boolean play(char a){};

4.值傳遞機制:
如果引數是基本資料型別(int,double等),此時實參賦給形參的是實參真實儲存的資料值。
如果引數是引用資料型別,此時實參賦給形參的是實參儲存資料的地址值。
故要改變傳入類中的形參(基本資料型別)的值時必須包裝成引用資料型別(String, 類等)。

二、物件與物件變數

一定要認識到:一個物件變數並沒有實際包含一個物件,而僅僅引用一個物件。
在Java中,任何物件變數的值都是對儲存在另外一個地方的一個物件的引用。new操作符的返回值也是一個引用。下列語句:
Date deadline=new Date();有兩個部分。表示式new Date()構造了一個Date型別的物件,並且它的值是對新建立物件的引用。這個引用儲存在變數deadline中。
可以顯式地將物件變數設定為null,表明這個物件變數目前沒有引用任何物件。
如:
deadline = null;
if(deadline != null) System.out.println(deadline);

如果將一個方法應用於一個值為null的物件上,那麼就會產生執行時錯誤。
birthday =null; String s=birthday.toString(); //runtime error!

C++註釋:很多人錯誤地認為Java物件變數與C++的引用類似。然而,在C++中沒有空引用,並且引用不能被賦值。可以將Java的物件變數看作C++的物件指標。例如,Date birthday;//Java
實際上,等同於Datebirthday;//C++
一旦理解了這一點,一切問題就迎刃而解了。當然,一個Date
指標只能通過呼叫new進行初始化。就這一點而言,C++與Java的語法幾乎是一樣的。
Date*birthday =new Date();//C++
如果把一個變數的值賦給另一個變數,兩個變數就指向同一個日期,即它們是同一個物件的指標。在Java中的null引用對應C++中的NULL指標。
所有的Java物件都儲存在堆中。當一個物件包含另一個物件變數時,這個變數依然包含著指向另一個堆物件的指標。
在C++中,指標十分令人頭疼,並常常導致程式錯誤。稍不小心就會建立一個錯誤的指標,或者造成記憶體溢位。在Java語言中,這些問題都不復存在。如果使用一個沒有初始化的指標,執行系統將會產生一個執行時錯誤,而不是生成一個隨機的結果。同時,不必擔心記憶體管理問題,垃圾收集器將會處理相關的事宜。

此筆記僅針對有一定程式設計基礎的同學,且本人只記錄比較重要的知識點,若想要入門Java可以先行觀看相關教程或書籍後再閱讀此筆記。

最後附一下相關連結:
Java線上API中文手冊
Java platform se8下載
尚矽谷Java教學視訊
《Java核心卷一》