异常在Dos中显示的一些问题……

本文介绍Java中自定义异常的方法及异常处理流程,包括如何创建自定义异常类、抛出异常、捕获异常,并解释了try-catch-finally语句的执行顺序。
部署运行你感兴趣的模型镜像

1Exception(String message): Constructs a new exception with the specified detail message

//此为异常类Exception的一个构造方法。该方法用于自定义异常类时使用。

自定义一个异常类:(举例)

public class MyException extends Exception {

     private int id;

     MyException(String s,int id) {

       super(s);//这个地方就是用了上述提到的Exception(String message): 构造方法。

       this.id = id;

     }

}

2:public class Test {

      public void regist(int num) throws MyException {

             if(num < 0) {

                    throw new MyException("登记人数为负值!",3);

             }

             System.out.println("登记人数为:" + num);

      }

      public void manager() {

             try {

                    regist(-1);

             } catch(MyException e) {

                    System.out.println("登记失败,出错类型码为:"+ e.getId());

                    e.printStackTrace();

             }

             System.out.println("操作结束!");

      }

      public static void main(String[] args) {

                    Test t = new Test();                                              

                    t.manager();

      }

}

//Dos下的显示如图:


 

MyException:登记人数为负值!是e.printStackTrace();造成的。输出的内容为throw new MyException("登记人数为负值!",3);注意:printStackTrace();为把堆栈内的所有信息都打印出来。

 

public void manager() {

             try {

                    regist(-1);

             } catch(MyException e) {

                    e.printStackTrace();

                    System.out.println("登记失败,出错类型码为:"+ e.getId());

 

             }

             System.out.println("操作结束!");

      }

注意:如果把粗体的部分像上述代码颠倒放置,则Dos下异常显示顺序为:

3:对于try catch finally执行的一些理解:

finally和没有finally的区别。

如果在try语句块内存在return语句,finally子句中的代码会在返回前执行。

如果catch语句中有return语句,则如果不加finally,则不会被执行。如:

public class TestFinal {

      public static void main(String[] args) {

             TestFinal me = new TestFinal();

             try {

                    me.m();

                    

             } catch(Exception e) {

                           e.printStackTrace();

                           return;

                }

                finally {

                           System.out.println("嘿嘿……");

                    }

      }

      public void m() throws Exception {

             throw new Exception("出错啦,呵呵……");

      }

}//如果加finally,则会执行System.out.println("嘿嘿……");

如果不加finally,System.out.println("嘿嘿……");不会被执行。总之如果异常处理之后还有别的语句想要被执行,则最好是要加上finally语句。

 

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

编译正确运行时,出现了…问题,后来用…方法查找,发现是…所导致的错误,进行…的修改后错误消除,从而说明……;DATA SEGMENT NUM DB 12, -3, 45, -25, 0, 8, -10, 33, -7 ; 9个有符号数(DB表示字节) MIN DB ? ; 存储最小值(未初始化) NEG_COUNT DB 0 ; 负数计数器(初始为0) MSG_MIN DB 'MIN=$' ; 显示"MIN="的提示信息 MSG_NEG DB 0DH, 0AH, 'NEG COUNT=$' ; 换行后显示"NEG COUNT=" DATA ENDS ; 定义代码段 CODE SEGMENT ASSUME CS:CODE, DS:DATA ; 告诉编译器段寄存器关联 START: ; 初始化数据段寄存器 MOV AX, DATA MOV DS, AX ; 初始化指针和计数器 LEA SI, NUM ; SI指向NUM数组起始地址 MOV AL, [SI] ; AL = 第一个数(初始MIN) MOV MIN, AL ; 暂存到MIN MOV CX, 8 ; 剩余8个数需比较(因为第一个已读) MOV BL, 0 ; BL = NEG_COUNT(负数计数器) FIND_MIN_LOOP: ; 读取下一个数 INC SI ; SI指向下一个数 MOV AL, [SI] ; AL = 当前数 ; 检查是否为负数(最高位为1) TEST AL, 80H ; 测试符号位(80H = 10000000b) JZ NOT_NEGATIVE ; 若符号位为0(非负数),跳过 INC BL ; 否则负数计数器+1 NOT_NEGATIVE: ; 比较并更新最小值 CMP AL, MIN ; AL - MIN JGE NOT_SMALLER ; 若AL >= MIN,不更新 MOV MIN, AL ; 否则更新MIN NOT_SMALLER: ; 循环处理剩余数 LOOP FIND_MIN_LOOP ; CX减1,若CX≠0则继续循环 ; 存储最终的NEG_COUNT MOV NEG_COUNT, BL ; 显示"MIN="提示信息 LEA DX, MSG_MIN ; DX = MSG_MIN地址 MOV AH, 09H ; DOS功能号09H(显示字符串) INT 21H ; 调用DOS中断 ; 显示最小值(处理有符号数) MOV AL, MIN ; AL = 最小值 CALL DISPLAY_SIGNED ; 调用显示有符号数的子程序 ; 显示"NEG COUNT="提示信息 LEA DX, MSG_NEG ; DX = MSG_NEG地址 MOV AH, 09H ; DOS功能号09H INT 21H ; 调用DOS中断 ; 显示负数个数(无符号数) MOV AL, NEG_COUNT ; AL = 负数个数 CALL DISPLAY_UNSIGNED ; 调用显示无符号数的子程序 ; 程序结束,返回DOS MOV AH, 4CH ; DOS功能号4CH(程序退出) INT 21H ; 调用DOS中断 ; -------------------------------------------------------- ; 子程序:显示有符号数(AL,范围-128~127) ; 输入:AL = 有符号数 ; 输出:在屏幕上显示十进制值(如"-25") DISPLAY_SIGNED PROC TEST AL, 80H ; 检查符号位 JZ DS_POSITIVE ; 若为正数,跳过负号显示 PUSH AX ; 保存AX MOV DL, '-' ; 显示负号 MOV AH, 02H ; DOS功能号02H(显示字符) INT 21H ; 调用DOS中断 POP AX ; 恢复AX NEG AL ; 取绝对值(AL = 0 - AL) DS_POSITIVE: CALL DISPLAY_UNSIGNED ; 调用无符号数显示子程序 RET DISPLAY_SIGNED ENDP ; -------------------------------------------------------- ; 子程序:显示无符号数(AL,范围0~255) ; 输入:AL = 无符号数 ; 输出:在屏幕上显示十进制值(如"25") DISPLAY_UNSIGNED PROC AAM ; 将AL拆分为十位和个位(AH=十位,AL=个位) ADD AX, 3030H ; 转换为ASCII码('0'=30H) PUSH AX ; 保存AX MOV DL, AH ; 显示十位 MOV AH, 02H INT 21H POP AX ; 恢复AX MOV DL, AL ; 显示个位 MOV AH, 02H INT 21H RET DISPLAY_UNSIGNED ENDP ; -------------------------------------------------------- CODE ENDS END START ; 程序入口点
最新发布
10-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值