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