《Java程式設計邏輯》第3章 類的基礎
第3章 類的基礎
3.1 類的基本概念
一種類的理解方式是函式的容器。例如在Java API的類Math,我們可以引用的方法是以public static
修飾的。
static
表示類方法,也叫靜態方法。與類方法相對的是例項方法,例項方法沒有static
修飾,必須通過例項或物件呼叫,而類方法可以直接通過類名進行呼叫,不需要建立例項。
public
表示方法是公開的,可以再任何地方被外部呼叫。
private
表示方法是私有的,這個方法只能在同一個類內被別的函式呼叫,而不能被外部類呼叫。
通過private封裝和隱藏內部實現細節,避免誤操作,是計算機程式的一種基本思維方式。
以下是類Math常用的方法。
方法 | 功能 |
---|---|
int round(float a) | |
double sqrt(double a) | |
double ceil(double a) | 向上取整 |
double floor(double a) | 向下取整 |
double pow(double a, double b) | |
int abs(int a) | |
int max(int a, int b) | |
double log(double a) | 取自然對數 |
double random() | 產生一個 ( 0 , 1 ) (0,1) (0,1)範圍內的隨機數 |
以下是一個和陣列的操作相關的類Arrays常用方法。
方法 | 功能 |
---|---|
void sort(int[] a) | 按升序排序 |
void sort(double[] a) | |
int binarySearch(long[] a, long key) | 查詢key在陣列a中的位置 |
void fill(int[] a, int val) | 給陣列所有元素賦相同的值 |
int[] copyOf(int[] originnal, int newLength) | 陣列複製 |
boolean equals(char[] a1, char[] a2) | 判斷兩個陣列是否相同 |
類事實上是一種自定義的資料型別。一個型別主要由4部分組成。
- 型別本身具有的屬性,通過類變數(static修飾,也稱靜態變數或靜態成員變數)來體現。
- 型別本身可以進行的操作,通過類方法(static修飾,也稱靜態方法或靜態成員方法)體現。
- 型別例項具有的屬性,通過例項變數(無static修飾,也稱成員變數)來體現。
- 型別例項可以進行的操作,通過例項方法(無static修飾,也稱成員方法)來體現。
我們可以使用final
來表示常量。
在類的定義中,類不可以使用private
來修飾,但可以沒有修飾符,此時表示一種包的可見性。但在定義內部類時,可以使用private
修飾符。
和類變數類似,例項變數也有public
和private
修飾符,且不能使用static
修飾。
例項方法和類方法的區別如下。
- 類方法只能訪問類變數,不能訪問例項變數,可以呼叫其他類方法,當不能呼叫本類的例項方法。
- 例項方法既可以訪問例項變數,也可以訪問類變數。既可以呼叫類方法,也可以呼叫例項方法。
類的使用過程基本如下所示。
public class ChapterThree {
public static void main(String[] args) {
Point p = new Point();
p.x = 2;
p.y = 3;
System.out.println(p.distance());
}
}
其中,類的例項或物件的建立語句為Point p = new Point();
。其中,new Point();
是必須的。而在C++中,Point p
即可建立按一個類的例項或物件。但在Java中,Point p
只是建立了一個可以引用例項或物件的變數,即p
的值是物件或例項的實際存放地址。此時,new Point()
是為物件的例項分配記憶體,而賦值語句則把記憶體的起始地址賦值給p
,使得p
可以引用這個例項。
在建立物件的例項時,所有的例項變數都會分配一個預設值,其中,數值型別變數的預設值是0,boolean為false,char是“\u0000”,引用型別變數是null。null是一個特殊的值,表示這個引用型別變數不指向任何物件。
不同於C++,Java可以在定義成員變數時指定初始值,無論成員變數是否為static final
。
Java中的構造方法可以通過this(...)
來呼叫。
每個類至少有一個構造方法,構造方法在通過new
建立物件的過程中會被呼叫。如果沒有顯示定義構造方法,Java編譯器會自動生成一個預設構造方法。但顯示定義了構造方法後,Java編譯器不再生成預設構造方法。
構造方法可以使用private
來修飾。
類和物件的生命週期如下。
- 在程式第1次通過new建立一個類的物件時,或者直接通過類名訪問類變數和類方法時,Java會將類載入進記憶體,為這個類分配一塊空間。這個空間包括類的定義、成員變數和成員方法。
- 類載入進記憶體後,一般不會釋放,直到程式結束。
- 每次做new操作時都會在記憶體中劃分一塊區域來儲存物件,每個區域都對應一個獨立的例項變數。
- 物件的釋放是通過Java的垃圾自動回收機制管理的,當沒有活躍變數引用物件時,物件對應的空間可能會被釋放。
物件和陣列一樣,有兩塊記憶體,儲存地址的部分分配在棧中,儲存實際內容的部分分配在堆中。
3.2 類的組合
3.3 程式碼的組織機制
相關文章
- Java基礎之邏輯控制Java
- Java基礎——邏輯運算子Java
- 推送的基礎邏輯
- 計算機程式的思維邏輯 (28) – 剖析包裝類 (下) – 理解Java Unicode處理的基礎計算機JavaUnicode
- 計算機程式的思維邏輯 (28) - 剖析包裝類 (下) - 理解Java Unicode處理的基礎計算機JavaUnicode
- Java程式設計基礎Java程式設計
- Java 基礎02Java程式設計基礎Java程式設計
- 《java程式設計基礎》java的基礎知識(三)Java程式設計
- Java程式設計基礎20——異常&IO(File類)Java程式設計
- 邏輯代數基礎
- 【Java基礎】通用程式設計Java程式設計
- Java程式設計基礎13——常見物件_String類Java程式設計物件
- Java基礎09:邏輯運算子、位運算子Java
- Java基礎——程式設計之路的開始,Java基礎知識Java程式設計
- 邏輯程式設計與函式程式設計的介紹程式設計函式
- Java基礎-設計一個Java類所需的方法(轉)Java
- [java程式碼]業務邏輯查詢幫助類Java
- JAVA網路程式設計基礎Java程式設計
- Java 基礎程式設計筆記Java程式設計筆記
- Java程式設計基礎33——JDBCJava程式設計JDBC
- Java併發程式設計基礎Java程式設計
- 【基礎題】【類】類的設計思路
- 《java程式設計基礎》方法的過載Java程式設計
- 《Java語言程式設計(基礎篇)(原書第10版)》第2~4章部分程式設計練習題程式碼Java程式設計
- SQL程式設計基礎(原書第3版)SQL程式設計
- 當邏輯程式設計遭遇CQRS時程式設計
- 程式設計師面試邏輯題解析程式設計師面試
- 計算機程式的思維邏輯 (52) - 抽象容器類計算機抽象
- javascript基礎(邏輯運算子)(九)JavaScript
- 《java程式設計基礎》例題5.6Java程式設計
- Java入門之基礎程式設計Java程式設計
- Java 基礎(十六)網路程式設計Java程式設計
- 計算機程式的思維邏輯 (14) – 類的組合計算機
- java程式設計師程式設計筆試基礎學習Java程式設計師筆試
- java語言邏輯類、引數類和字元類Java字元
- 《實戰 Java 高併發程式設計》筆記——第2章 Java 並行程式基礎(二)Java程式設計筆記並行行程
- 《Ruby基礎教程(第4版)》:快樂程式設計程式設計
- [02] 多執行緒邏輯程式設計執行緒程式設計