黑马程序员_面向对象(异常)

基于N32G003的PMBus从机协议栈设计与STM32F103模拟I2C主机通信实战 本文详细介绍了基于N32G003微控制器设计PMBus从机协议栈,并与STM32F103模拟I2C主机进行通信的实战方案。重点阐述了中断驱动架构、命令解析、CRC8优化及超时恢复机制,实现了在70kHz速率下稳定可靠的工业电源管理通信,适用于服务器电源、通信基站等成本敏感应用场景。 阅读详情

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 

面向对象(异常)

一、异常概述

异常就是不正常的对立面,在程序里一般变现为出错或一些语句的提醒,比如数学里我们要除以一个数,如果这个数是零的话,那么系统就会报错:

 Exception in thread  “main” java.lang.ArithmeticException:/by zero

这时系通就提醒你,算数方法出错了,下面会告诉你具体什么位置,哪个元素等等。同时,哪个语句下面的语句就不会运行,就是说系统报出异常,程序就会停止。

从上面看来,异常:就是程序运行时出现的不正常情况。

异常的由来:问题也是现实生活中的一个具体的事物,也可以通过java类的形式,进行描述并封装对象,其实就是java对不正常情况描述后的对象体现。

Java中对于问题的划分分为两种:1、严重问题。2、非严重问题。对于严重的问题,java通过Error类来描述,对于非严重的,java通过Exception类进行描述。对于Error类来说,在java中是不可处理的,比如,我运行一个程序,但是这程序的类根本就没有,那么这种就是错误。Exception表达出来的错误,是可修复的。两者也有一些共性内容,想不正常情况,都会报出错误信息。

注意,既然两者有个共性,那么就会有他们的父类,这样就形成了基本的体系。这个父类时Throwable。它包含两个子类:1、Error  2、Exception

 

 

既然是异常,所以我们重点看到异常,Exception

 

二、异常处理

1、try-catch语句处理

既然系统会抛出异常信息,那么我们就可以处理这些异常信息的。Java中提供了处理异常的方法,就是try-catch语句。格式如下:

try{

         被检测语句;

}

catch(异常类名字){

         处理异常语句;

}

finally{

         一定执行语句;

}

 

这个格式是固定的,里面具体执行语句,这里再说一下。

try语句中执行的语句,是我们要检测的代码,比如刚才举得例子,出发中,除数为0,我们就把这个语句放入try这个语句块中。

catch中处理的上面被检测语句尝试的异常,里面加我们要处理的方式,要注意,语句中会传入一个异常类,这个类是Exception类或其子类。

finally的语句是一个不管程序是否报出异常,都会执行块,里面的代码一定会执行。

这样,对具体的执行流程,我们通过一个程序来看:

 

class ExceptionDemo

{

         try

         {

                   intx = 4/0;

                   System.out.println(x);

         }

         catch(Exception e )

         {

                   System.out.println("wrong");

         }

}

看上面程序,

1)     程序运行出现错误:

如果没有try-catch语句,那么当除数为0的时候,系统就会检测到这一错误,所以系统就会把这一错误装成一个对象,交给系统去处理,所以当程序运行出错时,系统就会抓到这一对象,去处理,报异常,错误语句后面的语句就不会执行了。如果有try-catch语句,就不一样了,首先错误语句会产生一个异常类的对象,系统检测到你有异常处理语句,所以catch就“抓”到了这一异常类的对象,把这个对象传入到catch语句中,执行我们自己定义的处理方式,因为系统错误处理了,所以程序就会在catch之后继续执行,但本身错误语句后面的语句就不会执行了,如例子中的System.out.println(x)语句就不会执行。

2)     程序运行没有错误:

没有try-catch语句的话,会正常运行。有try-catch语句,则不会执行catch里面对异常处理的语句。

除了我们自定义处理方式,我们可以再catch块中,对e进行操作,就是对异常类对象进行操作。常用方法有:getMessage():获取异常信息, toString():返回此异常的简短描述,printStackTrace():打印出异常信息和异常出现位置。

其实,jvm默认异常处理机制,就是调用printStackTrace()方法,打印异常的堆栈的跟踪信息。

 

2、抛出异常

   对于抛出异常的理解,是这样的。我们在使用一个功能的时候(比如说某一个函数),就这个功能在使用的时候可能会出错,我们的一个处理方式,就是上面的try-catch语句,但从功能设计者的角度来讲,我想要告诉你这个功能运行时可能会出现问题,这时的方法就是在我功能的方法上,我声明这个方法会出现异常,从使用者角度来讲,对你说的这个异常,我不想进行try-catch处理,那么我也把这异常声明出来,抛给下一个调用者,当然了就是JVM了,有JVM自己去处理。这里用到抛出异常的关键字:throws

         抛出异常的格式为:throws Exception       可以声明多个异常,用逗号隔开

当然了,抛出异常,可以是Exception,但这个范围太大了,一般抛出的异常都是程序里功能相关的,比如算数异常,IO异常等等。而且,一般我们都不抛异常,我们还是以try-catch处理异常为主。

 

3、多异常处理情况

首先,声明异常时,要声明更为具体的异常,这样处理的可以更具体。这样,我们就可以对相对应的异常,做出更精准详细的处理方式。

处理的时候,就要有相对应的处理,示例程序如下:

class ExceptionDemo{

         try{

                   intx = 4/0;

                   System.out.println(x);

         }

         catch (ArrayIndexOutOfBoundsException e)

                   System.out.println("wrong");

         }

         catch (IOException e )

                   System.out.println("wrong2");

         }

}             

其次,对方声明及格异常,就对应接catch块(如上面示例),不要定义多余的catch块,如果多个catch块中出现的异常继承关系,父类异常的catch块放在最下面。

对于异常的处理,有几个异常,就用几个catch块进行相对应的异常处理,但注意一点,catch抓住的是Exception异常,这样处理并不具体,而且我们在处理时候不知道到底什么情况的异常。而且,这种catch块不能放在第一catch块的位置,否则,就只会执行第一个catch块,后面两个永远也执行不到。所以,对于异常的处理,要坐到对应处理,不要一刀切。示例程序如下:

         try{

                   intx = 4/0;

                   System.out.println(x);

         }

         catch( ArrayIndexOutOfBoundsException  e )

                   System.out.println("wrong");

         }

         catch( Exception  e )

                   System.out.println("wrong2");

         }

看程序中的两个catch,两者有继承关系,所以作为父类的Exception块,就放到所有catch块的最后。

最后,建立catch处理时,在catch块中要定义具体的处理方式,不要简单定义一句话,也不要简单书写以个输出语句。

通常,做程序的时候,会把异常记录在某一文件了里,就是异常日子。

 

三、自定义异常

自定义异常,就是我们自己在写程序或者做项目的时候,会有一些项目中特有的问题,这些问题java中没有对应的对象,所以对于这些特有问题可以按照java面向对象的思想,将特有问题进行封装,那么我们就该自己定义异常,封装对象,以供声明或抛出。

这里的定义的方法:

1、  我们要建立自己的异常身声明,要把我们建立的体系方法java中的异常体系中。那么就要继承Exception类。

2、  Java中,如果程序产生异常,那么java就会自动把异常封装成对象进而抛出。而我们自己定义的异常,java不认识,所以我们要自己建立对象进行抛出。这里就用到关键字:throw (注意,和throws有区别的),后面接自定义异常对象。格式为:

           throw   new   自定义异常类的类名();

3、  如果函数内部throw抛出异常对象,那么就必须要给对应的处理动作,要么进行try-catch处理,要么在函数上声明让调用这处理。一般情况,在函数内出现异常,函数上需要声明。

4、  如何自定义异常信息?因为父类中已经把异常信息的操作都完成了,所以子类只要在构造时,将异常信息通过super传递给父类,那么就可以直接通过getMessage方法获取自定义异常信息。

示例程序:

classFushuException extends Exception{

FushuException(String message){

           super(message);

}

}

class TestDemo    {

int div(int a,int b)  throws FushuException {

           if(b<0)

                    throw FushuException("负数");

           return a/b;

}

}

 

 

总结:

1)  异常,java中就是程序运行时产生的错误。

2)  异常Exception,错误Error,都是Throwable的子类

3)  异常处理有两种方法:一是try-catch语句,二是函数上声明异常。当函数抛出异常时,使用throws关键字,多个异常,以逗号隔开。进行try-catch语句处理时,有几个异常就有几个catch块。

4)  注意try-catch处理异常时,如果catch块中有异常关系,那么catch中父类的放在多个catch块的最后。

5)  catch块中的处理方式,不要是简单的输出语句,最好是详尽只管的处理语句。

6)  一旦有异常,就意味着程序的停止

7) 自定义异常注意:一、要继承Exception或其父类,要把自己定义异常纳入java异常体系,这样才可以使用。二、函数内部,抛出自定义异常类的对象,用关键字throw(当然也可以直接抛java自己有的异常类对象),这时必须在函数上声明异常。

8)  自定义异常:因为继承Exception,可以直接引用父类方法和构造函数,是自定义异常程序简单化。

9)  注意,有throw语句时,下面不要跟任何语句,执行不到,否则编译失败。

 

throw和throws的区别:

1、位置区别   throw使用在函数内;throws使用在函数上

2、使用方法区别  throw后面接异常类的对象;throw后面接异常类,可以有多个,用逗号隔开

 

 

四、特殊异常类RuntimeException

Exception中特殊异常子类RuntimeException,运行时异常。关于这个异常有两点:

一、如果再函数内抛出该该异常,函数上可以不用声明,编译一样通过。

二、如果再函数上声明了该异常,调用者可以不用进行处理,编译一样通过。

 

之所以不用函数上进行异常声明,是因为不需要让调用者处理。当该异常发生时,希望程序停止,因为运行时,出现了无法继续运算的情况,希望停止程序,对代码进行修正。

依照上述,那么我们在自定义异常时,如果该异常方法,无法继续运算,就让自定义异常继承RuntimeException。

 

总结来说:

1)  RuntimeException,函数内抛出,函数上可以不声明异常。函数上抛出异常,调用者不用处理

2)  异常就分为:一、编译时异常Exception  二、运行时异常RuntimeException

3)  自定义异常,可以根据需要,继承的异常类可以分为:一、继承Exception,二、继承RuntimeExce。

 

 

五、finally语句

在上面的异常概述里,finally语句中是一定会被执行的语句。

小知识,return可以结束主函数运行。

因为finally中的语句一定会被执行,所以通常用于关闭资源

注意这种格式是成立的:

try{

}

finally{

}

 

六、覆盖时异常特点

1、子类在覆盖父类时,如果父类方法抛出异常,那么子类的覆盖该方法,只能抛出父类异常或该异常类的子类。

2、如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集

3、如果,子类覆盖父类,其他方法抛出的是除了父类异常和它的子类异常外,只能在函数内部进行try-catch处理,不能抛出异常声明。

4、如果父类或接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出

         如果子类方法发生了异常,就必须要进行try-catch处理,绝对不能抛。

 

FDTD材料nk值拟合优化指南:利用材料资源管理器提升光学模型精度 本文详细介绍了如何利用FDTD仿真软件中的材料资源管理器,对材料nk值进行精确拟合与优化,从而提升光学模型的仿真精度。文章通过实战案例,解析了拟合参数调整、报告解读以及针对varFDTD求解器的特殊注意事项,帮助用户从根本上解决仿真结果不准的常见问题。 阅读详情

相关推荐

手把手解决AutoDock安装那些坑:从autogrid报错到.map文件生成(Win10/11环境)

本文详细解析了在Win10/11环境下安装AutoDock时遇到的常见问题,特别是autogrid报错和.map文件生成失败的情况。通过实战验证的解决方案,包括环境变量设置、Python版本管理、文件权限调整等,帮助用户顺利完成安装并提升分子对接研究效率。

weixin_42548888的博客 198

黑马程序员——面向对象之异常

------- android培训、java培训、期待与您交流! ---------- 异常就是程序在运行时出现不正常情况  异常的有来:问题也是现实生活中一个具体事物,也可以通过java的类的形式进行描述   其实就是java对不正常情况进行描述后的对象体现                对于问题的划分:两种:1,严重的问题,2,非严重的问题    对于严重的:java通过Er

u012996772的专栏 385

域控制器迁移后NETLOGON共享丢失的修复指南

本文详细解析了在Windows域控制器迁移后NETLOGON共享丢失的故障现象与修复方法。通过使用Dcdiag工具诊断,定位注册表键值SysVolReady异常及SCRIPTS目录缺失等核心原因,并提供了修改注册表、创建目录、重启Netlogon服务等逐步修复指南,帮助管理员快速恢复域用户登录功能,确保业务连续性。

weixin_29245767的博客 88

黑马程序员——面向对象-异常

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------     异常处理的捕捉模式: class FuShuIndexException extends Exception { FuShuIndexException() { } FuShuIndexException(String msg) { super(msg); } }

w85536179的专栏 414

使用 VPN 访问太理内部网相关问题总结【太原理工大学】

电脑连接 VPN,访问校园内部网相关问题总结,太原理工大学。

m0_52861684的博客 9881

lvds接口_LVDS,接口,时序讲解,非常好的文章

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群1.1.1 LVDS接口分类1.1.1.1 单路6bit LVDS这种接口电路中,采用单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此,也称18位或18bit LVDS接口。此,也称18位或18bit LVDS接口。1.1.1.2 双路6bit LVDS这种接口电...

weixin_39639286的博客 1903

黑马程序员 Java面向对象——异常

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 面向对象 首先什么都不说,Java是面向对象的语言,当然也对异常包装成了对象(Throwable),方便了我们的使用,这个是必须的,咱们以后天天面向对象,当然现在我是没有对象的,所谓对象就是女朋友。准备黑马

u014434956的专栏 570

RS422总线

①.RS422发送驱动器无高阻三态(浮空)状态RS422收发芯片,发送脚固定强驱动输出,永远钳位 A/B 差分电平,不能关断、不能悬空,只要芯片上电,TX+、TX - 就强制输出互补电压(一路高、一路低)。多条发送并联在同一组差分线上:两个驱动器一个拉 A 高、一个拉 A 低,B 线反向拉扯 → 电源→地大电流对灌,瞬间芯片过流发烫烧毁、总线电平短路错乱。注意:RS485 带DE/RE 收发使能脚:不用发送时可关闭驱动器,输出变成高阻浮空,让出总线,因此能多节点分时发送。③.多点通信方式,一主多从方式;

zhuimeng_1234的博客 223

黑马程序员_面向对象三大特性之——多态以及异常概述

---------------------- ASP.Net+Android+IOS">http://edu.youkuaiyun.com"target="blank">ASP.Net+Android+IOS开发、<a href=".Net">http://edu.youkuaiyun.com"target="blank">.Net培训、期待与您交流! ---------------------- 一、多态的定义

Cla_CSharp1126XueXi的专栏 1498

DeepSeek网页版和DeepSeek Harness

DeepSeek网页版是开箱即用的对话工具,适合快速问答与日常任务;而DeepSeekHarness(dsh)是基于Node.js的开源智能体框架,支持文件操作、命令执行、多工具协同,实现“对话即执行”。二者定位不同:网页版为“大脑”,Harness为“躯体”。前者封闭易用,后者开放可扩展,具备可追溯的执行日志与插件化架构。未来,网页版将聚焦轻量化普及,Harness则致力于构建生态平台。对开发者而言,应将AI作为执行层,守住决策层,深耕垂直领域,并掌握AI工作流设计能力,以构建不可替代的技术优势。

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 908

23、工业物流中的多智能体路径规划与碰撞处理策略

本文探讨了工业4.0背景下工业物流中的多智能体路径规划(MAPF)与碰撞处理策略。分析了自动导引车(AGV)等移动资源的应用现状,综述了主流路径规划算法如A*、D*Lite、M*等,以及集中式与分布式碰撞检测方法。重点比较了五种碰撞避免策略:路径交叉、优先级、起始时间调整、无交叉路径和速度调整,提出了基于环境条件的策略选择流程,并通过流程图展示了评估、组合、测试与优化的全过程。文章强调应根据订单不确定性、时间约束、优先级和生产组织等因素综合选择或组合策略,以提升物流效率与系统可靠性。

mac99的博客 125

黑马程序员 Java面向对象——异常

面向对象 首先什么都不说,Java是面向对象的语言,当然也对异常包装成了对象(Throwable),方便了我们的使用,这个是必须的,咱们以后天天面向对象,当然现在我是没有对象的,所谓对象就是女朋友。准备黑马就业后才去new 一个对象。 异常:就是程序在运行时出现不正常情况。 异常由来: 问题也是现实生活中一个具体的事物,也可以通过Java的类的形式进行描述。

苦行僧 601

【Dify】36氪新闻热榜智能自动化采集与AI处理

本文介绍如何利用Dify等自动化工具实现36氪新闻热榜的智能采集与处理。通过HTTP请求节点获取数据,JSON解析节点结构化处理,AI处理节点生成智能摘要,最终格式化输出结果。工作流程包含数据获取、解析、AI摘要、文本整理和内容输出五个环节,支持批量化、定制化的新闻处理需求。该方案适用于行业监测、内容创作、舆情管理等场景,显著提升信息获取效率,实现"所需即得"的自动化新闻服务。系统采用OpenAI GPT和Dify API作为核心模型,无需复杂人工干预即可完成全流程处理。

Mr数据杨 600

黑马程序员Java面向对象——异常

¥异常 异常就是在程序运行时出现不正常情况。 1     异常的由来:问题也是现实生活中一个具体的事物。也可以通过java的类的形式进行描述,并封装成对象。 其实就是java对不正常情况进行描述后的对象体现。 对于问题的划分,两种:一种是严重的问题,一种非严重的问题。 对于严重的,java通过Error类进行描述。        对于error一般不编写针对性的代码对其进行处理。 对

yu3327yu的专栏 694

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

黑马程序员——面向对象--异常

现在总觉得时间过的好快啊,每天还没有闲下来,一天就过去了,感觉时间越来越不够用了。坚持。 异常大纲: 1.6.1 java中异常的思想  1.6.2 异常体系结构  1.6.3 自定义异常  1.6.4 异常的分类  1.6.5 Throw与throws的区别  1.6.6异常的捕捉形式  1.6.7 代码快组合的特点  1.6.7 异常的处理原则  1.6.8 异常的注意事项

juemei_01的专栏 331

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

黑马程序员_面向对象—>异常

------- android培训、java培训、期待与您交流! ----------  异常 1.异常:就是程序在运行时出现不正常情况。 2.异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。其实就是java对不正常情况进行描述后的对象体现。 3.对于问题的划分:两种:一种是严重的问题,一种非严重的问题。 (1)对于严重的,java通过

u013315762的专栏 468

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

黑马程序员 面向对象(二)继承、接口、多态和异常

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

482

黑马程序员——Java 面向对象_异常

异常 在函数上声明异常,便于提高安全性,让调用者进行处理,不处理编译失败. 对多异常的处理 1.声明异常时,建议声明更为具体的异常,这样处理的可以更具体, 2.对方声明几个异常,就对应有几个catch块.不要定义多余的catch块. 如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面. 建议在进行catch处理时,catch中一

chen_single的博客 418

黑马程序员-面向对象:异常

 ------- android培训、java培训、期待与您交流! ----------   程序执行时经常会出现一些意外的情况,这些意外的情况会导致程序出错或者崩溃,从而影响程序的正常执行,如果不能很好的处理这些意外情况,将使项目的稳定性不强。对于这些程序执行时出现的意外情况,在Java语言中被称作异常(Exception),出现异常时相关的处理则称之为异常处理。     异常处理...

kensib的专栏 146

黑马程序员——面向对象10(异常下、包)

——- android培训、java培训、期待与您交流! ———- 1.1,finally 1,finally中定义的通常是关闭资源代码。因为资源必须释放。 2,如果在一个功能中,定义了一些必须要执行的代码,可以用try{}finally{}的方式,将一定 执行的代码放在finally代码块中。 3,finally只有一种情况不会执行。

a378983320的博客 372

黑马程序员——面向对象(异常-上)

黑马程序员——面向对象(异常)

qq314777895的专栏 466

黑马程序员——面向对象(异常-下)

黑马程序员——面向对象(异常-下)

qq314777895的专栏 414

黑马程序员+第三章面向对象 第10天 异常

------- android培训、java培训、期待与您交流! ---------- day10   56、异常处理语句: 注意: 1,finally中定义的通常是 关闭资源代码。因为资源必须释放。 2,finally只有一种情况不会执行。当执行到System.exit(0)时不会执行。   57、自定义异常:定义类 继承Exception或者RuntimeExcep

tcgwl的专栏 634

《黑马程序员python教程,8天python从入门到精通,学python看这套就够了》学习笔记总目录

本文是对《黑马程序员python教程,8天python从入门到精通,学python看这套就够了》所有知识点的笔记进行总结分类。 学习时总结的目录笔记以及思维导图和实训,将在后续更新。

放下华子我只抽RuiKe5的博客 8832

黑马程序员————面向对象(继承,抽象类,接口,多态,异常)

继承   继承的概念:在Java中,类的继承是指在现有类的基础上去构建一个新的类,构建出来的类被称为子类,现有类被称为父类,子类会自动拥有父类所有可继承的属性和方法。在程序中,如果想声明一个类继承另一个类,需要使用extends关键字。例如: class Animal { String name; void speak() { System.out.println("动物");

big_baodaren的专栏 610

黑马程序员——java面向对象和异常

---------- android培训、java培训、java学习型技术博客、期待与您交流! ----------   面向对象是相对面向过程而言的。老毕通过了“把大象装进冰箱”这个例子给我们讲解了两者的区别。面向过程是强调动作,面向对象是强调了具备功能的对象。 Java有三个特性:封装、继承、多态。这三个特性很重要,掌握了它,面向对象基本上就掌握  了,剩下的就是经验而已。

mnisummer的专栏 485
上一篇: 黑马程序员_Object和内部类
下一篇: 黑马程序员_String类及StringBuffer和StringBuilder概述和功能、基本数据类型
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值