3A課程筆記分享_StudyJams_2017

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

課程3A的內容主要是介紹面向對象編程思想的一些基本概念並做了相應的練習指導。 面向對象的思想在當今的軟體開發中占據著主導地位。 Java是一門完全面向對象的語言,是一種天然的分散式互聯網軟體的開發語言,在當今企業級應用中占據絕對領先地位,也是開源世界的頂梁柱。 ...


課程3A-面向對象編程(上)

概述

  • 面向對象的思想在當今的軟體開發中占據著主導地位。
  • Java是一門完全面向對象的語言,是一種天然的分散式互聯網軟體的開發語言,在當今企業級應用中占據絕對領先地位,也是開源世界的頂梁柱。
  • 課程3A的內容主要是介紹面向對象編程思想的一些基本概念。

Warm-Up:準備活動

  • 練習定義方法,調用方法。這個練習首先修改了MainActivity.java中的display()方法的名字,然後修複代碼中的語法錯誤:修改之前所有對於display()方法的調用為當前的方法名。這個練習的目的主要是想讓學生熟悉方法定義和調用的過程以及這兩者之間的一一對應的關係。

  • 在 Android Studio 中打開方法聲明的鍵盤快捷鍵為:Mac:command+b,Windows:control + b。

  • 定義一個方法的需要哪些部分?

a) Access Modifier(Accessibility Specifier),訪問控制修飾符。經常使用的是"private"與"public",當使用前者時,表明此方法是私有方法,只能在當前類的上下文(在這裡,即為MainActivity)中被調用;當使用後者時,表明當前方法具有全局的可訪問性,即在代碼中的任何位置都可以調用。

b) Return Data Type,返回值類型。這部分指定當前方法的返回值類型。

c) Method Name,方法名稱。與我們之前使用變數名來引用一個變數類似,我們也可以使用方法名(和傳入參數)來調用定義好的方法。

d) Matched Parentheses,匹配的圓括弧。匹配的圓括弧中的是實參列表(聲明或定義方法時)與形參列表(調用方法時),調用方法時,必須要有匹配的圓括弧,否則編譯時會提示語法錯誤。

e) Parameter List,參數列表,以逗號分隔,實參列表中的變數名可以在整個當前函數的範圍內使用,出了該範圍,這些變數都不可以再被引用。形參列表中的傳入參數需要具有相同或者是相容的類型(以便編譯器能夠自動進行隱式類型轉換),變數名不必與對應的實參變數相同。

f) Matched Curly Braces,匹配的花括弧,表示當前函數的範圍。

g) Method Signature,方法簽名。方法簽名由方法名、參數列表構成。Method Signature與方法重載的概念緊密相關:只有具有不同方法簽名的方法能夠同時存在於一個上下文中,僅僅只是返回值類型不同的方法不能夠重載。

  • 使用方法的流程: 確定方法簽名以及返回值類型,作為方法的聲明 ----> 在成對的花括弧代表的語句塊中實現當前方法的邏輯 ----> 在需要的地方調用方法 ----> 如果需要利用被調方法的返回值,則對該返回值進行處理。

  • 進行了以上練習後,JustJava程式在手機上運行的效果如圖1所示。

Fig1. JustJava:生成訂單信息小結

圖1. JustJava:生成訂單信息小結



Android項目的資源文件

  • 資源文件包括圖片、音頻、XML文件(佈局和項目配置)、字元串文件等等。

  • 使用資源文件可以將程式的邏輯與程式具體展現形式分離開來。比如想要做APP的國際化時,就可以在各個語言各自的字元串文件之間切換, 非常方便;想要適應高清屏幕時,只需載入同一資源(圖像、視頻)的更高清版本。

  • 另一方面,Java代碼負責程式邏輯的實現,與資源文件之間是松耦合的關係,提升了代碼及資源文件的復用性。如果把資源都硬編碼在代碼中,整個項目會顯得比較混亂,不利於縮短開發周期,也不利於項目的維護和迭代。

  • 在使用Java來開發Android項目時,會生成一個R.java文件,其中對res資源文件中的資源進行了編號,方便在Java代碼中訪問這些資源。對於string字元串類型的資源,訪問的語法為R.string.* (“*”即為對應的資源文件名);對於layout佈局類型的資源,訪問的語法為R.layout.*。

  • 在Java文件與xml文件中都可以訪問資源文件,具體方式如圖2所示。

    Fig2. 訪問資源文件

    圖2. 訪問Android項目資源文件



對象、類、繼承

  • 當在onCreate()方法中調用setContentView()方法時,
setContentView(R.layout.activity_main);

我們通過R這個對當前所有的項目資源的抽象的類來訪問佈局資源activity_main.xml,Android程式執行到這一語句時會解析此xml文件,分析各個Views之間的層級關係並據此生成對應的Java對象。

  • Java對象:可以擁有成員(變數或方法),其整體是對State的封裝,外界(凡是無法直接訪問此對象內部的,對於該對象而言都可稱為“外界”)可以使用此對象提供的一些方法(比如說,setter方法與getter方法)來修改其成員變數,從而改變此對象的狀態。外界可能根據對象狀態的改變進而採取不同的操作,實現期望的邏輯。

  • Java類
  1. member variable == field == state,成員變數、域、狀態等術語在當前語境(Java Class)下的含義相同。
  2. 成員變數的命名規範(naming conventions):成員變數的名字以"m"或者"m_"作為首碼。
  3. 與之前說過的定義變數類似,定義一個Java Class時,也需要指定(不指定的話,我記得訪問控制預設是protected級別的)當前類的訪問控制修飾符(Acess Modifier)。
  4. Constructor,構造函數。構造函數是為了實例化(instantiate)Java類為一個實際存在於記憶體中的對象,構造函數與普通函數類似,也有參數列表;定義構造函數與定義普通函數的過程類似,但不需要指定返回值類型,其語法格式為“類名 + 參數列表 + 實現類實例化的代碼塊”。
  5. 如果一個類的定義中沒有顯式地指定任何構造函數,那麼實例化該類時對調用預設構造函數。 需要註意區別無參構造函數預設(default,預設的)構造函數:當一個類的定義中顯式地定義了一個不接受任何參數的構造函數時,那麼在不傳入參數地實例化這個類時,調用的就是無參構造函數,而不是預設(預設)構造函數。
  6. Factory Method,工廠方法。除了使用構造函數來創建對象,我們也可以使用工廠方法。更詳細地來講,工廠方法是一種對象創建型的設計模式,其意圖在於定義一個用於創建對象的介面,讓子類決定實例化哪一個類;效果就是一個類的實例化被延遲到其子類。

      6.1 Factory Method的適用範圍: 當一個類不知道它所必須創建的對象的類的時候;當一個類希望由它的子類來指定它所創建的對象的時候;當類將創建對象的職責委托給多個Helper子類中的某一個,且你希望將哪一個Helper子類是代理者這一信息局部化的時候。 如下的代碼即應用Factory Method把Toast類的實例化延遲了:等待有具體文本信息的時候再實例化出Toast對象。
Toast toast = Toast.makeText(context, text, duration);


  1. 註意,在一個class內部與外調用方法的區別: a)class之外無法訪問private方法;b)語法上的區別。類中調用方法可以不指定當前對象(this),而在類外調用則必須指定。如圖3所示。

    Fig3. 在類的內部與外部調用類方法的區別

    圖3. 在類的內部與外部調用類方法的區別



  2. Object Method,對象方法。 通過調用對象方法(object method)在Java代碼中改變Views的屬性,使得我們可以運行時根據用戶的交互,動態地改變Views的外觀。這對於互動式的APP來說十分重要。

  3. Inheritance,繼承。當一個類A繼承另一個類B時,預設地,A就會擁有B的所有public方法與成員(無法繼承private的方法與成員變數)。子類可以復用繼承而來的方法、變數,也可以重寫(override)父類的方法。 通過繼承,可以實現多態性,使得程式設計更加靈活、強大。繼承是OOP(Object Oriented Programming,面向對象編程)中非常重要的一環;用類圖可以展現整個軟體系統的繼承層次關係,現代軟體項目的設計基本上沒有脫離了類圖的。

  4. Casting,轉型。 方法findViewById()返回的對象類型是View;但如果傳入的id是一個View的子類的id,為了正確使用該方法的返回值,我們需要進行轉型,將findViewById()的返回值轉型成為該id對應的實際的對象類型(可以通過查看xml源文件來得到該信息)。關於Java中轉型的更多知識,可以參考 ORACLE官方文檔_Inheritance (請參閱“Casting Objects”部分)。


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

-Advertisement-
Play Games
更多相關文章
  • 1.兩個元素換行書寫時,在實際的佈局中展示為兩個元素之間多了一個區間(這個區間通常是因為代碼在換行時,解析會自動預設為一個空格字元),所以在實際應用時,如果想要將兩個元素完全無縫隙的放置在一起併排顯示時,應該註意使用浮動和定位,或者可以通過設置父級元素的font-size:0;的方法; 2.使用絕對 ...
  • 前面的話 Douglas Crockford大神根據自己的理念用JavaScript寫了一個JavaScript代碼規範檢查工具,這就是JSLint。後來非常流行,也的確幫助了廣大的JavaScript程式員。但是,大神對於自己的代碼規範不做絲毫的妥協,對開源社區的反饋的回應也不禮貌。於是,JSLi ...
  • CSS中可以通過設置為元素設置一個position屬性值,從而達到將不同的元素顯示在不同的位置,或者固定顯示在某一個位置,或者顯示在某一層頁面之上。 position的值可以設為relative,absolute,fixed,static。 HTML代碼里定義兩個區塊: 1.相對定位: 以上代碼將實 ...
  • 一、React的發展 facebook在構建instagram網站的時候遇見兩個問題: 1、數據綁定的時候,大量操作真實dom,性能成本太高 2、網站的數據流向太混亂,不好控制 於是facebook起初調研過市場上已存的mvc框架,發現都不太滿意,於是就推陳出新,開發了react框架,併在2013年 ...
  • 0. 掌握基礎 對於任何行業任何工作來說,融會貫通是獲得成功的關鍵。一個人想要成為優秀程式員,就必須有堅實的基礎。核心理念的理解會幫助你用最好的方法設計和實施出最完美的方案。如果你感覺到不能掌握核心的電腦科學或者某個編程語言的知識點,現在開始回顧基礎一點都不晚。 1. 開始為你寫過的代碼貼上標簽( ...
  • let實際上為 JavaScript 新增了塊級作用域。 塊級作用域的出現,實際上使得獲得廣泛應用的立即執行函數表達式(IIFE)不再必要了。 本質上,塊級作用域是一個語句,將多個操作封裝在一起,沒有返回值。 ...
  • 最近閑來沒事,做了一個畫江湖圖片滾動載入的demo,大家感興趣可以下來看一下 以下為界面截圖: 圖片會隨滾動條的拖動動態載入,目前來說只是載入的本地的資源,大家可以從後臺抓取數據來實現懶載入. 支持圖片點擊然後大圖來查看: 代碼已經放到git上了,歡迎下載試用 https://github.com/ ...
  • 摘自阮一峰的es6教程 http://es6.ruanyifeng.com/#docs/let ...
一周排行
    -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# ...