《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基礎學習(二)
- Scala與Java差異(五)之Map與Tuple
- Java之定時任務全家桶
- React基礎與原理實現
- [練手]CantoneseCool 一個能說廣東話的小程式。
- 靠這份面試手冊拿下京東的Java研發崗的offer,萬分感謝特此分享
- 23 大資料之hive(第四部 hive基礎)
- leetcode【每日一題】242. 有效的字母異位詞 java
- Head First Java學習筆記(7):繼承與多型
- 遊戲程式設計模式學習:第一章命令模式
- Java 學生管理系統(MVC)開源原始碼(基礎版)
- JavaScript正則學習筆記
- 小白不懂就問,學自動化測試,會 Java 可以嗎,還是必須得會 python (python 不太會)
- JavaBean重寫Object類中的方法
- 精盡 MyBatis 原始碼分析 - 基礎支援層
- Git程式碼託管常用命令
- 基於Java的Socket類Tcp網路程式設計實現實時聊天互動程式(一):QQ聊天介面的搭建