20189200餘超 2018-2019-2 移動平臺應用開發實踐第二週做業

2018-2019-2 移動平臺應用開發實踐第二週做業

實驗部分,在linux中用git命令將代碼傳到碼雲上

  • 成功上傳的截圖
    前端

  • 碼雲上的截圖
    java

  • 遇到以下的問題
    linux

  • 解決方法
    我發如今進行第一步git clone命令時候,沒有用到我碼雲的https地址,而且在此地址的基礎上cd一個後面部分的文件夾;好比個人碼雲https的地址爲https://gitee.com/yuchao20189220/over_20189220java.git,因此以下圖所示
    git

  • 遇到問題
    運行一下"statistics.sh"腳本的時候,發現:
    編程

  • 解決方法
    app

  • "statistics.sh"腳本運行結果圖
    函數

看書部分

  • 首先,對象的建立:類名 對象名=new 類名();也許大多數學習java的都會寫,可是理解方面是這樣的,new一個類名,就會獲得一個對象,而這個對象的類型就是這個類名的類型好比說:Car car=new Car();就是經過new一個Car類名,獲得car這個對象,而這個對象就是Car類型的。
  • 類必須先定義才能使用。類是建立對象的模板,建立對象也叫類的實例化。package com.cnblogs;//定義包的格式,關鍵詞package包的名字最規範的格式是域名的反寫,好比com.什麼
public class People {//class關鍵字,定義類的關鍵字,People是類的名稱
    
    public String name;//類的屬性
    public String sex;
    public int age;   

 //類的方法 
    public void sleep(){
        System.out.println("人疲倦的時候喜歡睡覺覺");
    }
    
    public void eat(){
        System.out.println("人飢餓的時候喜歡吃飯飯");
    }
    public static void main(String[] args) {//主函數
        People p=new People();//對象的實例化
        p.eat();//調用類的方法
        p.sleep();
    }

}
  • 3:構造方法,構造方法的名稱必須與類的名稱相同,而且沒有返回值。每一個類都有構造方法。若是沒有顯式地爲類定義構造方法,Java編譯器將會爲該類提供一個默認的構造方法。
public class People {
    
    public String name;
    public String sex;
    public int age;
    
    public People(){//默認的構造方法,初始化對象的時候調用默認構造方法
        System.out.println("類默認的構造方法,不含參數");
    }
    public People(String name){//含參的構造方法
        System.out.println("含參的構造方法");
    }
    public void sleep(){
        System.out.println("人疲倦的時候喜歡睡覺覺");
    }
    
    public void eat(){
        System.out.println("人飢餓的時候喜歡吃飯飯");
    }
    public static void main(String[] args) {
        People p=new People();
        p.eat();
        p.sleep();
    }
    
}
  • Java 經過修飾符來控制類、屬性和方法的訪問權限和其餘功能,一般放在語句的最前端。權限(訪問)修飾符關鍵字包含:public ,private ,protected,另一個就是默認的;public:對全部類可見,包含本類,同包其餘類或者子類,其餘包的類或者子類。protected:對本類可見,對同包其餘類或者子類可見,對其餘包的類或者子類不能夠見。private:只對本類可見,對同包其餘類或者子類不可見,對其餘包的類或者子類不能夠見。默認:則是對同一包內可見。實例以下:
package com.cnblogs;

public class Men {
    
    public String name;//共有屬性
    private int age;//私有屬性
    protected String sex;//受保護的屬性
    int a=10;//默認的
}
  • 變量的做用域,包含所有變量和局部變量舉例以下:
package com.cnblogs;

public class Men {
    //所有變量,在整個做用域均可以使用
    public String name;//共有屬性
    private int age;//私有屬性
    protected String sex;//受保護的屬性
    int a=10;
    public static void main(String[] args) {
        //定義的i是局部變量,只能夠在for循環這個局部內進行使用
        for(int i=0;i<10;i++){
            System.out.println("局部變量,在能夠在局部進行使用"+i);
        }
    }
    
}
  • this 關鍵字用來表示當前對象自己,或當前類的一個實例,經過 this 能夠調用本對象的全部方法和屬性。成員變量與方法內部的變量重名時,但願在方法內部調用成員變量,怎麼辦呢?這時候只能使用this。做爲方法名來初始化對象,也就是至關於調用本類的其它構造方法,它必須做爲構造方法的第一句。做爲參數傳遞,須要在某些徹底分離的類中調用一個方法,並將當前對象的一個引用做爲參數傳遞時。
package com.cnblogs;

public class Dog {
    
    int a=21;
    int b=12;
    
    public Dog(){//this關鍵字做爲方法名來初始化對象
        this(23,43);
    }
    
    public Dog(int a, int b) {
        // TODO Auto-generated constructor stub
        this.a=a;
        this.b=b;
        System.out.println(a+" "+b);
    }

    public void add(){//經過this關鍵字能夠調用類的屬性和方法
        int c=this.a+this.b;
        System.out.println(c);
    }
    
    public void setA(int a){//使用this關鍵字區分同名變量
        this.a=a;
    }
    public int getA(){
        return a;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Dog d=new Dog();
        d.add();
        
        d.setA(44);
        int dd=d.getA();
        System.out.println(dd);
    }

}
  • JAVA中方法的重載(構造方法也能夠重載)即方法的名字相同,而方法的參數類型,個數,順序不一樣即爲方法的重載注意1:聲明爲final的方法不能夠重載,聲明爲static的方法不能被重載,可是可以被再次聲明。注意2:僅僅是返回值類型不一樣,不能構成方法的重載
package com.cnblogs;

public class Cat {
    
    public void cat(){
        System.out.println("方法的重載");
    }
    public void cat(int a,int b){
        System.out.println("方法的重載,方法中參數的個數");
    }
    public void cat(String c,int d){
        System.out.println("方法的重載,方法中參數的類型不一樣");
    }
    public void  cat(int e,String f){
        System.out.println("方法的重載,方法中參數順序不一樣");
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
    }

}
  • 包裝類(Wrapper Classes),拆箱和裝箱.基本類型和對應的包裝類能夠相互裝換:由基本類型向對應的包裝類轉換稱爲裝箱,例如把double包裝成 Double 類的對象;包裝類向對應的基本類型轉換稱爲拆箱,例如把 Integer 類的對象從新簡化爲 int。
package com.cnblogs;

public class Sun {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int a=32;
        Integer i=new Integer(a);
        System.out.println("手動進行裝箱"+i);
        
        int a2=i.intValue();//此方法的做用是以int值返回此Integer對象
        System.out.println("手動進行拆箱"+a2);

   int a4=54;
        Integer i4=a4;//自動裝箱
        System.out.println("自動進行裝箱"+i4);
    }

}

接口和抽象類

對於面向對象編程來講,抽象是它的一大特徵之一。在Java中,能夠經過兩種形式來體現OOP的抽象:接口和抽象類。學習

  • 在瞭解抽象類以前,先來了解一下抽象方法。抽象方法是一種特殊的方法:它只有聲明,而沒有具體的實現。抽象方法的聲明格式爲:
abstract void fun();
  • 抽象方法必須用abstract關鍵字進行修飾。若是一個類含有抽象方法,則稱這個類爲抽象類,抽象類必須在類前用abstract關鍵字修飾。由於抽象類中含有無具體實現的方法,因此不能用抽象類建立對象。從這裏能夠看出,抽象類就是爲了繼承而存在的,若是你定義了一個抽象類,卻不去繼承它,那麼等於白白建立了這個抽象類,由於你不能用它來作任何事情。對於一個父類,若是它的某個方法在父類中實現出來沒有任何意義,必須根據子類的實際需求來進行不一樣的實現,那麼就能夠將這個方法聲明爲abstract方法,此時這個類也就成爲abstract類了。
    包含抽象方法的類稱爲抽象類,但並不意味着抽象類中只能有抽象方法,它和普通類同樣,一樣能夠擁有成員變量和普通的成員方法。注意,抽象類和普通類的主要有三點區別:
  • 1)抽象方法必須爲public或者protected(由於若是爲private,則不能被子類繼承,子類便沒法實現該方法),缺省狀況下默認爲public。
  • 2)抽象類不能用來建立對象;
  • 3)若是一個類繼承於一個抽象類,則子類必須實現父類的抽象方法。若是子類沒有實現父類的抽象方法,則必須將子類也定義爲爲abstract類。在其餘方面,抽象類和普通的類並無區別。
  • 接口,英文稱做interface,在軟件工程中,接口泛指供別人調用的方法或者函數。從這裏,咱們能夠體會到Java語言設計者的初衷,它是對行爲的抽象。在Java中,定一個接口的形式以下:
[public] interface InterfaceName {`
}
  • 接口中能夠含有 變量和方法。可是要注意,接口中的變量會被隱式地指定爲public static final變量(而且只能是public static final變量,用private修飾會報編譯錯誤),而方法會被隱式地指定爲public abstract方法且只能是public abstract方法(用其餘關鍵字,好比private、protected、static、 final等會報編譯錯誤),而且接口中全部的方法不能有具體的實現,也就是說,接口中的方法必須都是抽象方法。從這裏能夠隱約看出接口和抽象類的區別,接口是一種極度抽象的類型,它比抽象類更加「抽象」,而且通常狀況下不在接口中定義變量。this

  • 抽象類和接口的區別
    1.語法層面上的區別設計

  1)抽象類能夠提供成員方法的實現細節,而接口中只能存在public abstract 方法;

  2)抽象類中的成員變量能夠是各類類型的,而接口中的成員變量只能是public static final類型的;

  3)接口中不能含有靜態代碼塊以及靜態方法,而抽象類能夠有靜態代碼塊和靜態方法;

  4)一個類只能繼承一個抽象類,而一個類卻能夠實現多個接口。

2.設計層面上的區別

  1)抽象類是對一種事物的抽象,即對類抽象,而接口是對行爲的抽象。抽象類是對整個類總體進行抽象,包括屬性、行爲,可是接口倒是對類局部(行爲)進行抽象。舉個簡單的例子,飛機和鳥是不一樣類的事物,可是它們都有一個共性,就是都會飛。那麼在設計的時候,能夠將飛機設計爲一個類Airplane,將鳥設計爲一個類Bird,可是不能將 飛行 這個特性也設計爲類,所以它只是一個行爲特性,並非對一類事物的抽象描述。此時能夠將 飛行 設計爲一個接口Fly,包含方法fly( ),而後Airplane和Bird分別根據本身的須要實現Fly這個接口。而後至於有不一樣種類的飛機,好比戰鬥機、民用飛機等直接繼承Airplane便可,對於鳥也是相似的,不一樣種類的鳥直接繼承Bird類便可。從這裏能夠看出,繼承是一個 "是否是"的關係,而 接口 實現則是 "有沒有"的關係。若是一個類繼承了某個抽象類,則子類一定是抽象類的種類,而接口實現則是有沒有、具有不具有的關係,好比鳥是否能飛(或者是否具有飛行這個特色),能飛行則能夠實現這個接口,不能飛行就不實現這個接口。

  2)設計層面不一樣,抽象類做爲不少子類的父類,它是一種模板式設計。而接口是一種行爲規範,它是一種輻射式設計。什麼是模板式設計?最簡單例子,你們都用過ppt裏面的模板,若是用模板A設計了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,若是它們的公共部分須要改動,則只須要改動模板A就能夠了,不須要從新對ppt B和ppt C進行改動。而輻射式設計,好比某個電梯都裝了某種報警器,一旦要更新報警器,就必須所有更新。也就是說對於抽象類,若是須要添加新的方法,能夠直接在抽象類中添加具體的實現,子類能夠不進行變動;而對於接口則不行,若是接口進行了變動,則全部實現這個接口的類都必須進行相應的改動。

多態

  • 定義,多態指容許不一樣類的對象對同一消息作出響應。即同一消息能夠根據發送對象的不一樣而採用多種不一樣的行爲方式。(發送消息就是函數調用)。
  • 實現多態的技術稱爲:動態綁定(dynamic binding),是指在執行期間判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法。
  • 現實中,關於多態的例子不勝枚舉。比方說按下 F1 鍵這個動做,若是當前在 Flash 界面下彈出的就是 AS 3 的幫助文檔;若是當前在 Word 下彈出的就是 Word 幫助;在 Windows 下彈出的就是 Windows 幫助和支持。同一個事件發生在不一樣的對象上會產生不一樣的結果。
  • 多態存在的三個必要條件1、要有繼承;2、要有重寫;3、父類引用指向子類對象。

  • Java中多態的分類:
    在java中,多態大體能夠分爲如下幾種狀況:

1)person爲父類,student爲子類。那麼:person p=new student();

2)fliable爲接口,bird爲實現接口的類,那麼:fliable f=new bird();

3)fliable爲抽象類,bird爲繼承fliable的類,那麼:fliablef=new bird();

多態時須要說明p聲明爲父類的引用,但他實際爲子類引用。可是他只能調用父類中的方法。若是子類中的方法覆蓋了父類方法,那麼將調用父類方法(虛方法調用)。接口多態也是一樣的,也許你會問,若是f要調用本身的方法,那豈不是出錯了?其實這裏也是方法的覆蓋,由於實現接口的子類確定會實現接口中的方法, 因此此種狀況下調用的是bird中的方法。可是若是bird有一個方法在接口中沒有定義,那麼f不能調用。

相關文章
相關標籤/搜索