計算機本質上是一台由 CPU、記憶體、硬碟及輸入輸出設備組成的機器。其上運行作業系統(如 Windows 或 Linux),作業系統再承載各類應用程式(Word、QQ 等)。作業系統將 CPU 時間切分為極小的時間片,輪流分配給不同程式,並頻繁切換上下文。但在應用程式視角中,彷彿整台機器資源專屬於自己——這正是作業系統提供的虛擬假象。對程式設計師而言,編寫程式時基本無需考慮其他應用,只需專注於實現自身邏輯。
應用程式功能看似多樣:讀寫文件、播放音樂、聊天、遊戲、下圍棋……但底層核心僅是執行預先編寫的指令,這些指令無非是操作數據或設備。所謂程式,本質上就是指定「對什麼數據做什麼操作」的指令序列。
幾乎所有數據處理都在記憶體中進行,程式的核心工作即是操作記憶體中的數據。本文將以 Java 為例,深入探討這個核心——「數據」。
計算機內部數據皆為二進制,直接操作極不便利。高級語言引入「數據類型」與「變量」概念,以便理解與操作。
數據類型用於歸類數據,方便理解與操作。Java 基本數據類型包括:
基本類型均有對應的陣列類型,陣列表示固定長度的同類型數據集合,在記憶體中連續存放。例如:單一自然數用 int,100 個連續自然數用 int[100];單一字符用 char,一段文字用 char[]。
Java 為面向對象語言,除基本類型外皆為對象類型。對象本質上是由基本類型、陣列及其他對象組合而成的整體,便於統一操作。以「學生對象」為例:
日期在 Java 中也是對象,內部以 long 整數表示。猶如化學元素構成萬物,基本數據類型對應基本元素,對象對應複雜物質。
為操作數據,需將其存入記憶體。程式眼中的記憶體是一塊有地址編碼的連續空間。為方便定位與操作,編程語言引入「變量」概念:聲明 int a 即在記憶體分配一個存放 int 的空間,a 指向該地址,操作 a 即操作該記憶體單元(如 a=5 將值改為 5)。
之所以稱「變」量,因其代表的記憶體位置存放的值可變。但變量名不變,應代表程式設計師心中該記憶體位置的固定語義。例如 int second 表示時鐘秒數,值隨時間變化,但語義恆為「秒數」。雖然語法不強制,但良好的命名習慣至關重要——切勿用 a、b、c、hehe 等無意義名稱。
合同範例:四個變量分別代表甲方、乙方、合同內容、簽署日期,語義固定,值隨合同不同而異。聲明變量時賦予類型與有意義名稱,即告訴計算機我們要操作的數據。
有了數據,如何對其操作?敬請期待後續內容。
未完待續,更多深入淺出的 Java 編程與計算機技術本質探討,請關注微信公眾號「老馬說編程」。原創文章,版權所有。