Java(六)

來源:互聯網
上載者:User

標籤:重載   常量   int end   優先順序   static關鍵字   取出   多重繼承   last   等於   

介面


一.文法:
public interface 介面名{
public void foo();
}

二.特徵
1.介面不可被實列化
2.實作類別必須實現介面所有方法
3.實作類別可以實現多個介面
4.介面中的變數都是靜態常量,預設是public修飾
5.介面中不能有構造方法
6.介面中的方法全是public修飾的抽象方法

三.步驟:
1.編寫介面--interface
2.實現介面--implements
3.使用介面

四.面向介面編程
1.關係實作類別有何能力,而不關心實現細節
2.面向介面的約定,而不考慮介面的具體實現
3.程式設計是面向介面的約而不考慮具體實現

五.介面比抽象類別的好處
1.可以被多繼承
2.設計和實現完全分離
3.更自然使用多態
4.更容易搭建程式架構
5.更容易實現

多態

多態
一.概念
1.同一種事物,由於條件不同,產生結果不同
2.同一參考型別,使用不同的實列而執行不同的操作
父類引用子類對象

二.步驟
1.編寫父類
2.編寫子類,子類重用父類方法
3.運行時,使用父類的類型,子類的對象

三.類型轉換
1.向上轉型(自動類型轉換)
父類 a=new 子類();
2.向下轉型(強制類型轉換)--發生在向上轉型的基礎上
父類 a=new 子類();
子類 b=(父類)a;

四.實現多態的兩種方式
1.使用父類作為方法形參實現多態
2.使用父類作為方法傳回值實現多態

五.instanceof運算子
對象 instanceof 類或介面
instanceof通常和強制類型轉換結合使用

內部類
1.根據位置的不同Java的內部類分為:靜態內部類、成員內部類、局部內部類、匿名內部類
2.任何內部類都編譯成獨立的class檔案
3.最大的作用:封裝
4.匿名類可以封裝內部概念

靜態內部類
使用static修飾,聲明在類中
靜態內部類中可以訪問外部類的靜態成員
列:public class Foo(){ 外部調用:
static class Woo{}-----------Foo.woo=new Foo.woo();
}
靜態內部類的範圍和靜態變數一樣,都是在類載入的時候就有了

成員內部類
聲明在類中,不使用static,具有類的成員特徵,也就是必須有類的實列才能建立

類的實列,內部類實列可以訪問外部類的成員
列:public class Yoo{ 外部調用:
class MOO{}----------Moo moo=Yoo.new Moo();
}

局部內部類
把類聲明在方法中,就是局部內部類,範圍類似局部變數
局部內部類的方法中,如要訪問外部類的屬性,則必須是final修飾的常量

匿名內部類
1.可以使用在任何地方,就像一般語句
2.文法像建立對象------Date date=new Date{//....}
3.匿名類是對原類的繼承,同時建立了實列,{}就是繼承以後的類體
4.類體中可以使用所有類的文法
5.匿名類不能寫構造方法
6.匿名類可以從抽象類別或介面繼承,必須提供抽象方法的實現


物件導向三個特徵:封裝、繼承、多態
封裝:
文法:屬性私人化(private)、提供相對應的get/set 的方法進行訪問(public)、

在set/get的方法中對屬性的資料 做相對應的商務邏輯的判斷
思想:封裝外面的程式不能直接存取本類的屬性,需要通過本類提供的方法間

接訪問本類的屬性,從而提高代碼的安全性。
涉及到的其他的知識點:
構造方法:用來描述對象建立過程,可以通過構造方法快速建立對象。
this關鍵字:代表本類對象,調用本類的屬性、方法、構造方法。
方法重載:方法名相同,參數列表不相同
繼承:
文法:子類 extends 父類
思想: 多個類所描述的有共同的特徵或行為,就可以將這些
類中共同的部分抽取出來建立他們的父類。
繼承的好處:子類共用父類的代碼,提高了代碼的重用性;代碼
後期擴充和維護,只需添加對應的子類即可。
涉及到的其他的知識點:
super關鍵字:代表父類的對象,調用父類的屬性、方法、構造方法。
abstract關鍵字:抽象,修飾類、修飾方法。
static關鍵字:靜態,修飾屬性、方法、代碼塊、內部類
final關鍵字:最終,修飾屬性、方法、類
方法重寫:方法名相同,參數列表相同,傳回值類型相同,

修飾符大於或等於父類的存取修飾詞
多態:
文法:父類 對象名=new 子類();
思想:父類型的引用可以指向記憶體中的子類對象的記憶體空間,
就可以方便在設計方法的參數和傳回值類型的時候,可以
設計成父類對象,這樣的方法在實現時比較簡潔,在後期
進行擴充時,方法比較容易。
在代碼中,多態的使用更多的是父類引用指向子類對象,
會自動類型轉換(向上轉型),但是有時候也需要調用子類
中自己的東西,這個時候就需要還原子類,叫強制類型轉換
(向下轉型),轉的時候要先使用instanceof運算子做類型的
判斷。

1.final關鍵字可以修飾屬性、方法、類
2.final關鍵字修飾的類不能被繼承,如:String類
3.final關鍵字修飾方法,不能在被子類重寫
4.final關鍵字修飾的變數,初始化以後值不能在發生改變
在Java中使用static和final關鍵字共同修飾的變數稱為常量,常量名為全大寫
如:public static final int AGE=20;
final修飾的參考型別的變數,引用地址不能發生改變,但是值限定的第一層,

引用資料類型的屬性值是可以發生改變的

1.abstract關鍵字表示抽象的意思,可以用來修飾方法、類
修飾的類叫抽象類別,修飾的方法叫抽象方法
2.abstract關鍵字修飾類
存取修飾詞 abstract class 類名(){}
抽象類別用來表示一些抽象的概念
特點:a.抽象類別不能被實列化
b.抽象類別可以有屬性、方法、構造方法,都是用來給子類繼承、調用
c.抽象類別中的方法不一定是抽象方法,抽象方法必須在抽象類別中
3.abstract關鍵字修飾方法
存取修飾詞 abstract 傳回值類型 方法名(參數列表);
抽象方法不需要自己實現,由子類實現
特點:a.抽象方法沒有方法體
b.抽象方法必須出現在抽象類別中
c.一個類繼承抽象類別後必須實現裡面所有的抽象方法
4.抽象類別可以繼承抽象類別

方法重寫
1.方法名相同
2.參數列表相同
3.傳回值相同或其子類
4.存取修飾詞不能嚴於符類
註:@override 檢測方法重寫是否正確
構造方法不能被重寫

八.方法重寫與方法重載的區別

位置 方法名 參數列表 傳回值 存取權限
方法重寫 子類 相同 相同 相同或其子類 不能嚴於父類
方法重載 本類 相同 不同 無關 無關

1.在建立類之前,檢查類是否已載入(檢查硬碟上的class檔案,是否已載入到記憶體中),

如果沒有載入就先載入父類檔案,再載入本類的檔案
Java使用的載入策略:懶惰式載入(按需要載入),用到的時候載入,只載入一次
2.指派至空間遞迴分配所有父類和子類的屬性空間
屬性會自動初始化為“0”值
3.給屬性賦值
4.調用父類構造方法(預設調用父類的無參構造方法)
5.調用本類構造方法

存取修飾詞 本類 同包 子類 其他
private y n n n
預設 y y n n
protected y y y n
public y y y y

註:在類中,只能有一個被public修飾的class

y:yes n:no

一.繼承的優點
1.提高代碼的可重用性(繼承之後子類共用父類代碼)
2.提高代碼的可維護性(後期代碼增加、刪除)

二.繼承的前提
子類和父類之間必須要滿足子類is a 父類的邏輯關係才能有繼承

三.步驟/文法
1.將多個類中共有的屬性、方法提取出來建立父類
存取修飾詞 class 父類{

}
2.在子類後面使用extends關鍵字完成繼承
存取修飾詞 class 子類 extends 父類{

}
3.在子類中可以調用父類的代碼--使用super關鍵字代表父類對象
a.訪問父類構造方法
super();--在子類構造方法中調用且必須是第一據,與this互斥
super(參數列表);
b.訪問父類屬性--前提為屬性不能私人
super.name;
c.訪問父類的方法
super.print();

註:1.父類中的構造方法不會被繼承,但可以被調用
2.子類與父類不在同包中,使用預設訪問修飾許可權的成員不能被繼承
3.private成員不能被繼承

四.多重繼承的關係的初始化順序
父類屬性-->父類構造方法-->子類屬性-->子類構造方法

面對對象設計和開發程式的好處
1.交流更加流暢
2.提高設計和開發效率
物件導向設計的過程
1.發現類
2.發現類的屬性
3.發現類的方法

1.static修飾的資源屬於類層級的資源,靜態資源,對於類所有實列共用的資源
2.static關鍵字可以用來修飾屬性、方法、代碼塊、內部類
a.static修飾屬性:
static修飾的屬性屬於對類所有實列共用的資源
訪問靜態屬性:類名.屬性名稱();
b.static絲素方法:
static修飾的方法屬於靜態方法,可以直接類名.方法名()進行調用,一般是把靜態方法作為

工具方法靜態方法中不能調用對象的資源(對象、屬性、對象方法)
c.static修飾代碼塊
在類載入的時候執行,因為類只載入一次,所以static的代碼塊也只執行一次,一般是

使用static代碼塊來載入一些靜態資源如設定檔
static{ {
//靜態代碼塊 //代碼塊,在建立對象的時候執行
} }
3.static修飾的資源,在類載入期間執行
4.

static、非private修飾 非static、非private修飾

屬性 類屬性、類變數 實列屬性、實列變數

方法 類方法 實列方法

類名.屬性()
調用方式 類名.方法() 對象.屬性()
對象.屬性() 對象.方法()
對象.方法()

歸屬 類 單個對象()

封裝


1.概念:將類的某些資訊隱藏在類的內部,不允許外部程式直接存取,而是通過該類提供的方法來實現對隱藏資訊的操作和訪問、
2.好處:a.只能通過規定的方法訪問資料
b.方法修改實現
c.隱藏類的實現細節
d.方便加入控制語句
3.使用步驟:
a.修改屬性的可見度----設為private
d.建立公有的get/set方法----用於屬性的讀寫
c.在get/set方法中加入屬性控制語句---對屬性值的合法進行判斷

this關鍵字


1.調用屬性:this.health=100;
2.調用方法:this.print();
3.調用構造方法:
a.this()--如果使用,必須是構造方法中的第一條語句
b.this(“小黑”,100,100,“女”)

1.構造方法是用來描述對象建立的過程
構造方法在對象建立的過程中被使用
2.文法:
存取修飾詞 (無傳回值類型) 構造方法名(=類名){
//初始化代碼
}
3.如果沒有寫構造方法,系統會自動提供一個無參的構造方法;
如果類中出現了構造方法,系統不會提供預設的無參的構造方法;
4.方法重載
a.方法名相同
b.參數不同
c.與傳回值,存取修飾詞無關
5.方法簽名
a.文法: 方法簽名=方法名+參數列表 如 add(int,int)
b.Java中不可能出現方法簽名相同的兩個方法

類圖


1.好處:a.用於分析和設計類
b.直觀容易理解

2. dog 類名
+ name:String public 屬性名稱:類型
+health:int public 屬性名稱:類型
-love:int private 屬性名稱:類型
+Print():void public 方法名:傳回值類型

StringBuffer

a.StringBuffer:String增強版
對字串頻繁修改(如字串連結)時,使用StringBuffer類可以提高程式執行效率
b.StringBuffer聲明
StringBuffer SB=newStringBuffer();-----建立空StringBuffer對象
StringBuffer SB=newStringBuffer(“aaa”);------建立一個變數儲存字串aaa
c.StringBuffer使用
轉為String類型:SB.toString();
追加字串:SB.append(“**”);
插入字串:SB.insert(i,“**”);

1.使用StringObject Storage Service字串
String s="Helloword"
String s=new String();
String s=new String("Helloword")

2.String類位於包java.lang包中,具有豐富的方法
計算字串的長度,比較字串,連接字串,提取字串

3.字串長度
文法:方法原理:public int length(){}
調用方法:字串標識符.length();

4.字串比較
String類提供了equals()方法,比較儲存在兩個字元對象內容是否一致(傳回值boolean類型)

equals與==的區別
==:比較是否在同一記憶體空間或比較數字
equals:比較內容是否一致

5.字串字母轉換
使用equalslgnoerCase()方法--字串比較時忽略大小寫
使用toLouerCase()方法--返回字串小寫形式
使用toUpperCase()方法--返回字串大寫形式

6.字串連續
a.使用“+”
b.使用concat()方法
A.concat(B);
B字串將連續到A字串後面

7.字串提取方法
a.搜尋第一個出現的字元ch(或字串value)
public int indexOf(int ch)
public int indexOf(String value)

b..搜尋最後一個出現的字元ch(或字串value)
public int lastindexOf(int ch)
public int lastindexOf(String value)

c.從指定位置尋找字元或字串,返回下標
s.indexOf(尋找字元.指定位置)

8.判斷字串是否一指定格式結尾(返回boolean類型)
s.endsWith(字串)
判斷字串是否一指定格式開頭(返回boolean類型)
s.StartsWith(字串)

9.常用的提取方法
a.public string substring(int index)
提取從位置開始的字串部分--index
b.public String substring(int begininelex,int endindex)
提取begininelex之間的字串部分
c.public String trim()
返回一個前後不含任何空格的調用字串副本

10.字串拆分
String類提供了Split()方法,將一個字串分割為子字串,結果作為字串數組返回

成員變數和局部變數


1.變數聲明的位置決定變數範圍
2.變數範圍確定可在程式中按變數名訪問該變數的地區
3.成員變數:定義在類中的變數(類或其他類中可以調用)
4.局部變數:定義在方法中的變數(方法)
5.區別:a.範圍不同
局部變數的範圍僅限於定義它的方法
成員變數的範圍在整個類內部都是可見的
b.初始值不同
Java會給成員變數一個初始值
Java不會給局部變數賦予初始值
6.在同個方法中,不允許有同名局部變數
在不同方法中,可以有同名的局部變數
在同個類中,成員變數和局部變數同名時,局部變數具有更高的優先順序

方法

一.定義類方法
文法: public 傳回值類型 方法名(){---步驟一:定義方法名和傳回型別
//這裡編寫方法的主體---步驟二:編寫方法體
}

二.方法傳回值
1. 如果方法具有傳回值,方法中必須使用關鍵字return返回該值,傳回值類型為該傳回值的類型
文法: return 運算式 ;
作用: 跳出方法,返回結果
2.如果方法沒有傳回值,傳回值類型為void;

對象和類

一.對象的特徵
1.屬性--對象具有各種特徵
2.每個對象的每個屬性都有特定值
3.方法--對象執行的操作
4.對象:用來描述客觀事物的一個實體,由一組屬性和方法構成

二..類
類是模子,定義對象將會擁有的特徵(屬性)和行為(方法)
類是對象的類型--不同於int類型:具有方法

三.類和對象的關係
類是抽象的概念,僅僅是模板
對象是一個看得見摸得著的具體實體


四.如何建立對象和使用對象
使用對象的步驟
a.建立對象
類名 對象名=new 類名();
b.引用對象成員:使用“.”進行以下操作
引用類的屬性:對象名.屬性
引用類的方法:對象名.方法

Java(六)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.