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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...