2017Google Study Jams系列之實踐3A&3B-面向對象?沒毛病!

@極簡主義患者/社交控/偽技術宅/沉迷幻想不能自拔的文藝少年
不定期更新的文字平臺:微博 簡書

1.方法

  • 定義方法(method signature)
    private int calculatePrice(int quantity){}

    • 訪問修飾符(access modifier):決定訪問權限的修飾符,有private/public/protected三個值
    • 返回值類型(return data type):當方法有返回值時決定方法返回值的類型,使用void表示沒有返回值
    • 方法名(method name):需要注意命名方法,動詞小寫字母開頭且為駝峰式
    • 輸入列表(inputs of list):即形式參數,可有多個或0個,用逗號隔開;形參必須說明數據類型,而相應的實參則要符合這個數據類型,不然就會編譯錯誤;多個形參一定要按順序進行傳參
  • 調用方法(call method)
    調用方法的時候主要注意的就是實參和形參的傳參問題,參數的數量/類型/順序一定要保持一致,否則就會出錯;另外在調用函數的時候可以使用算式作為參數變量直接使用,而不需繁瑣的定義之后再進行傳參,可以使代碼更為簡潔,但會增加理解難度

  • 個人理解
    方法的調用其實就是為了使代碼的復用率和理解難度達到一個平衡點,一方面我們需要利用方法來使代碼更加簡潔/更加容易進行修改/更容易達到復用的目的;另一方面方法的定義和調用又增加了對代碼理解的難度,特別是形參和實參的命名和數量,都容易造成一定的混淆,所以為了使兩者達到一個平衡,我們就需要更豐富的經驗和實踐來實現對方法的定義

2.資源

資源文件都在項目的res文件夾下,Java文件都在java文件夾下,資源包括圖像/文本字符串/顏色/寬度和高度的維度/XML文件/音頻視頻文件等
應用編譯時,AAPT工具會產生一個R類(R.java),在這個類中每一個資源都自己的ID,且此ID在R類中有自己相應的資源類型格式

  • 獲取資源的兩種方式:
    • In code:R.string.hello
    • In XML:@string/hello
  • 常見的資源類型:
Resource Type In Java Code In XML
Image R.drawable.photo @drawable/photo
String R.string.hello @string/hello
Layout XML file R.layout.activity_main @layout/activity_main
ID R.id.price_text_view @id/price_text_view
Color R.color.red @color/red

3.類和對象

  • 擁有相應value的多個變量和多種用來操作的方法組合在一起可以成為一個對象(Object)
  • 對象由定義它的類(Class)生成,因此對象也稱為某個類的實例,在類里面定義了State(聲明)和methods(方法)
  • 與定義方法一樣,定義一個類如下所示:
    public class TextView extends View{}
  • 使用類中的構造函數來創(chuàng)建實例:
    TextView priceTextView = new TextView(context);
    也可以使用工廠方法模式創(chuàng)建對象:
    MediaPlayer player = NeidaPlayer.create(context,R.raw.song);
  • 對對象調用方法:
//Object Variable Name.Method Name(Input Arguments)
titleTextView.setText("News");
/*if use this method in the class
Method Name(Input Arguments)
or
this.Method Name(Input Arguments)
*/
setText("News");
this.setText("News");
  • 類與類之間存在繼承關系(extends),當一個類繼承另一個類時,可獲得繼承類的所有方法和屬性,同時在需要更新時也可以重寫繼承類的方法
  • 使用某個方法返回相應數據時應定義一個變量來存儲,而在存儲時一定要使數據類型相匹配,不匹配時可使用強制類型轉換,如:
    TextView orderSummaryTextView = (TextView) findViewById(R.id.order_summary_text_view);
  • Java中分別使用Getter和Setter方法來“獲取”和“修改”視圖的某個值(例如視圖存儲的文本或圖片)

*4.完善賣咖啡app界面etc.

此節(jié)為視頻中既有實例的代碼片段,可參考之從而思考造輪子的基本步驟,學會舉一反三,利用基礎知識+Search Engines完成

  • 添加復選框(CheckBox)并對其值進行使用(boolean)
<CheckBox
            android:id="@+id/whipped_cream_checkbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="24dp"
            android:text="Whipped cream"
            android:textSize="16sp"/>
CheckBox whippedCreamCheckBox = (CheckBox)findViewById(R.id.whipped_cream_checkbox);
boolean hasWhippedCream = whippedCreamCheckBox.isChecked();
  • 添加文本輸入框(EditText)并對其值進行使用(String)
<EditText
            android:id="@+id/name_field"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:hint="Name"
            android:inputType="textCapWords"/>
EditText text = (EditText)findViewById(R.id.name_field);
String name = text.getText().toString();
  • 利用條件代碼(if/else)進行價格調整和數量限定
private int calculatePrice(boolean addWhippedCream, boolean addChocolate){
        int basePrice = 5;
        if(addWhippedCream){
            basePrice += 1;
        }
        if(addChocolate){
            basePrice += 2;
        }
        return quantity * basePrice;
}
public void increment(View view) {
        if(quantity == 100){
            Toast.makeText(this, "You cannot have more than 100 coffees", Toast.LENGTH_SHORT).show();
        }
        quantity = quantity + 1;
        displayQuantity(quantity);
    }
public void decrement(View view) {
        if(quantity == 1){
            Toast.makeText(this, "You cannot have less than 1 coffee", Toast.LENGTH_SHORT).show();
        }
        quantity = quantity - 1;
        displayQuantity(quantity);
    }
  • intent的使用和理解
        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setData(Uri.parse("mailto:"));
        intent.putExtra(Intent.EXTRA_SUBJECT, "Just Java order for " + name);
        intent.putExtra(Intent.EXTRA_TEXT, priceMessage);
        if(intent.resolveActivity(getPackageManager()) != null){
            startActivity(intent);
        }
  • 本地化
    本地化即使創(chuàng)建的應用能更好的兼容用戶體驗,通過提供兼容性資源包的方式來完成,比如可以修改string.xml文件來將資源進行字符串引用方式的修改,同時提供多語言版本的string.xml文件,完成language的本地化
    這里是本地化檢查清單,進行應用發(fā)布前可供參考
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末餐胀,一起剝皮案震驚了整個濱河市菜循,隨后出現的幾起案子荣倾,更是在濱河造成了極大的恐慌,老刑警劉巖夕吻,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡期犬,警方通過查閱死者的電腦和手機颜懊,發(fā)現死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門财岔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饭冬,你說我怎么就攤上這事使鹅。” “怎么了昌抠?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵患朱,是天一觀的道長。 經常有香客問我炊苫,道長裁厅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任侨艾,我火速辦了婚禮执虹,結果婚禮上,老公的妹妹穿的比我還像新娘唠梨。我一直安慰自己袋励,他們只是感情好,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布当叭。 她就那樣靜靜地躺著茬故,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚁鳖。 梳的紋絲不亂的頭發(fā)上磺芭,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音醉箕,去河邊找鬼钾腺。 笑死徙垫,一個胖子當著我的面吹牛,可吹牛的內容都是我干的放棒。 我是一名探鬼主播姻报,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哨查!你這毒婦竟也來了逗抑?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤寒亥,失蹤者是張志新(化名)和其女友劉穎邮府,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體溉奕,經...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡褂傀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了加勤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仙辟。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鳄梅,靈堂內的尸體忽然破棺而出叠国,到底是詐尸還是另有隱情,我是刑警寧澤戴尸,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布粟焊,位于F島的核電站,受9級特大地震影響孙蒙,放射性物質發(fā)生泄漏项棠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一挎峦、第九天 我趴在偏房一處隱蔽的房頂上張望香追。 院中可真熱鬧,春花似錦坦胶、人聲如沸透典。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峭咒。三九已至,卻和暖如春岖圈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钙皮。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工蜂科, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顽决,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓导匣,卻偏偏與公主長得像才菠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贡定,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,733評論 25 707
  • ¥開啟¥ 【iAPP實現進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程赋访,因...
    小菜c閱讀 6,365評論 0 17
  • 本人初學Android,最近做了一個實現安卓簡單音樂播放功能的播放器缓待,收獲不少蚓耽,于是便記錄下來自己的思路與知識總結...
    落日柳風閱讀 19,094評論 2 41
  • 心中千萬只草泥馬奔騰而過!僅以此文旋炒,發(fā)泄步悠!圖片發(fā)自簡書App 你甜,我說你缺那么一點酸 你酸瘫镇,我說你少那么一丟甜 ...
    不二心的肉多多閱讀 318評論 2 5
  • 從巴黎回來铣除,整個人都玩傻了谚咬。今天一天都在回味之前都旅行。 明天開始尚粘,一心一意讀書了T褙浴!背苦! 畢業(yè)論文互捌,加油加油加油!P屑痢秕噪!
    雪兒梨閱讀 203評論 0 0