簡(jiǎn)單給你個(gè)例子:
import java.lang.reflect.Method;
public class CallMethod {
public static void main(String[] args) {
CallMethod call=new CallMethod();
try {
Method method=CallMethod.class.getMethod("sunvins",(Class[])null);
method.invoke(call, (Object[])null);
Method method1=CallMethod.class.getMethod("sunvins1",String.class,int.class);
method1.invoke(call, "smile",7);
Method method2=CallMethod.class.getMethod("sunvins2",(Class[])null);
String s=(String)method2.invoke(call, (Object[])null);
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 無(wú)參無(wú)返回值
*/
public void sunvins(){
System.out.println("---haha");
}
/**
* 帶參數(shù)
* @param s
* @param i
*/
public void sunvins1(String s,int i){
System.out.println("--s="+s);
System.out.println("--i="+i);
}
/**
* 帶返回值的
* @return
*/
public String sunvins2(){
return "well";
}
}
可以選擇三種方法來(lái)進(jìn)行異常處理
1對(duì)代碼塊用try..catch進(jìn)行異常捕獲處理;
2在 該代碼的方法體外用throws進(jìn)行拋出聲明,告知此方法的調(diào)用者這段代碼可能會(huì)出現(xiàn)這些異常,你需要謹(jǐn)慎處理。此時(shí)有兩種情況:
如果聲明拋出的異常是非運(yùn)行時(shí)異常,此方法的調(diào)用者必須顯示地用try..catch塊進(jìn)行捕獲或者繼續(xù)向上層拋出異常。
如果聲明拋出的異常是運(yùn)行時(shí)異常,此方法的調(diào)用者可以選擇地進(jìn)行異常捕獲處理。
3在代碼塊用throw手動(dòng)拋出一個(gè)異常對(duì)象,此時(shí)也有兩種情況,跟2)中的類(lèi)似:
如果拋出的異常對(duì)象是非運(yùn)行時(shí)異常,此方法的調(diào)用者必須顯示地用try..catch塊進(jìn)行捕獲或者繼續(xù)向上層拋出異常。
如果拋出的異常對(duì)象是運(yùn)行時(shí)異常,此方法的調(diào)用者可以選擇地進(jìn)行異常捕獲處理。
(如果最終將異常拋給main方法,則相當(dāng)于交給jvm自動(dòng)處理,此時(shí)jvm會(huì)簡(jiǎn)單地打印異常信息)
常處理和設(shè)計(jì)的建議
1. 只在必要使用異常的地方才使用異常,不要用異常去控制程序的流程
2. 切忌使用空catch塊
3. 檢查異常和非檢查異常的選擇
4. 注意catch塊的順序
5. 不要將提供給用戶(hù)看的信息放在異常信息里
6. 避免多次在日志信息中記錄同一個(gè)異常
7. 異常處理盡量放在高層進(jìn)行
8. 在finally中釋放資源
有兩中方式:1.捕獲異常,自己處理.
2.throw出去,讓別人處理.
舉個(gè)例子:
public class A{
try{
可能放生異常的語(yǔ)句。
}catch(Exception e){
e.getMessage();//自己處理
}
}
public class A throws Exception{
可能放生異常的語(yǔ)句。
}//throw出去,讓別人處理
注意這里用的是throws
如果在方法里面則用throw
舉例:
public class A{
try{
可能放生異常的語(yǔ)句。
}catch(Exception e){
e.getMessage();//自己處理
throw new Exception ("");
}
}
SampleModel 取樣模型
Databuffer 數(shù)據(jù)緩沖區(qū)
Raster 光柵
Sample 樣本
band 帶
SampleModel是java awt中的一個(gè)抽象類(lèi),它定義了一個(gè)接口,用于提取一幅圖像中的像素(pixel)的樣本(Sample)。
一幅圖像包含了許多數(shù)據(jù),而所有的數(shù)據(jù)是以像素為基本單位來(lái)表達(dá)的(像素的集合),其中每個(gè)像素又由若干樣本來(lái)構(gòu)成。
樣本(Sample),是指對(duì)一幅圖像取樣得到的屬于某個(gè)帶的單體數(shù)據(jù),
而帶(band),是一副圖像中的特定類(lèi)型的樣本的全體。
例如,1個(gè)像素可包含3個(gè)樣本、分別代表紅、綠、藍(lán)這三個(gè)基色。于是就說(shuō)以三基色來(lái)定義的一幅圖像包含了3個(gè)帶:第一個(gè)帶含來(lái)自圖像中的所有像素的紅色樣本,第二個(gè)帶含所有的綠色樣本,第三個(gè)帶含所有的藍(lán)色樣本。
內(nèi)存存放方式:像素可用不同方式來(lái)進(jìn)行存儲(chǔ)。如,把一個(gè)帶的所有像素按順序進(jìn)行存放的方式、和把單個(gè)像素所含的樣本組(例如三基色的三個(gè)樣本)的各個(gè)樣本逐組順序存放的方式,等等。
SampleModel的子類(lèi)用來(lái)指定樣本的表達(dá)類(lèi)型(如,是非負(fù)的8比特類(lèi)型byte還是整數(shù)類(lèi)型的16比特short,等),以及樣本在內(nèi)存的存放格式。Java 2D(tm)提供的圖像處理內(nèi)置API不可能支持所有的樣品類(lèi)型,但通常都會(huì)支持16比特?zé)o符號(hào)整數(shù)類(lèi)型(0 -65535)或更低的類(lèi)型,其中,有些API支持的數(shù)據(jù)類(lèi)型會(huì)有很多。
1組像素可表示為1個(gè)光柵(Raster。例如一個(gè)掃描行)。光柵含1個(gè)DataBuffer和1個(gè)SampleModel。使用SampleModel可以對(duì)DataBuffer中的樣本進(jìn)行存取,有些還可能提供機(jī)器級(jí)別的信息,幫助編程者直接操作DataBuffer中的樣品和像素。
SampleModel處理圖像通常是后退法。高效的編程是,把SampleModel 轉(zhuǎn)換(cast)到適當(dāng)?shù)淖宇?lèi),從中提取出直接操作DataBuffer中的像素所需的信息。 請(qǐng)參考
Atomic原子性、Consistency一致性、Isolation隔離性和Durability持久性。
原子性:指整個(gè)事務(wù)是不可以分割的工作單元。只有事務(wù)中所有的操作執(zhí)行成功,才算整個(gè)事務(wù)成功,事務(wù)中任何一個(gè)SQL語(yǔ)句執(zhí)行失敗,那么已經(jīng)執(zhí)行成功的SQL語(yǔ)句也必須撤銷(xiāo),數(shù)據(jù)庫(kù)狀態(tài)應(yīng)該回到執(zhí)行事務(wù)前的狀態(tài)。
一致性:指數(shù)據(jù)庫(kù)事務(wù)不能破壞關(guān)系數(shù)據(jù)的完整性以及業(yè)務(wù)邏輯上的一致性。例如對(duì)于銀行轉(zhuǎn)賬事務(wù),不管事務(wù)成功還是失敗,應(yīng)該保證事務(wù)結(jié)束后兩個(gè)轉(zhuǎn)賬賬戶(hù)的存款總額是與轉(zhuǎn)賬前一致的。
隔離性:指的是在并發(fā)環(huán)境中,當(dāng)不同的事務(wù)同時(shí)操縱相同的數(shù)據(jù)時(shí),每個(gè)事務(wù)都有各自的完整數(shù)據(jù)空間。
持久性:指的是只要事務(wù)成功結(jié)束?它對(duì)數(shù)據(jù)庫(kù)所做的更新就必須永久保存下來(lái)。即使發(fā)生系統(tǒng)崩潰,重新啟動(dòng)數(shù)據(jù)庫(kù)系統(tǒng)后,數(shù)據(jù)庫(kù)還能恢復(fù)到事務(wù)成功結(jié)束時(shí)的狀態(tài)。
本文并不討論應(yīng)該采用何種事務(wù)處理方式,主要目的是討論如何更為優(yōu)雅地設(shè)計(jì)事務(wù)服務(wù)。僅以JDBC事務(wù)處理為例。涉及到的DAO,Factory,Proxy,Decorator等模式概念,請(qǐng)閱讀相關(guān)資料
Java語(yǔ)言提供兩種異常處理機(jī)制:捕獲異常和聲明拋棄異常。
1、捕獲異常:
(1)在Java程序運(yùn)行過(guò)程中系統(tǒng)得到一個(gè)異常對(duì)象是,它將會(huì)沿著方法的調(diào)用棧逐層回溯,尋找處理這一異常的代碼。
(2)找到能夠處理這種類(lèi)型異常的方法后,運(yùn)行時(shí)系統(tǒng)把當(dāng)前異常交給這個(gè)方法處理;如果找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。
(3)捕獲異常是通過(guò)try-catch-finally語(yǔ)句實(shí)現(xiàn)的。語(yǔ)法為:
try{
}catch(ExceptionName1 e){
}catch(ExceptionName2 e){
}
}finally{
}
2、聲明拋棄異常:
(1)當(dāng)Java程序運(yùn)行時(shí)系統(tǒng)得到一個(gè)異常對(duì)象時(shí),如果一個(gè)方法并不知道如何處理所出現(xiàn)的異常,則可在方法聲明時(shí),聲明拋棄異常。
(2)聲明拋棄異常是在一個(gè)方法聲明中的throws子句中指明的。如:
public int read() throws IOException{
}
其中throws IOException就是聲明拋棄異常,throws后可以跟多個(gè)異常類(lèi)型。
擴(kuò)展資料:
程序設(shè)計(jì)語(yǔ)言的異常機(jī)制:
1、多數(shù)語(yǔ)言的異常機(jī)制的語(yǔ)法是類(lèi)似的:用throw或raise拋出一個(gè)異常對(duì)象(Java或C++等)或一個(gè)特殊可擴(kuò)展的枚舉類(lèi)型的值(如Ada語(yǔ)言);
2、異常處理代碼的作用范圍用標(biāo)記子句(try或begin開(kāi)始的語(yǔ)言作用域)標(biāo)示其起始,以第一個(gè)異常處理子句(catch, except, resuce等)標(biāo)示其結(jié)束;可連續(xù)出現(xiàn)若干個(gè)異常處理子句,每個(gè)處理特定類(lèi)型的異常。
3、某些語(yǔ)言允許else子句,用于無(wú)異常出現(xiàn)的情況。更多見(jiàn)的是finally, ensure子句,無(wú)論是否出現(xiàn)異常它都將執(zhí)行,用于釋放異常處理所需的一些資源。
(1)C++異常處理是資源獲取即初始化(Resource-Acquisition-Is-Initialization)的基礎(chǔ)。
(2)C語(yǔ)言一般認(rèn)為是不支持異常處理的。Perl語(yǔ)言可選擇支持結(jié)構(gòu)化異常處理(structured exception handling)。
(3)Python語(yǔ)言對(duì)異常處理機(jī)制是非常普遍深入的,所以想寫(xiě)出不含try, except的程序非常困難。
參考資料來(lái)源:
百度百科-異常處理
Java程序在運(yùn)行時(shí),Java運(yùn)行時(shí)系統(tǒng)一直對(duì)所有的對(duì)象進(jìn)行所謂的運(yùn)行時(shí)類(lèi)型標(biāo)識(shí)。
這項(xiàng)信息紀(jì)錄了每個(gè)對(duì)象所屬的類(lèi)。虛擬機(jī)通常使用運(yùn)行時(shí)類(lèi)型信息選準(zhǔn)正確方法去執(zhí)行,用來(lái)保存這些類(lèi)型信息的類(lèi)是Class類(lèi)。
Class類(lèi)封裝一個(gè)對(duì)象和接口運(yùn)行時(shí)的狀態(tài),當(dāng)裝載類(lèi)時(shí),Class類(lèi)型的對(duì)象自動(dòng)創(chuàng)建。Class沒(méi)有公共構(gòu)造方法。
Class對(duì)象是在加載類(lèi)時(shí)由Java虛擬機(jī)以及通過(guò)調(diào)用類(lèi)加載器中的defineClass方法自動(dòng)構(gòu)造的,因此不能顯式地聲明一個(gè)Class對(duì)象。虛擬機(jī)為每種類(lèi)型管理一個(gè)獨(dú)一無(wú)二的Class對(duì)象。
也就是說(shuō),每個(gè)類(lèi)(型)都有一個(gè)Class對(duì)象。運(yùn)行程序時(shí),Java虛擬機(jī)(JVM)首先檢查是否所要加載的類(lèi)對(duì)應(yīng)的Class對(duì)象是否已經(jīng)加載。
如果沒(méi)有加載,JVM就會(huì)根據(jù)類(lèi)名查找.class文件,并將其Class對(duì)象載入。基本的Java類(lèi)型(boolean、byte、char、short、int、long、float和double)和關(guān)鍵字void也都對(duì)應(yīng)一個(gè)Class對(duì)象。
每個(gè)數(shù)組屬于被映射為Class對(duì)象的一個(gè)類(lèi),所有具有相同元素類(lèi)型和維數(shù)的數(shù)組都共享該Class對(duì)象。一般某個(gè)類(lèi)的Class對(duì)象被載入內(nèi)存,它就用來(lái)創(chuàng)建這個(gè)類(lèi)的所有對(duì)象。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥(niǎo). 頁(yè)面生成時(shí)間:2.714秒