JAVA入門2

課程地址:https://www.imooc.com/learn/124java

powerDesign-uml下載地址:http://www.uml.org.cn/UMLTools/powerDesigner/powerDesignerToolIntroduction.htm框架

 

1、類和對象

1.1對象

1.2定義java中的類

定義類的首字母要大寫eclipse

1.3使用java的對象

常常把屬性稱爲實例變量測試

默認值是0this

1.4成員變量,局部變量

成員變量spa

調用成員變量.net

局部變量只能在內部使用3d

1.5java中的構造法方法

1.6Java 中的 static 使用之靜態變量

咱們能夠基於一個類建立多個該類的對象,每一個對象都擁有本身的成員,互相獨立。然而在某些時候,咱們更但願該類全部的對象共享同一個成員。此時就是 static 大顯身手的時候了!!code

Java 中被 static 修飾的成員稱爲靜態成員或類成員。它屬於整個類全部,而不是某個對象全部,即被類的全部對象所共享。靜態成員可使用類名直接訪問,也可使用對象名進行訪問。固然,鑑於他做用的特殊性更推薦用類名訪問~~htm

使用 static 能夠修飾變量、方法和代碼塊。

本小節,咱們先認識一下靜態變量。

例如,咱們在類中定義了一個 靜態變量 hobby ,操做代碼以下所示:

運行結果:

要注意哦:靜態成員屬於整個類,當系統第一次使用該類時,就會爲其分配內存空間直到該類被卸載纔會進行資源回收!~~

1.7Java 中的 static 使用之靜態方法

與靜態變量同樣,咱們也可使用 static 修飾方法,稱爲靜態方法或類方法。其實以前咱們一直寫的 main 方法就是靜態方法。靜態方法的使用如:

運行結果:

須要注意:

一、 靜態方法中能夠直接調用同類中的靜態成員,但不能直接調用非靜態成員。如:

若是但願在靜態方法中調用非靜態變量,能夠經過建立類的對象,而後經過對象來訪問非靜態變量。如:

二、 在普通成員方法中,則能夠直接訪問同類的非靜態變量和靜態變量,以下所示:

三、 靜態方法中不能直接調用非靜態方法,須要經過對象來訪問非靜態方法。如:

public class HelloWorld {
    
    // 定義靜態變量score1
    static int score1 = 86;
    // 定義靜態變量score2
	static           int score2 = 92; 

    // 定義靜態方法sum,計算成績總分,並返回總分
	public static    int sum() { 
      
      return score1+score2;
      
	}

	public static void main(String[] args) {
        
        // 調用靜態方法sum並接收返回值
		int allScore =HelloWorld.sum();
        
		System.out.println("總分:" + allScore);
	}
}

1.8static 使用之靜態初始化塊

Java 中能夠經過初始化塊進行數據賦值。如:

在類的聲明中,能夠包含多個初始化塊,當建立類的實例時,就會依次執行這些代碼塊。若是使用 static 修飾初始化塊,就稱爲靜態初始化塊。

須要特別注意:靜態初始化塊只在類加載時執行,且只會執行一次,同時靜態初始化塊只能給靜態變量賦值,不能初始化普通的成員變量

咱們來看一段代碼:

運行結果:

經過輸出結果,咱們能夠看到,程序運行時靜態初始化塊最早被執行,而後執行普通初始化塊,最後才執行構造方法。因爲靜態初始化塊只在類加載時執行一次,因此當再次建立對象 hello2 時並未執行靜態初始化塊。

2、封裝

2.1面向對象特性-封裝

 

設爲私有屬性

發現不能調用

get和set方法

使用

2.2使用包管理java中的類

2.3訪問修飾符

2.4this關鍵字

類裏面自動建立get,set方法

調用方法

2.5java中的內部類

定義:

內部類( Inner Class )就是定義在另一個類裏面的類。與之對應,包含內部類的類被稱爲外部類。

內部類的主要做用以下:

1. 內部類提供了更好的封裝,能夠把內部類隱藏在外部類以內,不容許同一個包中的其餘類訪問該類

2. 內部類的方法能夠直接訪問外部類的全部數據,包括私有的數據

3. 內部類所實現的功能使用外部類一樣能夠實現,只是有時使用內部類更方便、

分類:

  • 成員內部類
  • 靜態內部類
  • 方法內部類
  • 匿名內部類
//外部類HelloWorld
public class HelloWorld {
    
    // 內部類Inner,類Inner在類HelloWorld的內部
    public class Inner {
        
		// 內部類的方法
		public void show() {
			System.out.println("welcome to imooc!");
		}
	}
    
	public static void main(String[] args) {
        
        // 建立外部類對象
		HelloWorld hello = new HelloWorld();
        // 建立內部類對象
		Inner i = hello.new Inner();
        // 調用內部類對象的方法
		i.show();
	}
}

(1)成員內部類:

內部類中最多見的就是成員內部類,也稱爲普通內部類。咱們來看以下代碼:

運行結果爲:

從上面的代碼中咱們能夠看到,成員內部類的使用方法

一、 Inner 類定義在 Outer 類的內部,至關於 Outer 類的一個成員變量的位置,Inner 類可使用任意訪問控制符,如 public 、 protected 、 private 等

二、 Inner 類中定義的 test() 方法能夠直接訪問 Outer 類中的數據,而不受訪問控制符的影響,如直接訪問 Outer 類中的私有屬性a

三、 定義了成員內部類後,必須使用外部類對象來建立內部類對象,而不能直接去 new 一個內部類對象,即:內部類 對象名 = 外部類對象.new 內部類( );

四、 編譯上面的程序後,會發現產生了兩個 .class 文件

其中,第二個是外部類的 .class 文件,第一個是內部類的 .class 文件,即成員內部類的 .class 文件老是這樣:外部類名$內部類名.class

另外,友情提示哦:

一、 外部類是不能直接使用內部類的成員和方法滴

可先建立內部類的對象,而後經過內部類的對象來訪問其成員變量和方法。

二、 若是外部類和內部類具備相同的成員變量或方法,內部類默認訪問本身的成員變量或方法,若是要訪問外部類的成員變量,可使用 this 關鍵字。如:

運行結果:

//外部類HelloWorld
public class HelloWorld{
    
    //外部類的私有屬性name
    private String name = "imooc";
    
    //外部類的成員屬性
    int age = 20;
    
	//成員內部類Inner
	public class Inner {
		String name = "愛慕課";
        //內部類中的方法
		public void show() { 
			System.out.println("外部類中的name:" +  HelloWorld.this.name                );
			System.out.println("內部類中的name:" +  name                );
			System.out.println("外部類中的age:" + age);
		}
	}
    
	//測試成員內部類
	public static void main(String[] args) {
        
        //建立外部類的對象
		HelloWorld o = new HelloWorld (); 
        
        //建立內部類的對象
		Inner inn = o.new Inner();             ;
        
        //調用內部類對象的show方法
		inn.show();
	}
}

(2)靜態內部類

特色是:

一、 靜態內部類不能直接訪問外部類的非靜態成員,但能夠經過 new 外部類().成員 的方式訪問 

二、 若是外部類的靜態成員與內部類的成員名稱相同,可經過「類名.靜態成員」訪問外部類的靜態成員;若是外部類的靜態成員與內部類的成員名稱不相同,則可經過「成員名」直接調用外部類的靜態成員

三、 建立靜態內部類的對象時,不須要外部類的對象,能夠直接建立 內部類 對象名= new 內部類();

運行結果 : 

//外部類
public class HelloWorld {
    
    // 外部類中的靜態變量score
    private static int score = 84;
    
    // 建立靜態內部類
	public  static        class SInner {
        // 內部類中的變量score
        int score = 91;
        
		public void show() {
			System.out.println("訪問外部類中的score:" +  HelloWorld.score          );
			System.out.println("訪問內部類中的score:" + score);
		}
	}

	// 測試靜態內部類
	public static void main(String[] args) {
		// 直接建立內部類的對象
        SInner si=new SInner();
        
        
        // 調用show方法
		si.show();
	}
}

(3)方法內部類

方法內部類就是內部類定義在外部類的方法中,方法內部類只在該方法的內部可見,即只在該方法內可使用。

必定要注意哦:因爲方法內部類不能在外部類的方法之外的地方使用,所以方法內部類不能使用訪問控制符和 static 修飾符。

//外部類
public class HelloWorld {
    
    private String name = "愛慕課";
    
    // 外部類中的show方法
    public void show() { 
		// 定義方法內部類
		class MInner {
			int score = 83;
			public int getScore() {
				return score + 10;
			}
		}
        
		// 建立方法內部類的對象
        MInner mi= new MInner();
        
        // 調用內部類的方法
		int newScore=mi.getScore();
        
		System.out.println("姓名:" + name + "\n加分後的成績:" + newScore);
	}
    
	// 測試方法內部類
	public static void main(String[] args) {
        
		// 建立外部類的對象
        HelloWorld mo=new HelloWorld();
        
        // 調用外部類的方法
		mo.show();
	}
}

 

3、繼承

3.1java中的繼承

父類寫好

建立子類,並創建關係

建立測試類

3.2java中的方法重寫

測試調用

3.3繼承初始化順序

先執行父類的構造方法,再執行子類的構造方法

10被20覆蓋了,屬性的初始化是先執行的,而後執行構造方法

3.4final關鍵字

(1)final修飾類

子類會報錯

(2)final修飾方法

子類方法不容許覆蓋或重寫

(3)final修飾屬性

子類屬性報錯

final關鍵字修飾屬性,系統不會自動初始化

(4)final修飾變量

不容許修改變量

3.5super的使用

main裏調用屬性

main調用父類方法

main調用子類方法

父類無參的構造方法

子類的無參構造方法,隱式的顯示

會自動執行父類構造方法

此時不是第一行,構造方法就不能夠了

注意報錯

子類沒有顯示調用父類的構造方法

父類定義一個有參的構造方法

報錯

3.6java中的object類

包名+地址

eclipse自帶根據對象屬性生成自帶toString方法

執行main後生成

 

即便是兩個對象的屬性值同樣,也是不一樣的地址

相似於==判斷

eclipse提供了生成equals的方法

刪除hash方法

分析

4、多態

4.1java中的多態

建立工程,默認選項

建立父類

建立子類

建立測試類

引用的多種形態

不能子類引用指向父類

父類寫方法

子類重寫方法

obj1()調用的是父類方法

obj2()調用的是子類方法

建立cat類,繼承animal類

cat裏不重寫建立方法

子類繼承父類的方法

子類獨有地方法

main中不能經過繼承調用子類獨有的方法

練習

4.2多態中引用類型的轉換

子類轉換成父類

父類到子類,不容許

強制轉換

強制轉換存在風險,雖然編譯器不保存,可是運行會報錯

如何避免強制轉換風險的問題呢?

使用:instanceof關鍵字

4.3java中的抽象類

定義父類爲抽象類

定義子類,早年電話,繼承父類

建立子類,智能電話

建立測試類

4.5java中的接口

extends關鍵字和implements關鍵字是不能調換的

一般在給接口命名的時候前面會加上一個大寫的‘i’字母,用來區分和普通的類名不一樣

聲明接口的時候,省略掉了abstract關鍵字

聲明接口裏的方法時,也省略了abstract關鍵字

一般abstract關鍵字是不寫的

書寫接口

接口的建立

建立psp類,繼承玩遊戲

用接口來描述

接口的使用

內部類使用後,注意分號結束,經過接口調用

經過new和.直接調用

說明:在安卓開發和高級框架開發中,常常會使用匿名內部類的方式來使用接口

4.6UML簡介

按住鼠標左鍵進行連線

選擇繼承關係

接口定義好

實現關係是虛線,繼承關係是實線

修改父類返回值

子類自動修改

根據圖像生成java語言

和之前作對比

改寫統一名稱方法,從新生成java

5、階段練習

創建父類

建立子類

繼承關係

多態關係

新建抽象類

子類繼承抽象類

效果同樣,可是更合理

6、綜合練習

分析同窗案例:

右邊更合理,不一樣類型的車用不一樣類

使用繼承關係

使用多態

相關文章
相關標籤/搜索