Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言偎谁。Java 技術(shù)具有卓越的通用性、高效性纲堵、平臺移植性和安全性巡雨,廣泛應(yīng)用于PC、數(shù)據(jù)中心席函、游戲控制臺铐望、科學(xué)超級計算機、移動電話和互聯(lián)網(wǎng)茂附,同時擁有全球最大的開發(fā)者專業(yè)社群正蛙。
給你學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm
每天更新學(xué)習(xí)筆記,大家一起學(xué)習(xí)营曼!
不喜勿噴乒验,謝謝!
面向?qū)ο笏枷敫攀?/b>
面向?qū)ο笫腔诿嫦蜻^程的編程思想
面向?qū)ο笏枷胩攸c
是一種更符合我們思想習(xí)慣的思想
可以將復(fù)雜的事情簡單化
將我們從執(zhí)行者變成了指揮者
角色發(fā)生了轉(zhuǎn)換
面向?qū)ο笫鞘裁匆馑寄兀?/p>
面向?qū)ο蟪绦蛟O(shè)計是將人們認(rèn)識世界過程中普遍采用的思維方法應(yīng)用到程序設(shè)計中蒂阱。對象是現(xiàn)實世界中存在的事物锻全,它們是有形的,如某個人蒜危、某種物品虱痕;也可以是無形的,如某項計劃辐赞、某次商業(yè)交易部翘。對象是構(gòu)成現(xiàn)實世界的一個獨立單位,人們對世界的認(rèn)識响委,是從分析對象的特征入手的新思。
對象的特征分為靜態(tài)特征和動態(tài)特征兩種。靜態(tài)的特征指對象的外觀赘风、性質(zhì)夹囚、屬性(如某個人具有名字、身高邀窃、體重等)荸哟;動態(tài)的特征指對象具有的功能假哎、行為(如人具有吃飯、睡覺鞍历、打人舵抹、偷稅、漏稅)等劣砍【逵迹客觀事物是錯綜復(fù)雜的,但人們總是從某一目的出發(fā)刑枝,運用抽象分析的能力香嗓,從眾多的特征中抽取最具代表性、最能反映對象本質(zhì)的若干特征加以詳細(xì)研究装畅。
人們將對象的靜態(tài)特征抽象為屬性靠娱,用數(shù)據(jù)來描述,在Java語言中稱之為變量洁灵;人們將對象的動態(tài)特征抽象為行為饱岸,用一組代碼來表示,完成對數(shù)據(jù)的操作徽千,在Java語言中稱之為方法苫费,。一個對象由一組屬性和一組對屬性進行操作的方法構(gòu)成双抽。
類
將具有相同屬性及相同行為的一組對象稱為類百框。廣義地講,具有共同性質(zhì)的事物的集合就稱為類牍汹。如:博拉圖對人作如下定義:人是沒有毛能直立行走的動物铐维。在博拉圖的定義中“人”是一個類,具有"沒有毛慎菲、直立行走"等一些區(qū)別于其它事物的共同特征嫁蛇;而張三、李四露该、王五等一個個具體的人睬棚,是"人"這個類的一個個"對象"。如下圖:
小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零解幼,五五四抑党,六零七 】,無論你是大牛還是小白撵摆,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習(xí)底靠!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享特铝!
類:class
類與對象的關(guān)系
在面向?qū)ο蟪绦蛟O(shè)計中暑中,類是一個獨立的單位壹瘟,它有一個類名,其內(nèi)部包括成員變量鳄逾,用于描述對象的屬性俐筋;還包括類的成員方法,用于描述對象的行為严衬。在Java程序設(shè)計中,類被認(rèn)為是一種抽象數(shù)據(jù)類型笆呆,這種數(shù)據(jù)類型请琳,不但包括數(shù)據(jù),還包括方法赠幕。這大大地擴充了數(shù)據(jù)類型的概念俄精。
類是一個抽象的概念,要利用類的方式來解決問題榕堰,必須用類創(chuàng)建一個實例化的類對象竖慧,然后通過類對象去訪問類的成員變量,去調(diào)用類的成員方法來實現(xiàn)程序的功能逆屡。這如同“汽車”本身是一個抽象的概念圾旨,只有使用了一輛具體的汽車,才能感受到汽車的功能魏蔗。
一個類可創(chuàng)建多個類對象砍的,它們具有相同的屬性模式,但可以具有不同的屬性值莺治。Java程序為每一個類對象都開辟了內(nèi)存空間廓鞠,以便保存各自的屬性值。對象與對象之間也可以相互聯(lián)系和相互作用谣旁,我們把這種方式稱為“消息”床佳。 一個消息主要由5部分組成:發(fā)送消息的對象、接收消息的對象榄审、消息傳遞辦法砌们、消息內(nèi)容(參數(shù))、反饋瘟判。
面向?qū)ο蟮某绦蛟O(shè)計有四個主要特征:抽象怨绣、封裝、繼承拷获、多態(tài)篮撑。
抽象
類的定義中明確指出類是一組具有內(nèi)部狀態(tài)和運動規(guī)律對象的抽象,抽象是一種從一般的觀點看待事物的方法匆瓜,它要求我們集中于事物的本質(zhì)特征(內(nèi)部狀態(tài)和運動規(guī)律)赢笨,而非具體細(xì)節(jié)或具體實現(xiàn)未蝌。面向?qū)ο蠊膭钗覀冇贸橄蟮挠^點來看待現(xiàn)實世界,也就是說茧妒,現(xiàn)實世界是一組抽象的對象——類組成的萧吠。
封裝
封裝是面向?qū)ο蟮姆椒ㄋ鶓?yīng)遵循的一個重要原則。它有兩個含義:一是指把對象的屬性和行為看成一個密不可分的整體桐筏,將這兩者“封裝”在一個不可分割的獨立單位(即對象)中纸型。另一層含義指“信息隱蔽”,把不需要讓外界知道的信息隱藏起來梅忌,有些對象的屬性及行為允許外界用戶知道或使用狰腌,但不允許更改,而另一些屬性或行為牧氮,則不允許外界知曉琼腔;或只允許使用對象的功能,而盡可能隱蔽對象的功能實現(xiàn)細(xì)節(jié)踱葛。
封裝機制在程序設(shè)計中表現(xiàn)為丹莲,把描述對象屬性的變量及實現(xiàn)對象功能的方法合在一起,定義為一個程序單位尸诽,并保證外界不能任意更改其內(nèi)部的屬性值甥材,也不能任意調(diào)動其內(nèi)部的功能方法。
封裝機制的另一個特點是性含,為封裝在一個整體內(nèi)的變量及方法規(guī)定了不同級別的“可見性”或訪問權(quán)限擂达。
繼承
繼承是面向?qū)ο蠓椒ㄖ械闹匾拍睿⑶沂翘岣哕浖_發(fā)效率的重要手段胶滋。首先擁有反映事物一般特性的類板鬓,然后在其基礎(chǔ)上派生出反映特殊事物的類。如已有的汽車的類究恤,該類中描述了汽車的普遍屬性和行為俭令,進一步再產(chǎn)生轎車的類,轎車的類是繼承于汽車類部宿,轎車類不但擁有汽車類的全部屬性和行為抄腔,還增加轎車特有的屬性和行為。
在Java程序設(shè)計中理张,已有的類可以是Java開發(fā)環(huán)境所提供的一批最基本的程序——類庫赫蛇。用戶開發(fā)的程序類是繼承這些已有的類。這樣雾叭,現(xiàn)在類所描述過的屬性及行為悟耘,即已定義的變量和方法,在繼承產(chǎn)生的類中完全可以使用织狐。被繼承的類稱為父類或超類暂幼,而經(jīng)繼承產(chǎn)生的類稱為子類或派生類筏勒。根據(jù)繼承機制,派生類繼承了超類的所有成員旺嬉,并相應(yīng)地增加了自己的一些新的成員管行。
面向?qū)ο蟪绦蛟O(shè)計中的繼承機制,大大增強了程序代碼的可復(fù)用性邪媳,提高了軟件的開發(fā)效率捐顷,降低了程序產(chǎn)生錯誤的可能性,也為程序的修改擴充提供了便利。
若一個子類只允許繼承一個父類懂扼,稱為單繼承;若允許繼承多個父類,稱為多繼承技扼。目前許多面向?qū)ο蟪绦蛟O(shè)計語言不支持多繼承。而Java語言通過接口(interface)的方式來彌補由于Java不支持多繼承而帶來的子類不能享用多個父類的成員的缺憾专甩。
繼承
多態(tài)
多態(tài)是面向?qū)ο笤O(shè)計語言的基本特征遮晚。僅僅是將數(shù)據(jù)和方法捆綁在一起,進行類的封裝渣蜗,使用一些簡單的繼承屠尊,還不能算是真正應(yīng)用了面向?qū)ο蟮脑O(shè)計思想。多態(tài)性是面向?qū)ο蟮木韪健6鄳B(tài)性可以簡單地概括為“一個接口讼昆,多種方法”。
多態(tài)性是指同名的方法可在不同的類中具有不同的運動規(guī)律骚烧。在父類演繹為子類時浸赫,類的運動規(guī)律也同樣可以演繹,演繹使子類的同名運動規(guī)律或運動形式更具體赃绊,甚至子類可以有不同于父類的運動規(guī)律或運動形式既峡。不同的子類可以演繹出不同的運動規(guī)律。如動物都會吃碧查,而羊和狼吃的方式和內(nèi)容都不一樣运敢。如:警車鳴笛,普通人反應(yīng)一般忠售,逃犯聽見會大驚失色传惠。警車鳴笛(同一種行為),導(dǎo)致普通人和逃犯不同反應(yīng)(多種形態(tài))稻扬。再如卦方,畫出昆蟲的圖片,對螞蟻和對蜘蛛這2種昆蟲畫出的是不同的圖片泰佳。通常是指對于同一個消息愿汰、同一種調(diào)用困后,在不同的場合,不同的情況下衬廷,執(zhí)行不同的行為摇予。
Java語言中含有方法重載與成員覆蓋兩種形式的多態(tài)。
方法重載:也叫靜態(tài)多態(tài)吗跋。在一個類中侧戴,允許多個方法使用同一個名字,但方法的參數(shù)不同跌宛,完成的功能也不同酗宋。
成員覆蓋:也叫動態(tài)多態(tài)。子類與父類允許具有相同的變量名稱疆拘,但數(shù)據(jù)類型不同蜕猫,允許具有相同的方法名稱,但完成的功能不同哎迄。
多態(tài)的好處:
A:提高了代碼的維護性(繼承保證)
B:提高了代碼的擴展性(由多態(tài)保證)
多態(tài)的弊端:
不能使用子類的特有功能回右。
類與對象
面向?qū)ο蟮木幊趟枷肓D使在計算機語言中對事物的描述與現(xiàn)實世界中該事物的本來面目盡可能地一致,類(class)和對象(object)就是面向?qū)ο蠓椒ǖ暮诵母拍钍俊n愂菍δ骋活愂挛锏拿枋鱿杷福浅橄蟮摹⒏拍钌系亩x旨涝;對象是實際存在的該類事物的個體蹬屹,因而也稱實例(Instance)“谆可以這么說:類是對象的抽象慨默;對象是類的實例。如圖5-3就是一個說明類與對象的典型范例:
類與對象的實例化說明
小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零弧腥,五五四业筏,六零七 】,無論你是大牛還是小白鸟赫,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習(xí)蒜胖!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享抛蚤!
上圖中台谢,汽車設(shè)計圖就是“類”,由這個圖紙設(shè)計出來的若干的汽車就是按照該類產(chǎn)生的“對象”岁经∨缶冢可見,類描述了對象的屬性和對象的行為,類是對象的模板樊拓。對象是類的實例纠亚,是一個實實在在的個體,一個類可以對應(yīng)多個對象筋夏。可見蒂胞,如果將對象比作汽車,那么類就是汽車的設(shè)計圖紙条篷,所以面向?qū)ο蟪绦蛟O(shè)計的重點是類的設(shè)計骗随,而不是對象的設(shè)計。
同一個類按同種方法產(chǎn)生出來的多個對象赴叹,其開始的狀態(tài)都是一樣的鸿染,但是修改其中一個對象的時候,其他的對象是不會受到影響的乞巧,比如改裝第一輛汽車的時候涨椒,其他的汽車是不會受到影響的。
內(nèi)部類和匿名類
1:形式參數(shù)和返回值的問題
(1)形式參數(shù):
類名:需要該類的對象
抽象類名:需要該類的子類對象
接口名:需要該接口的實現(xiàn)類對象
(2)返回值類型:
類名:返回的是該類的對象
抽象類名:返回的是該類的子類對象
接口名:返回的是該接口的實現(xiàn)類的對象
(3)鏈?zhǔn)骄幊?/p>
對象.方法1().方法2().......方法n();
這種用法:其實在方法1()調(diào)用完畢后绽媒,應(yīng)該一個對象蚕冬;
方法2()調(diào)用完畢后,應(yīng)該返回一個對象些椒。
方法n()調(diào)用完畢后,可能是對象掸刊,也可以不是對象免糕。
2:包
(1)其實就是文件夾
(2)作用:
A:區(qū)分同名的類
B:對類進行分類管理
a:按照功能分
b:按照模塊分
(3)包的定義
package 包名;
多級包用.分開。
(4)注意事項:
A:package語句必須在文件中的第一條有效語句
B:在一個java文件中忧侧,只能有一個package
C:如果沒有package石窑,默認(rèn)就是無包名
(5)帶包的編譯和運行
A:手動式
B:自動式(掌握)
javac -d . HelloWorld.java
3:導(dǎo)包
(1)我們多次使用一個帶包的類,非常的麻煩蚓炬,這個時候松逊,Java就提供了一個關(guān)鍵字import。
(2)格式:
import 包名...類名;
另一種:
import 包名...*;(不建議)
(3)package,import,class的順序
package > import > class
4:權(quán)限修飾符
(1)權(quán)限修飾符
本類同一個包下不同包下的子類不同包下的無關(guān)類
privateY
默認(rèn)YY
protectedYYY
publicYYYY
(2)這四種權(quán)限修飾符在任意時刻只能出現(xiàn)一種肯夏。
public class Demo {}
5:常見的修飾符
(1)分類:
權(quán)限修飾符:private,默認(rèn),protected,public
狀態(tài)修飾符:static,final
抽象修飾符:abstract
(2)常見的類及其組成的修飾
類:
默認(rèn),public,final,abstract
常用的:public
成員變量:
private,默認(rèn),protected,public,static,final
常用的:private
構(gòu)造方法:
private,默認(rèn),protected,public
常用的:public
成員方法:
private,默認(rèn),protected,public,static,final,abstract
常用的:public
(3)另外比較常見的:
public static final int X = 10;
public static void show() {}
public final void show() {}
public abstract void show();
6:內(nèi)部類
(1)把類定義在另一個類的內(nèi)部经宏,該類就被稱為內(nèi)部類。
舉例:把類B定義在類A中驯击,類B就被稱為內(nèi)部類烁兰。
(2)內(nèi)部類的訪問規(guī)則
A:可以直接訪問外部類的成員,包括私有
B:外部類要想訪問內(nèi)部類成員徊都,必須創(chuàng)建對象
(3)內(nèi)部類的分類
A:成員內(nèi)部類
B:局部內(nèi)部類
(4)成員內(nèi)部類
A:private 為了數(shù)據(jù)的安全性
B:static 為了訪問的方便性
成員內(nèi)部類不是靜態(tài)的:
外部類名.內(nèi)部類名 對象名 = new 外部類名.new 內(nèi)部類名();
成員內(nèi)部類是靜態(tài)的:
外部類名.內(nèi)部類名 對象名 = new 外部類名.內(nèi)部類名();
(5)局部內(nèi)部類
A:局部內(nèi)部類訪問局部變量必須加final修飾沪斟。
B:為什么呢?
因為局部變量使用完畢就消失,而堆內(nèi)存的數(shù)據(jù)并不會立即消失暇矫。
所以主之,堆內(nèi)存還是用該變量择吊,而改變量已經(jīng)沒有了。
為了讓該值還存在槽奕,就加final修飾几睛。
通過反編譯工具我們看到了,加入final后史翘,堆內(nèi)存直接存儲的是值枉长,而不是變量名。
(7)匿名內(nèi)部類
A:是局部內(nèi)部類的簡化形式
B:前提
存在一個類或者接口
C:格式:
new 類名或者接口名() {
重寫方法;
}
D:本質(zhì):
其實是繼承該類或者實現(xiàn)接口的子類匿名對象
(8)匿名內(nèi)部類在開發(fā)中的使用
我們在開發(fā)的時候琼讽,會看到抽象類必峰,或者接口作為參數(shù)。
而這個時候钻蹬,我們知道實際需要的是一個子類對象吼蚁。
如果該方法僅僅調(diào)用一次,我們就可以使用匿名內(nèi)部類的格式簡化问欠。
interface Person {
public abstract void study();
}
class PersonDemo {
public void method(Person p) {
p.study();
}
}
小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零肝匆,五五四,六零七 】顺献,無論你是大牛還是小白旗国,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具注整,很多干貨和技術(shù)資料分享能曾!
class PersonTest {
public static void main(String[] args) {
PersonDemo pd = new PersonDemo();
pd.method(new Person() {
public void study() {
System.out.println("好好學(xué)習(xí),天天向上");
}
});
}
}
這里提供的只是曾經(jīng)學(xué)習(xí)整理的筆記,勿噴,謝謝,僅供java愛好者參考!
每日更新,請大家多多關(guān)注.謝謝!!!