java 學習筆記2 面向對象(上)

来源:http://www.cnblogs.com/sunshine88/archive/2017/05/28/6914819.html
-Advertisement-
Play Games

類和對象 類是某一批對象的抽象,可以把類理解成某種概念。對象是一個具體存在的實體。類和對象是面向對象的核心。 類定義的是多個實例的特征,類不是具體存在,實例才是具體存在。 定義類(class)的語法: [修飾符] class 類名 { 零個到多個構造器定義.... 零個到多個成員變數.... 零個到 ...


類和對象

類是某一批對象的抽象,可以把類理解成某種概念。對象是一個具體存在的實體。類和對象是面向對象的核心。

類定義的是多個實例的特征,類不是具體存在,實例才是具體存在。

定義類(class)的語法:

[修飾符] class 類名

{ 零個到多個構造器定義....

   零個到多個成員變數....

   零個到多個方法....}

要點:1.三種常見的成員:構造器(new關鍵字調用) 成員變數 方法   

   2.類名由一個或多個有意義的詞連接而成,每個單詞首字母大寫,其餘小寫。

        3.修飾符可以是public final abstract或省略

 

定義成員變數(field)的語法:

[修飾符] 類型 成員變數名 [=預設值];

要點:1.成員變數名第一個單詞首字母小寫,後面每個單詞首字母大寫,其餘小寫。

         2.類型可以是基本類型,也可以是引用類型。

 

定義方法的語法

[修飾符] 方法返回值類型 方法名(形參列表)

{方法體}

要點:方法名和成員變數的規則相同,通常選英語動詞。

static是一個特殊的關鍵字,可修飾方法成員變數等成員。static修飾的成員屬於類本身而不屬於該類的單個實例,也叫類變數和實例變數(靜態變數和非靜態變數)。靜態成員不能訪問非靜態成員。

構造器是一種特殊的方法。

[修飾符] 構造器名(形參列表)

{方法體}

要點:構造器名必須與類名相同

類的作用:定義變數  創建對象 調用類方法或訪問類變數

 

對象的產生和使用

創建對象的根本途徑是構造器,通過new關鍵字來調用某個類的構造器即可創建這個類的實例。

例:Persn p=new Person();//定義p變數的同時為p變數賦值

類或實例訪問方法和成員變數的語法:類.類變數|方法   實例.實例變數|方法

static修飾的成員變數,可通過類和實例調用。沒有static修飾的方法和成員變數,只能通過實例來調用。

 

Person p=new Person();   這段代碼創建了Person對象,對象賦值給p變數。

 引用變數指向實際對象的示意圖

person對象賦給一個引用變數的示意圖

person類型的變數實際是一個引用,被存放在棧記憶體里。指向實際的person對象

真正的person對象存放在堆記憶體中

java程式不允許直接訪問堆記憶體中的對象,只能通過該對象的引用操作該對象,當訪問p引用變數的成員變數和方法時,實際是訪問p所引用對象的成員變數和方法。

 

對象的this引用

this關鍵字的最大作用,就是讓類中的一個方法,訪問該類里的另一個方法或實例變數。

this關鍵字總是指向調用該方法的對象。

大部分時候,一個方法訪問該類中定義的其他方法,成員變數時加不加this首碼效果完全一樣。

 

方法方法不能獨立定義,方法必須屬於類或對象。

同一個類里的一個方法調用另一個方法時,如被調方法是普通方法,預設使用this作為被調者,如被調方法是靜態,預設使用類作為調用者。

java里方法的參數傳遞只有一種:值傳遞 將實際參數的副本傳入方法內而參數本身不受影響。

參數副本分為基本類型的參數和引用類型(地址)的參數

 1 public class PrimitiveTransferTest
 2 {
 3     public static void swap(int a , int b)
 4     {
 7         int tmp = a;
 8              a = b;
10             b = tmp;
12         System.out.println("swap方法里,a的值是"
13             + a + ";b的值是" + b);}
14    public static void main(String[] args)
16     {
17         int a = 6;
18         int b = 9;
19         swap(a , b);
20         System.out.println("交換結束後,變數a的值是"
21             + a + ";變數b的值是" + b);  }

 1 class DataWrap
 2 {
 3     int a;
 4     int b;
 5 }
 6 public class ReferenceTransferTest
 7 {
 8     public static void swap(DataWrap dw)
 9     {
10         // 下麵三行代碼實現dw的a、b兩個成員變數的值交換。
11            int tmp = dw.a;
13             dw.a = dw.b;
15             dw.b = tmp;
17         System.out.println("swap方法里,a成員變數的值是"
18             + dw.a + ";b成員變數的值是" + dw.b);
19         // 把dw直接賦為null,讓它不再指向任何有效地址。
20         dw = null;
21     }
22     public static void main(String[] args)
23     {
24         DataWrap dw = new DataWrap();
25         dw.a = 6;
26         dw.b = 9;
27         swap(dw);
28         System.out.println("交換結束後,a成員變數的值是"
29             + dw.a + ";b成員變數的值是" + dw.b);
30     }

 

成員變數和局部變數成員變數是在類里定義的變數,局部變數實在方法里定義的變數。

只要類存在,程式可以訪問該類的類變數 類.類變數

只要實例存在,程式可以訪問該實例的實例變數 實例.實例變數

類變數也可以讓該類的實例來訪問    實例.類變數

通過實例修改類變數的值,會導致該類的其他實例訪問這個類變數時也獲得被修改的值。

 

java允許局部變數和成員變數同名,如果方法里的局部變數和成員變數同名,局部變數會覆蓋成員變數,若需在方法里調用被覆蓋的成員變數,則可使用this(實例變數)或類名(類變數)來調用。

成員變數在記憶體中的運行機制

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 概述 本篇為《React Native之React速學教程》的第一篇。本篇將從React的特點、如何使用React、JSX語法、組件(Component)以及組件的屬性,狀態等方面進行講解。 What’s React React是一個用於組建用戶界面的JavaScript庫,讓你以更簡單的方式來創建 ...
  • 本文出處:http://www.cnblogs.com/wy123/p/6910468.html 感覺最近sql也沒少寫,突然有一點生疏了,對於用的不是太頻繁的一些操作,時間一久就容易生。 多行的某一個列合併成一個列 另外是一個相反的操作,藉助上面合併之後的結果,將一個多個值的字元串列拆分開來,轉換 ...
  • $0 當前腳本的文件名 $n n為一個從1開始的數字,$1代表第一個參數,$2代表第二個參數,${10}代表第十個參數 $* 全部位置參數(所有參數作為一個字元串) $@ 全部位置參數(每個參數作為一個獨立的字元串) $# 傳入腳本的參數個數 $_ 上一個命令的最後一個參數 $? 上一個命令的返回值... ...
  • 首先先瞭解一下ef生成的模型edmx的代碼,傳送門:http://www.cnblogs.com/yushengbo/p/4807715.html 一、添加新的欄位 例子就用我現在項目的這個吧,首先在edmx中的表裡新建一個欄位: 然後設置他的屬性什麼別的內容,之後在表格所示範圍內點擊右鍵,選擇在模 ...
  • 前言:對於經常忙於服務端開發的小伙伴來說,與DB層打交道是在正常不過的事了,但是每次頁面的查詢條件新增往往意味著後端代碼參數化同比增長,當然你可以不使用sqlhelper自帶的參數化條件查詢,可以直接傳遞參數,這樣一來,可能你寫的代碼就變少了,但是存在一個隱藏的問題就是sql註入,對於sql註入我想 ...
  • EntityFramework核心是EDM實體數據模型,該模型由三部分組成。 (1) 概念模型,由概念架構定義語言文件(.csdl)來定義. (2) 映射,由映射規範語言文件(.msl)定義. (3) 存儲模型,由存儲架構定義語言文件(.ssdl)來定義,亦稱邏輯模型. 上述概念比較抽象,歸根到本質 ...
  • 後臺模版來自:Ace Admin http://ace.jeka.by/form-elements.html 左側菜單,通過js根據url來判斷顯示哪塊 window.location.pathname: 代表URL 的路徑部分(就是文件地址) 本例返回值:/Company/AddOrEditCom ...
  • 特性參數 webapi 框架里有很多特性參數,為瞭解除一些新人的疑惑,寫個小例子分享下。 class Program { static void Main(string[] args) { var message = new MessageData { Header="header...", Bod ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...