Java自定義異常的建立及多層呼叫
步驟:
1.建立異常類,繼承Exception類;
2.在類中建立兩個構造方法,一個帶報錯資訊引數,一個不帶;
3.帶報錯資訊引數的構造方法要繼承父類(Exception類)的構造方法,目的是 e.getMessage()和報異常時能獲取報錯資訊
4.最後一層呼叫catch異常,之前的只要丟擲異常
5.呼叫丟擲異常的方法,必須throws該異常
6.第一次遇到判斷異常的方法A,要new一個異常,才能丟擲;繼而,呼叫A的其他方法也有異常可以丟擲
帶報錯資訊引數的構造方法繼承父類的構造方法:
不繼承父類方法:
程式碼:
建立了IndexIsNagetiveException和IndexIsOutofRangeException兩個自定義異常,用於insert時丟擲負數位置和超界位置,並在列印異常時進行詳細說明
package test;
public class MyStringBuffer implements IStringBuffer{
//自定義丟擲異常
public class IndexIsNagetiveException extends Exception {
public IndexIsNagetiveException() {
}
public IndexIsNagetiveException(String message) {
super(message); //使e.getMessage()能獲取message
}
}
public class IndexIsOutofRangeException extends Exception {
public IndexIsOutofRangeException() {
}
public IndexIsOutofRangeException(String message) {
super(message);
}
}
int capacity = 16;
int length = 0;
char[] value;
public MyStringBuffer(){
value = new char[capacity];
}
//有參構造方法
public MyStringBuffer(String str){
this();
if(null==str)
return;
if(capacity<str.length()){
capacity = value.length*2;
value=new char[capacity];
}
if(capacity>=str.length())
System.arraycopy(str.toCharArray(), 0, value, 0, str.length());
length = str.length();
}
@Override
public void append(String str) throws IndexIsNagetiveException, IndexIsOutofRangeException {
insert(length,str);
}
@Override
public void append(char c) throws IndexIsNagetiveException, IndexIsOutofRangeException {
append(String.valueOf(c));
}
@Override
public void insert(int pos, char b) throws IndexIsNagetiveException, IndexIsOutofRangeException {
insert(pos, String.valueOf(b));
}
@Override
public void delete(int start) {
delete(start,length);
}
@Override
public void delete(int start, int end) {
//邊界條件判斷
if(start<0)
return;
if(start>length)
return;
if(end<0)
return;
if(end>length)
return;
if(start>=end)
return;
System.arraycopy(value, end, value, start, length- end);
length-=end-start;
}
@Override
public void reverse() {
for (int i = 0; i < length/2; i++) {
char temp = value[i];
value[i] = value[length-i-1];
value[length-i-1] = temp;
}
}
@Override
public int length() {
// TODO Auto-generated method stub
return length;
}
@Override
public void insert(int pos, String b) throws IndexIsNagetiveException, IndexIsOutofRangeException {
//邊界條件判斷
if(pos<0){
throw new IndexIsNagetiveException("插入的位置是"+pos+",為負");
}
if(pos>length){
throw new IndexIsOutofRangeException("插入的位置是"+pos+",超越最大界:"+length);
}
if(null==b){
return;
}
//擴容
while(length+b.length()>capacity){
capacity = (int) ((length+b.length())*1.5f);
char[] newValue = new char[capacity];
System.arraycopy(value, 0, newValue, 0, length);
value = newValue;
}
char[] cs = b.toCharArray();
//先把已經存在的資料往後移
System.arraycopy(value, pos, value,pos+ cs.length, length-pos);
//把要插入的資料插入到指定位置
System.arraycopy(cs, 0, value, pos, cs.length);
length = length+cs.length;
}
public String toString(){
char[] realValue = new char[length];
System.arraycopy(value, 0, realValue, 0, length);
return new String(realValue);
}
public static void main(String[] args) {
MyStringBuffer sb = new MyStringBuffer("there light");
System.out.println(sb);
//丟擲異常
try{
sb.insert(-1, "let ");
} catch (IndexIsNagetiveException | IndexIsOutofRangeException e) {
System.out.println("具體原因:"+e.getMessage());
e.printStackTrace();
}
}
}
相關文章
- Java 異常(二) 自定義異常Java
- Java自定義異常Java
- restframework 異常處理及自定義異常RESTFramework
- Java之自定義異常Java
- 自定義異常
- 2024.10.11(自定義異常)
- 自定義異常類
- springboot自定義異常Spring Boot
- Day39--自定義異常及小結
- Java異常處理的兩種方式以及自定義異常的使用方法Java
- 異常-自定義異常的實現和測試
- python自定義異常,使用raise引發異常PythonAI
- C#規範整理·異常與自定義異常C#
- C#自定義異常 統一異常處理C#
- 【Django】DRF自定義異常處理Django
- Java入門自定義異常&模擬借書系統Java
- java培訓教程分享:Java中使用者如何自定義異常?Java
- java自定義異常例項1Java
- 異常和異常呼叫鏈
- springboot下新增全域性異常處理和自定義異常處理Spring Boot
- SpringBoot系列——自定義統一異常處理Spring Boot
- Spring Cloud Gateway-自定義異常處理SpringCloudGateway
- 物件導向 約束、自定義異常、加密物件加密
- 全網最適合入門的物件導向程式設計教程:27 異常捕獲-Python中異常層級與自定義異常類的實現物件程式設計Python
- Dubbo 自定義異常,你是怎麼處理的?
- Spring Cloud Gateway自定義異常處理Exception HandlerSpringCloudGatewayException
- Spring Boot 中關於自定義異常處理的套路!Spring Boot
- 工廠模式建立物件和自定義建構函式建立物件的異同模式物件函式
- Android自定義遮罩層Android遮罩
- QPainter呼叫setBrush異常退出AI
- Android圖解建立外部lib庫及自定義ViewAndroid圖解View
- 自定義SPI使用JDK動態代理遇到UndeclaredThrowableException異常排查JDKException
- SpringBoot專案實戰(7):自定義異常處理介面Spring Boot
- 如何自定義一個全域性異常捕獲器-SpiderManIDE
- Java 自定義註解及使用場景Java
- Python中定義(建立)、呼叫函式及返回值Python函式
- WWDC 2018:建立自定義的 Instrument
- java中的異常Java