第一篇:畢向東java教學(xué)視頻跟蹤筆記(寫寫幫推薦)
1.java面向?qū)ο?/p>
1.1靜態(tài)關(guān)鍵字static 用法:
是一個修飾符,用于修飾成員(成員變量,成員函數(shù)),當(dāng)成員被Static修飾后,就多了一種調(diào)用方式,除了可以被對象調(diào)用外,還可以直接被類名調(diào)用(類名.靜態(tài)成員);
特點:
1.隨著類的加載而加載
也就是說:靜態(tài)會隨著類的消失而消失,說明它的生命周期最長; 2.優(yōu)先于對象而存在
明確一點:靜態(tài)是先存在的,對象是后存在的; 3.被所有對象所共享
4.可以直接被類名所調(diào)用
.實例變量與類變量的區(qū)別:
1.存在位置
類變量隨著類的加載而存在存在于方法區(qū)中 實例變量隨著對象的建立而存在于堆內(nèi)存中 2.生命周期
類變量生命周期最長,隨著類的消失而消失 實例變量隨著對象的消失而消失
靜態(tài)使用注意事項
1.靜態(tài)方法只能訪問靜態(tài)成員,非靜態(tài)方法既可以訪問靜態(tài)又可以訪問非靜態(tài);
2.靜態(tài)方法中不可以定義this、super關(guān)鍵字,因為靜態(tài)優(yōu)先于對象存在,所以靜態(tài)方法中不可以出現(xiàn)this; 3.主函數(shù)是靜態(tài)的;
靜態(tài)有利有弊
利處:對對象的共享數(shù)據(jù)進行單獨空間的存儲,節(jié)省空間,沒有必要每一個對象都存儲一份,可以直接被類名調(diào)用
弊端:生命周期過長,訪問出現(xiàn)局限性(靜態(tài)雖好,但只能訪問靜態(tài))
什么時候使用靜態(tài)
幫助文檔制作
靜態(tài)的應(yīng)用
靜態(tài)代碼塊
Jvm新建對象做了哪些操作
1.2設(shè)計模式
代碼實現(xiàn):
餓漢式:
記錄原則:開發(fā)時,建議使用餓漢式
1.3繼承
注意:不能因為要使用其他類的功能,簡化代碼而繼承; 必須是類之間有所屬關(guān)系才可以繼承,所屬關(guān)系為is a;
Java語言中:類關(guān)系只支持單繼承,不支持多繼承,只有在接口與接口之間才支持多繼承,因為存在安全隱患:當(dāng)多個父類中定義了相同功能,但功能內(nèi)容不同時,子類對象不確定要執(zhí)行哪一個;而接口中因為沒有方法體而支持多繼承避免了這種安全隱患;C++支持,但是java保留這種機制,并用另一種方式來實現(xiàn)(多實現(xiàn)); Java支持多層繼承:也就是一個繼承體系 如何使用繼承體系中的功能呢?
想要使用體系,先查閱體系父類的描述,因為父類中定義了該體系中共性的功能,通過了解共性功能,就可以知道該體系中的基本功能;那么這個體系就基本可以使用了。那么在具體調(diào)用時,要創(chuàng)建最子類的對象,為什么? ① 因為父類對象有可能不能創(chuàng)建對象;
② 創(chuàng)建子類對象可以使用更多的功能,包括基本的和特有的; 簡單一句話:查閱父類功能,創(chuàng)建子類使用功能
Java中除了繼承關(guān)系外,還有聚集,聚合,組合關(guān)系; 繼承關(guān)系:類與類之間,接口與接口之間(支持多繼承)實現(xiàn)關(guān)系:類與接口之間
子父類中變量關(guān)鍵字this和super的使用:
子父類中函數(shù)關(guān)系:
子父類中的構(gòu)造函數(shù):
final關(guān)鍵字
抽象類:
抽象類實例:
1.4模塊方法模塊:
以下代碼中:
關(guān)鍵字final是讓確定的getTime()方法不被子類繼承,而不確定的部分則抽象在runcode()方法中暴露出去讓子類去實現(xiàn);
注意:runcode()方法不一定都定義為抽象方法,因為模板有默認的實現(xiàn)存在
1.5接口
接口可以被類多實現(xiàn),這也是java類多繼承不支持的轉(zhuǎn)換形式,java支持多實現(xiàn); 注意:接口因為沒有方法體而支持多繼承,類可以繼承類又實現(xiàn)接口; 例:class C extends B implements A 接口的特點:
① 接口是對外暴露的規(guī)則 ② 接口是程序的功能擴展 ③ 接口是可以多實現(xiàn)的
④ 類與接口之間是實現(xiàn)關(guān)系,而且類可以繼承一個類的同時實現(xiàn)多個接口 ⑤ 接口與接口之間可以有繼承關(guān)系,并且支持多繼承
1.6多態(tài)
定義:可以理解為事物存在的多種體現(xiàn)形態(tài) 人:男人,女人 動物:貓,狗 貓 x=new 貓(); 動物 x=new 貓(); 1.多態(tài)的體現(xiàn)
父類的引用指向于自己的子類對象 父類的引用也可以接收自己的子類對象 2.多態(tài)的前提
必須是類與類之間有關(guān)系,要么繼承,要么實現(xiàn) 通常還有一個前提 存在覆蓋 3.多態(tài)的好處
大大提高了程序的擴展性 4.多態(tài)的弊端
提高了擴展性,但是只能使用父類的引用訪問父類中的成員 5.多態(tài)的應(yīng)用
6.多態(tài)的出現(xiàn)代碼中的特點
注意創(chuàng)建對象時:靜態(tài)——》靜態(tài)綁定
非靜態(tài)——》動態(tài)綁定
1.7 Object類
定義:所有對象的直接或者間接父類,傳說中的上帝。
該類中定義了所有對象都具備的功能;
Object中已經(jīng)提供了對對象是否相同的比較方法;
如果自定義中也有比較相同的功能,沒有必要重新定義,只要沿襲父類中的功能,建立自己特有的比較內(nèi)容即可。
1.8內(nèi)部類
存在沒有父類和接口的匿名內(nèi)部類嗎?答案是肯定的,還有一個所有類的父類Object類:
1.8 異常機制
異?!猣inally代碼塊:
1.9 包package 對類文件進行分類管理。
給類提供多層命名空間。寫在程序文件的第一行。類名的全稱是 包名.類名。包也是一種封裝形式。
Import關(guān)鍵字:
為了簡化類名的書寫,使用一個關(guān)鍵字,import.Import 導(dǎo)入的是包中的類。
建議,不要寫通配符*,需要用到包中的哪個類,就導(dǎo)入哪個類。Jar包: 多線程
2.1相關(guān)定義
進程:是一個正在執(zhí)行的程序;
每一個進程執(zhí)行都有一個執(zhí)行順序,該順序是一個執(zhí)行路徑,或者叫一個控制單元。線程:就是進程中一個獨立的控制單元。
線程控制著進程的執(zhí)行。
一個進程至少有一個線程。
Java VM啟動的時候會有一個進程java.exe.該進程至少有一個線程負責(zé)java程序的執(zhí)行。而且這個線程運行的代碼存在于main方法中。該線程稱之為主線程。
擴展:其實更細節(jié)說明jvm,jvm啟動不止一個線程,還負責(zé)垃圾回收機制的線程。否則將會導(dǎo)致主程序執(zhí)行一段之后又返回回收垃圾,從而導(dǎo)致程序中止,所以jvm是一個多線程。
2.2如何在自定義的代碼中,自定義一個線程?
通過對API的查找,java已經(jīng)提供了對線程這類事物的描述。就Thread類。創(chuàng)建線程的第一種方式:繼承Thread類。
2.3為什么要覆蓋run方法呢?
線程運行狀態(tài):
/* 簡單的買票程序,多個窗口同時賣票 */
class Ticket extends Thread { private static int tick=100;public void run(){ while(true){
if(tick>0)
System.out.println(Thread.currentThread().getName()+“sale: ”+tick--);} } }
class TicketDemo { public static void main(String[] args){ Ticket t1=new Ticket();Ticket t2=new Ticket();Ticket t3=new Ticket();Ticket t4=new Ticket();t1.start();t2.start();t3.start();t4.start();} }
class Ticket implements Runnable//extends Thread { private /*static*/ int tick=100;public void run(){ while(true){
if(tick>0)
System.out.println(Thread.currentThread().getName()+“sale: ”+tick--);} } }
class TicketDemo { public static void main(String[] args){ Ticket t=new Ticket();Thread t1=new Thread(t);t1.start();/* Ticket t1=new Ticket();Ticket t2=new Ticket();Ticket t3=new Ticket();Ticket t4=new Ticket();t1.start();t2.start();t3.start();t4.start();*/ } }
2.4線程間通信
第二篇:畢向東老師JavaSE基礎(chǔ)視頻08筆記上
一:數(shù)據(jù)工具對象的建立: 最初:代碼寫在main中
第二階段:升級到函數(shù)中.可以復(fù)用.第三階段:為了讓另外一個類,能調(diào)用某函數(shù),用類進行封裝.二:數(shù)組工具中靜態(tài)方法的使用.: 函數(shù)是否是靜態(tài)的:只看一點就是是否訪問對象的特有數(shù)據(jù).這樣要調(diào)用這個方法,不用創(chuàng)建對象,否則浪費空間.則把構(gòu)造函數(shù)設(shè)置為private.三:數(shù)據(jù)工具類—文旦注釋.文檔注釋中有一些關(guān)鍵詞也是能被直接提取:@開頭
要進行文檔化,則類修飾必須用public,用javadoc提取之后變成這樣了.classpath設(shè)置了之后只在當(dāng)前的classpath中查找,不會去當(dāng)前目錄查找,除非當(dāng)前目錄也設(shè)置在其中./** */ 四:設(shè)計模式:對問題行之有效的解決方式,其實他是一種思想,java模式有23中基本.1:單例設(shè)計模式
解決的問題:就是可以保證一個類中在內(nèi)存中的對象的唯一性.如果都設(shè)置成靜態(tài),在變量多的時候就生命周期過長導(dǎo)致浪費.例如:對于多個程序使用同一個配置信息的對象時,就需要保證該對象的唯一性.如何保證對象的唯一性餓方法,? 1:不允許其他程序用new創(chuàng)建該類對象.2:在該類中創(chuàng)建一個本類實例.3:對外提供一個方法,讓其他程序可以獲取該對象.步驟: 1:private修飾構(gòu)造方法.私有化每個.2:通過new在本類中創(chuàng)建一個本類對象.3:定義一個共有的方法,將創(chuàng)建的對象返回.(可控,直接通過.變量名來操作則不可控)
現(xiàn)在要保證text對象的唯一性.加入三步驟,并改一下主函數(shù)的方法.五:單例設(shè)計模式圖解: 第一步:加載了類.六:單例設(shè)計模式懶漢式
之前第一種方法,一加載就馬上建立對象,惡漢式
但是這種方法是只有調(diào)用getInstance方法時才會創(chuàng)建對象,稱之為單例設(shè)計模式的延遲加載模式.但是如果被多線程操作時存在安全隱患.面試懶漢式,開發(fā)多用惡漢式.
第三篇:java學(xué)習(xí)筆記
jdk(java development kit)
有如下公司或組織開發(fā)jdk
sun jdk
ibm jdk
bea jrocket
gun jdk
其中ibm的jdk包含的jvm(java virtual machine)運行效率要比sun jdk包含的jvm高出許多。而專門運行在x86平臺的jrocket在服務(wù)端運行效率也要比sun jdk好很多。但不管怎么說,我們還是需要先把sun jdk掌握好。
1、jdk的下載和安裝
jdk又叫做j2se(java2 sdk standard edition),可以從sun的java網(wǎng)站上下載到,http://java.sun.com/j2se/downloads.html,jdk當(dāng)前最新的版本是j2sdk1.4.2,建議下載該版本的jdk,下載頁面在這里:http://java.sun.com/j2se/1.4.2/download.html。
下載好的jdk是一個可執(zhí)行安裝程序,默認安裝完畢后會在c:program filesjava目錄下安裝一套jre(供瀏覽器來使用),在c:j2sdk1.4.2下安裝一套jdk(也包括一套jre)。然后我們需要在環(huán)境變量path的最前面增加java的路徑c:j2sdk1.4.2bin。這樣jdk就安裝好了。
2、java documentation
java編程手冊,java核心所在3、java 應(yīng)用服務(wù)器
a、tomcat
b、ibm webshpere
c、bea weblogic
d、免費 jboss4、java應(yīng)用的運行環(huán)境
應(yīng)用服務(wù)器(app server)
app server是運行java企業(yè)組件的平臺,構(gòu)成了應(yīng)用軟件的主要運行環(huán)境。當(dāng)前主流的app server是bea公司的weblogic server和ibm公司的websphere以及免費的jboss,選擇其中一個進行學(xué)習(xí)就可以了,個人推薦weblogic,因為它的體系結(jié)構(gòu)更加干凈,開發(fā)和部署更加方便,是java企業(yè)軟件開發(fā)人員首選的開發(fā)平臺。下面簡要介紹幾種常用的app server:
1、tomcat
tomcat嚴(yán)格意義上并不是一個真正的app server,它只是一個可以支持運行serlvet/jsp的web容器,不過tomcat也擴展了一些app server的功能,如jndi,數(shù)據(jù)庫連接池,用戶事務(wù)處理等等。tomcat被非常廣泛的應(yīng)用在中小規(guī)模的java web應(yīng)用中,因此本文做一點下載、安裝和配置tomcat的介紹:
tomcat是apache組織下jakarta項目下的一個子項目,它的主網(wǎng)站是:http://jakarta.apache.org/tomcat/,tomcat最新版本是tomcat4.1.27,軟件下載的連接是:http://
在啟用這兩個管理工具之前,先需要手工配置一下管理員用戶和口令。用一個文本工具打開catalina_homeconftomcat-users.xml這個文件,加入如下幾行:
這樣用戶“robbin”就具備了超級管理員權(quán)限。重新啟動tomcat以后,你就可以使用該用戶來登陸如上的兩個管理工具,通過web方式進行tomcat的配置和管理了。
2、bea weblogic
weblogic可以到bea的網(wǎng)站上免費注冊之后下載到最新的weblogic8.1企業(yè)版,license可以免費使用1年時間,其實這已經(jīng)完全足夠了。weblogic的下載連接:http://commerce.bea.com/index.jsp,.../edocs.bea.com/。
3、ibm webshpere
websphere同樣可以下載到免費的試用版本,到ibm的developerworks網(wǎng)站可以看到websphere試用產(chǎn)品的下載和相關(guān)的websphere的資料,developerworks中文網(wǎng)站的連接是:http://。
4、jboss
jboss是免費開源的app server,可以免費的從jboss網(wǎng)站下載:http://,然...n.com/idea.html
四、java應(yīng)用的運行環(huán)境
java的應(yīng)用可以簡單分為以下幾個方面:
1、java的桌面應(yīng)用
桌面應(yīng)用一般僅僅需要jre的支持就足夠了。
2、java web應(yīng)用
java的web應(yīng)用至少需要安裝jdk和一個web容器(例如tomcat),以及一個多用戶數(shù)據(jù)庫,web應(yīng)用至少分為三層:
browser層:瀏覽器顯示用戶頁面
web層:運行servlet/jsp
db層:后端數(shù)據(jù)庫,向java程序提供數(shù)據(jù)訪問服務(wù)
3、java企業(yè)級應(yīng)用
企業(yè)級應(yīng)用比較復(fù)雜,可以擴展到n層,最簡單情況會分為4層:
browser層:瀏覽器顯示用戶頁面
client層:java客戶端圖形程序(或者嵌入式設(shè)備的程序)直接和web層或者ejb層交互
web層:運行servlet/jsp
ejb層:運行ejb,完成業(yè)務(wù)邏輯運算
db層:后端數(shù)據(jù)庫,向java程序提供數(shù)據(jù)訪問服務(wù)
4、java嵌入式應(yīng)用
java嵌入式應(yīng)用是一個方興未艾的領(lǐng)域,從事嵌入式開發(fā),需要從sun下載j2me開發(fā)包,j2me包含了嵌入式設(shè)備專用虛擬機kvm,和普通的jdk中包含的jvm有所不同。另外還需要到特定的嵌入式廠商那里下載模擬器。
第四篇:java學(xué)習(xí)心得筆記
j2ee學(xué)習(xí)筆記
注:框架可以用word菜單中的 “視圖/文檔結(jié)構(gòu)圖” 看到
j2ee模式
value object(值對象)用于把數(shù)據(jù)從某個對象/層傳遞到其他對象/層的任意java對象。
通常不包含任何業(yè)務(wù)方法。
也許設(shè)計有公共屬性,或者提供可以獲取屬性值的get方法。
jsp
1.jsp的基礎(chǔ)知識
__
_____ |directive(指令)
| |--scripting(腳本)
jsp-------| |__ action(動作)
|
|_____template data :除jsp語法外,jsp引擎不能解讀的東西
1)在jsp中使用的directive(指令)主要有三個:
a)page指令
b)include指令
c)taglib指令
在jsp的任何地方,以任何順序,一個頁面可以包含任意數(shù)量的page指令
2)scripting(腳本)包括三種類型
a)<%!declaraction%>;
b)<%scriptlet %>;
c)<%= expression%>;
3)action(動作)
標(biāo)準(zhǔn)的動作類型有:
a)
b)
d)
e)
f)
g)
h)
1.注釋: <%-----jsp comment-------%>;
數(shù)組名arr[0],第二個元素[1];c)二維數(shù)組的 長度 由”[ 幾行 ]“確定!
d)定義方式2:類型[ ][ ] 變量名 = new 類型[ 幾行 ][ ];//行數(shù)確定,列數(shù)不確定——每行可以隨便 賦值。
e)定義方式3:類型[ ][ ] 變量名 = { { ,...,...,...},{ },{ },......} //這種行數(shù)、列數(shù)都不確定。大括號 內(nèi)的每個 大括號 代表 一行 的元素,每行有多少個元素 取決于 內(nèi)大括號 中元素的個數(shù)。
19、面向?qū)ο蟮奶攸c:封裝性、繼承性、多態(tài)性。
20、在創(chuàng)建變量后,JVM運行程序時,會自動初始化變量。引用型變量 為 null。
21、垃圾對象——沒有變量引用的對象。
22、類的封裝:將類中的屬性 私有化。外界訪問私有屬性時 只能通過該屬性的 getxxx()方法。
a)//擇Generate getter and setter--> 自動生成
set和get方法。
23、構(gòu)造方法:實例化對象。
a)可以用 帶參數(shù)的構(gòu)造方法 在實例化對象時就 給私有屬性 賦值。b)好的程序員 應(yīng)該為每個類 寫一個 無參構(gòu)造方法。c)定義構(gòu)造方法的條件:
i.方法名與類名相同。ii.沒有返回值的 聲明。
iii.方法中 不能有return 返回值。
24、this關(guān)鍵字
a)this指代 該類實例化的 對象。所以可以用 this.xx的方式調(diào)用 成員。b)在成員方法中使用this關(guān)鍵字,避免參數(shù)名與屬性名相同。c)用this關(guān)鍵字調(diào)用 構(gòu)造方法
i.只能在構(gòu)造方法中 用this調(diào)用其他構(gòu)造方法; ii.此時this語句必須位于第1行,并且只能出現(xiàn)一次 iii.不能在一個類的兩個構(gòu)造方法中互相調(diào)用。
25、static關(guān)鍵字
a)靜態(tài)變量:
i.用static修飾的變量 ii.靜態(tài)變量被所有實例共享
iii.可以使用“類名.變量名”的形式來訪問。iv.只能修飾 成員變量 b)靜態(tài)方法
i.希望在不創(chuàng)建對象的情況下也能條用 類中的 某個方法,那就用static關(guān)鍵字休息這個方法 ii.靜態(tài)方法 只能訪問 靜態(tài)成員!
//因為非靜態(tài)成員 必須先創(chuàng)建對象才能訪問,而靜態(tài)方法在被調(diào)用的時候可以 不創(chuàng)建對象——那么就沒有非靜態(tài)成員可供訪用。
c)靜態(tài)代碼塊
i.當(dāng)類被加載時,靜態(tài)代碼會執(zhí)行一次。而類只會被加載一次,所以靜態(tài)代碼塊只會被執(zhí)行一次。
ii.通常會用靜態(tài)代碼塊對類的成員變量進行初始化。d)單例模式
i.private static 類名 INSTANCE = new 類名();量——自己創(chuàng)建一個對象。private 類名(){};
//私有的 構(gòu)造方法,只能內(nèi)部訪問
}
//私有成員變public static 類名 getInstance(){ return INSTANCE;//定義靜態(tài)方法,返回自己的實例對象。ii.第二種單例模式創(chuàng)建方法。
1.Private 類名(){} 調(diào)用。
2.public static fianl 類名 INSTANCE = new 類名();的不能被修改的 靜態(tài)成員對象。
26、內(nèi)部類——定義在類里面的 類
a)成員內(nèi)部類
i.相當(dāng)于成員方法,可以訪問外部類的所有成員;
ii.因為成員內(nèi)部類相當(dāng)于 成員方法,所以想要創(chuàng)建內(nèi)部類對象時,必須得用外部類的對象 去創(chuàng)建內(nèi)部類對象:
1.外部類名.內(nèi)部類名 變量名 = new 外部類名().new 內(nèi)部類名();b)靜態(tài)內(nèi)部類
i.用static修飾的成員內(nèi)部類,也相當(dāng)于靜態(tài)方法。只能訪問外部類的靜態(tài)成員。
ii.因為靜態(tài),所以在創(chuàng)建內(nèi)部類對象時,可以不用先創(chuàng)建外部類對象:
1.外部類名.內(nèi)部類名 變量名 = new 外部類名.內(nèi)部類名();iii.靜態(tài)內(nèi)部類中 可以定義靜態(tài)成員,非靜態(tài)內(nèi)部類則不可。c)方法內(nèi)部類
i.在方法中定義的類,只能在當(dāng)前方法中被使用。
27、當(dāng)一個對象被當(dāng)成垃圾從內(nèi)存中釋放時,它的 finalize()方法會被自動調(diào)用。
//公有
//私有的 構(gòu)造方法,只能在類的內(nèi)部被
28、繼承
a)繼承關(guān)鍵字:extends。b)格式:Class A extends B{} c)單繼承——一個類只能有一個直接父類。
29、重寫父類方法
a)條件:方法名、參數(shù)、返回值類型 3個都相同。
b)重寫之后,子類調(diào)用被重寫的方法時,就是調(diào)用自己寫的方法。c)重寫應(yīng)用:
i.應(yīng)用對象 是父類的 公有方法。重載 應(yīng)用的對象是 類本身的 方法。ii.重寫父類 不適合子類的 方法 iii.實現(xiàn)接口。
30、super關(guān)鍵字
a)調(diào)用父類成員變量和成員方法:
i.super.成員變量;ii.super.成員方法(參數(shù)1,參數(shù)2,...);b)調(diào)用父類的構(gòu)造方法
i.super(參數(shù)1,參數(shù)2,...);ii.必須位于子類的構(gòu)造方法的第一行,且只能出現(xiàn)一次。
iii.在實例化子類時,系統(tǒng)會在 子類的構(gòu)造方法中 調(diào)用
父類的構(gòu)造方法——如果子類的構(gòu)造方法中 沒有調(diào)用 父類的構(gòu)造方法,系統(tǒng)會自動調(diào)用父類的無參構(gòu)造方法。所以 每個類的 無參構(gòu)造方法 一定不要漏了!子類也可以顯示的調(diào)用 父類的有參或無參構(gòu)造法方法。c)解決 重寫了父類方法之后,不能調(diào)用父類方法的問題。
31、final關(guān)鍵字
a)final修飾的類 不能被繼承 b)final修飾的方法 不能被子類重寫
c)final修飾的變量 是常量,不能被修改,且必須在定義時 為變量賦值。
32、抽象類
a)關(guān)鍵字 abstract b)抽象方法:abstract void shout(){};——沒有方法體。
c)包含抽象方法的類必須聲明為 abstract類:abstract class Animal{} d)抽象類可以 不包含任何抽象方法,只需用abstract修飾。e)抽象方法不能直接實例化,只能讓 子類實例化。
33、接口
a)定義關(guān)鍵字:interface——interface Animal{} b)接口中的方法 被默認修飾為:public abstract——抽象方法。c)接口中的變量 被默認修飾為 :public static final —— 全局常量
i.所以變量最好用
全大寫
表示。
d)因為方法都是抽象的,所以必須定義一個類 來實現(xiàn)(implements)接口——Class A implements B{} e)接口之間可以繼承——interface C extends B{} f)一個類可以實現(xiàn)多個接口,接口直接間用逗號隔開。g)一個類可以在繼承一個類的同時,實現(xiàn)其它的接口。
h)如果一個類去實現(xiàn)接口的話,那么這個類必須實現(xiàn)接口中所有的方法。
34、多態(tài)
a)方法上的多態(tài)
i.類內(nèi)部方法的重載 ii.子類對父類方法的重寫 b)對象上的多態(tài)性
i.假設(shè)父類:A;子類B B b = new B();ii.對象的自動向上轉(zhuǎn)型:A a = b;//子類對象,變成了父類對象。
1.雖然a指向A的對象,但是如果B重寫了A的方法,那a調(diào)用的還是B中的方法。
iii.對象的強制向下轉(zhuǎn)型
1.若 A a = new A();2.B b =(B)a;
//父類對象變成了 子類對象。3.這時對象b調(diào)用的是 子類的重寫的方法。
4.注意:對象發(fā)生強制向下轉(zhuǎn)型之前,必須保證已經(jīng)發(fā)生了向上轉(zhuǎn)型,否則會出異常。
35、異常
a)異常類分為:編譯時異常、運行時異常 b)異常處理機制: i.try...catch...finally 1.try代碼包含可能發(fā)生異常的Java語句,catch塊中包含針對一場進行處理的代碼。
2.當(dāng)發(fā)生異常時,系統(tǒng)將異常信息封裝成一個異常對象傳遞給catch代碼塊。所以catch需要定義1個對應(yīng)的異常類 變量。3.finally代碼塊包含,無論發(fā)生什么異常都要執(zhí)行的代碼。常用于關(guān)閉系統(tǒng)資源。
ii.throws關(guān)鍵字聲明拋出異常,調(diào)用者對其處理。這種方法能通過編譯,但是發(fā)生異常后就會終止運行。
c)自定義異常
i.首先定義 一個繼承Exception異常的 異常類;異常類中 編寫一個無參構(gòu)造方法(調(diào)用父類無參構(gòu)造方法),再編寫一個 帶String參數(shù)的構(gòu)造方法(也調(diào)用父類的帶Stirng參數(shù)的構(gòu)造方法)。ii.再定義一個 測試類,定義要調(diào)用的方法,并在此方法后面用 throws關(guān)鍵字 聲明拋出自定義異常;再在 方法體 內(nèi)判斷什么時候 用throw new 自定義異常(“要打印的信息”)。//聲明自定義異常對象。
iii.最后在 測試類的main 方法中,iv.try{...}
catch(...){ System.out.printlan(e.getMessage)}
finally{...}
36、線程的創(chuàng)建: a)繼承Thread類,并重寫run()方法。然后new Thread().start;開啟線程。
b)實現(xiàn)Runnable接口,重寫run()方法。然后new Thread(new myRunnable).start開啟線程。
37、兩種實現(xiàn)多線程的比較——實現(xiàn)Runnable接口的方法更好
a)可以讓多個線程共享資源?!燮毕到y(tǒng)需要。b)避免單繼承。38、36、