Java編程里的類和對象

来源:http://www.cnblogs.com/PHBlog/archive/2016/09/24/5902278.html
-Advertisement-
Play Games

像我們搞電腦這塊的,都知道這麼一件事,當前的電腦編程語言主要分為兩大塊,一為面向過程,二為面向對象。Java就是一門純面向對象的語言。學習了一個月左右的Java,在下對於Java當中的類和對象有了基本的認識。接下來我就來談談自己的看法,各位大神勿噴,新手小白敬上。 既然談到類和對象,首先,我們要 ...


  像我們搞電腦這塊的,都知道這麼一件事,當前的電腦編程語言主要分為兩大塊,一為面向過程,二為面向對象。Java就是一門純面向對象的語言。學習了一個月左右的Java,在下對於Java當中的類和對象有了基本的認識。接下來我就來談談自己的看法,各位大神勿噴,新手小白敬上。

  既然談到類和對象,首先,我們要明確一個概念。那就是,什麼叫類?什麼是對象?

  首先讓我們來談談什麼叫類。類是一個比較抽象的概念,如何給它定義,是一個難題。我們通常這樣稱呼它,模板。是的,它代表了具有相同屬性、行為等的一種事物。就比如,凳子、桌子、電腦、人。這裡,我們並不是指定某一個具體的東西,而是這類事物的總稱。而Java中的類,其實就是這樣的泛指。那麼什麼是對象呢。比如,這臺電腦,這個人,這張桌子。類和對象有著密不可分的關係。類,是一些具有相同屬性行為的對象的通用模板。對象,是一個類的實例化的產物。能夠區分什麼是類,什麼是對象,這是學習Java以及所有面向對象的編程語言的第一步,也是非常關鍵的一步。

  認識了類和對象之後,接下來,我們要弄清楚Java當中定義類和對象的格式。

  如何定義一個類?一個類,它要包括哪些方面的內容?我們就拿人來說吧。人,頭、眼鏡、鼻子、嘴。這些,就是人這個類的特征。在Java裡面,我們通常稱之為屬性。而除了這些內容,我們還知道,人會思考,要吃飯睡覺。這些,是人產生的行為。在Java裡面,我們稱之為方法。而一個類,通常就是由屬性和方法兩部分組成的。換句話說,定義一個類,我們就要闡明類的屬性和方法這兩部分。定義一個類的格式一般為,public class 類名{}。花括弧裡面就是我們要填充的類的屬性和方法。定義屬性的一般格式為 訪問修飾符 數據類型 屬性名。定義方法的一般格式為 訪問修飾符 返回值類型 方法名(參數類型 參數名)。事實上,方法括弧里沒有參數也是可以的。

  接下來,我們來實現一個類的定義以便更好地理解。我們不妨來定義一個學生類Student。學生類的屬性,有姓名、年齡、學號以及學分,學生類的方法,有學習、玩耍。具體實現如下:

 

在這段程式中,我特意用上了所有的訪問修飾符。可以註意到,定義每個屬性的訪問修飾符都是不一樣的。在Java當中,一共有四種訪問修飾符,比我們熟知的C++要多一種。四種訪問修飾符分別為:public,protected,預設,private。四種訪問修飾符的排列順序,即為其訪問許可權由大到小的排列順序。從public開始講,public的訪問許可權最大,被public修飾的成員,可以在任何一個類中被調用,不管同包或不同包,是許可權最大的一個修飾符。接下來是protected。被protected修飾的成員,能在定義它們的類中,同包的類中被調用。而如果想要在不同包的另一個類中調用,那麼要求這個類為成員所在類的子類。即在存在繼承關係的情況下,被protected修飾的成員可以在不同類中被調用。被預設的修飾符修飾的成員,也能在同類、同包當中被調用,但是,即便存在繼承關係,它也不存在跨包調用。private作為最嚴苛的修飾符,被它修飾的成員,只能在當前類之中才能被調用,而如果想要調用私有量,就必須藉助公有的方法來傳遞這個私有量。舉個例子,當類中的name屬性為私有量,我們可以定義一個public String setName()的公有方法,利用它返回這個name屬性。在這個類當中,除了屬性,我們看到還有兩個方法,Study和Play。我們註意到,方法的訪問修飾符一般為public。事實上,方法的訪問修飾符是可以為其他類型的。但是,作為一個類在外部的作用的具體實現,在外部如果不能調用,那麼這個類與外部的連接也就斷了,那麼它的意義也就失去了。除此之外,兩者的返回值類型也不相同,註意當返回值類型不為空的時候,需要返回一個類型相同的值。再者,如果在這個方法裡面,你需要使用到外界的數據,可以將其以參數的形式傳遞到這個方法裡面來。如果不需要,那麼參數可以為空。

  這樣,一個類就定義好了。接下來我們要做的,就是實例化一個對象出來。對象實例化的關鍵詞是new,實例化對象的格式是  類名 對象名=new 類名()。事實上,這種說法其實並不准確。具體將在後文當中提到。接下來,我們將實例化一個Stu並賦初值:

可以看到,我們實例化了一個Stu,並給它賦了相應的初值,進行了一系列的行為。

  讓我們把目光集中到Student Stu=new Student();這一行代碼上,我們剛纔說過,這是實例化對象的基本格式 類名 對象名=new 類名(),剛纔我們也說過,這種說法其實並不准確。正確的說法應該是,實例化對象的格式為 類名 對象名=new 構造方法名()。那麼,問題來了,什麼是構造方法?首先,構造方法是一個方法。但是它與其他普通方法並不相同,它是一種特別的方法。它的作用在於,實例化對象,甚至在其有參數的情況下,可以實現給對象的一些屬性賦初值。那麼,如何定義一個構造方法呢?定義構造方法的基本格式為 public 類名(參數類型 參數名)。我們註意到,這與定義普通方法的格式略有區別。註意,定義構造方法是不需要加返回值類型的,再者,方法名必須為類名,而不能像定義普通方法只需滿足命名規則就好。接下來,我們要談到與構造方法有關的幾點。(1)相信細心的朋友已經發現了,在類中,我並沒有定義構造方法,然而實例化對象的時候並沒有報錯。因為,在定義類的時候,如果你沒有自行定義構造方法,那麼系統會給你一個預設的構造方法,僅可用於實例化對象。(2)如果你在類中自行定義了構造方法,那麼系統將不會提供構造方法或者說系統提供的構造方法被定義的構造方法覆蓋。(3)一個類可以定義多個構造方法。(4)構造方法每調用一次,一定會創建一個新的對象。我們繼續看回到實例化對象的這行代碼。事實上,Java把記憶體分成兩種,一種叫做棧記憶體,一種叫做堆記憶體。在函數中定義的一些基本類型的變數和對象的引用變數都是在函數的棧記憶體中分配。當在一段代碼塊中定義一個變數時,java就在棧中為這個變數分配記憶體空間,當超過變數的作用域後,java會自動釋放掉為該變數分配的記憶體空間,該記憶體空間可以立刻被另作他用。堆記憶體一般用作存放由new 創建的對象和數組。而在這行代碼當中,Student Stu作用是在棧記憶體中開闢一個記憶體空間儲存Stu這個對象名。而new在堆記憶體中開闢的記憶體空間則儲存了Student類裡面的屬性和方法。兩者之間由等號進行關聯。等號的作用在於,將儲存Student屬性和方法的記憶體地址作為信息傳遞給棧記憶體Stu所在地並且保存下來。這就是構造方法實現實例化對象的具體過程。我們不妨來看個構造方法的例子加強理解:

 

在這段代碼當中,我們可以看到在這個類當中的兩個構造方法的不同形式。

  接下來,我想談談類和對象與Java當中另一個知識點this結合在一起的用法。我們都知道,C++里有this指針,Java是廢除了指針的,Java中的this其實與this指針的功能上有點類似。我們不妨來看看下麵這段代碼:

運行結果如下:

事實上,this除了調用成員變數以及成員函數,還可以用來調用構造方法。它能根據所含參數的類型,自動選擇符合的構造方法。這裡展開一點拓展,如果有兩個類存在繼承關係,那麼在子類實例化對象的時候,需要調用到父類的構造方法,這就需要用到super,用法與this類似。關於這點,會在以後的博客里詳解。

  講了這麼多,我相信,看到這篇博客的諸位應該對類和對象的知識有了基本的瞭解。事實上,類和對象的知識遠不止如此,我講的只是皮毛。如果有哪些常識性的錯誤,請各位大神大方指出來,新人好改,以免誤人子弟。最後,希望這篇博客最好能給大家帶來一些啟發,能幫助一些對這個知識點一無所知的人瞭解Java里的類與對象。新人小白敬上。

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Introduction to ASP.NET Core Asp.net core 介紹 270 of 282 people found this helpful By Daniel Roth, Rick Anderson and Shaun Luttin Meng.Net 自譯 ASP.NET C ...
  • 中國式商業智能報表ActiveReports免費公開課,10月20日開講。適合人群:報表開發人員,報表產品經理,商業報表使用構建人員。 ...
  • 20幾歲,怕什麼。 自己的感覺 說一個自己最近使用AngularJS的感受,我們之前使用mvc進行項目開發都是瞭解和經常使用HTML的幫助類,來完成我們前端大部分代碼的編寫,其實在我沒有接觸AngularJS之前對於這種方法還是很喜歡的,畢竟它是將.aspx頁面革命掉的東西,但是隨著項目中使用... ...
  • 2016年9月22日凌晨,微信宣佈“小程式”問世,當然只是開始內測了,微信公眾平臺對200個服務號發送了小程式內測邀請。那麼什麼是“小程式”呢,來看微信之父怎麼說 看完之後,相信大家大概都有些明白了吧,對於開發者來說或許都有些小激動吧,畢竟多關註一些新東西沒什麼不好。那麼問題是“小程式”只有200個 ...
  • 開頭不講"Hello Word",讀盡詩書也枉然 : Word 操作組件介紹 - Spire.Doc 【博主】反骨仔 【原文地址】http://www.cnblogs.com/liqingwen/p/5898368.html 序 本打算過幾天簡單介紹下組件 Spire.XLS,突然發現園友率先發佈了 ...
  • 原文地址:http://yacare.iteye.com/blog/2010049 很多伙伴在更新VS2010,或者卸載VS2012安裝2010後,建立Win32 Console Project/MFC項目時會出現"LINK : fatal error LNK1123: 轉換到 COFF 期間失敗: ...
  • 招聘鏈接:https://job.cnblogs.com/offer/53380/ 工作地點:北京-海澱 工作年限:1年 學歷要求:本科 招聘分類:移動開發工程師 工資範圍:面議 1、扎實的 C#基礎 2、熟練掌握 xaml 頁面開發,懂得響應式佈局 3、至少1年 uwp開發經驗 4、掌握 C/C+ ...
  • 1 java數據類型。8種基本類型,3種引用類型 基本類型(也稱:原始類型):byte、short、int、long、char、float、double、boolean 引用類型:類,介面,數組 2 java基本數據類型 Java 基本類型共有八種,基本類型可以分為三類,字元類型char,布爾類型b ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...