Exception-----异常可谓是我们程序员,在开发程序的时候,常见的伙伴,有时候,它让你苦不堪言,调试半天也弄不出错在哪里了。今天就这个问题,根据自己的开发经验,总结自己经常遇到的各种异常,仅供参考,不足之处,望见谅。
一.NullPointException空指针异常
1.概述:该异常经常出现,主要原因是没有正确的理解对象这个概念,我们知道,在java中只有对象才可以用来调用方法,那我们如果只是声明一个变量,就不能用来调用方法。此时调用方法就会出现空指针异常。
2.处理办法:我们只需要找到跑出异常的那一句话,然后找到相应的变量,最后,让该变量指向一个对象就可以了。
3.例句:
public class ExceptionTest { public static void main(String[] args) { //NullPointException,空指针异常 String str = null; str.length(); } }
4.抛出异常,
Exception in thread "main" java.lang.NullPointerException
at study.exception.ExceptionTest.main(ExceptionTest.java:5)。
也就是str.length(),这一句话。我们发现,str是一个空的对象。在这里只需要给str一个值就可以了。(String 类比较特殊)
二.NumberFormatException 字符串转换异常
1.概述:应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
2.处理办法:根据不同的题意,看看这个方法适合什么范围的树枝转换
3.例句:
public class ExceptionTest { public static void main(String[] args) { //NumberFormatException,字符串转换成一种数值类型出现异常 String str = "123abc"; int s = Integer.parseInt(str); } }
4.抛出异常:
Exception in thread "main" java.lang.NumberFormatException: For input string: "123abc"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at study.exception.ExceptionTest.main(ExceptionTest.java:5)
我们知道,parseInt(),转换的范围是str中的字符必须是0-9之间的,修改一下范围即可,我们明白,出现这个异常后,我们要立即查看这个函数适合的范围对不对。
三.ClassCastException 强制转型出现的异常
1.概述:当试图将对象强制转换为不是实例的子类时,抛出该异常。
2.处理办法:查看该类型和转换以后的类型是不是“父子关系”,如果不是,则转型失败。
3.例句:
public class ExceptionTest { public static void main(String[] args) { //ClassCastException,父类向下转型的时候,会出现这个异常 Object obj = new JTextArea(); JButton jb = (JButton)obj; } }
4.异常:
Exception in thread "main" java.lang.ClassCastException: javax.swing.JTextArea cannot be cast to javax.swing.JButton
at study.exception.ExceptionTest.main(ExceptionTest.java:4).向下转型的基础是,两个类型必须是父子类的关系,
才有可能转型,即使如此,有时候,强制转型有时候也会出现错误。
四.IndexOutOfBoundsException 数组越界异常
1.概述:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
2.处理办法:这里我们看看抛出的异常的后面,会标明是数组是哪个位置越界了,我们找到这个位置,将数目改变一下即可。
3.例句:
public class ExceptionTest { public static void main(String[] args) { //IndexOutOfBoundsException,数组越界,会出现这个异常 int[] a = new int[10]; a[10] = 10; } }
4。异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at study.exception.ExceptionTest.main(ExceptionTest.java:5)
异常中有个10,表明,我们这个数组的第10个位置的时候越界了。我们就知道该如何处理了。
五.NoSuchFieldException 没有这个字段异常
1.概述:类不包含指定名称的字段时产生的信号。
2.处理办法:这个经常用于文件的操作过程当中,我们要打开一个文件,但是该文件不存在,就会抛出这个异常
3.例句:
public class ExceptionTest { public static void main(String[] args) { //NoSuchFieldException,数组越界,会出现这个异常 try { FileOutputStream file = new FileOutputStream("111"); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
4.异常,这里如果是在eclipse开发的话,会给你主动提示,这里是要捕获没有这个文件的异常
六.NoSuchMethodException没有这个方法的异常
1.概述:无法找到某一特定方法时,抛出该异常。这里就不做过多的描述了,很简单,找到看看这个方法是不是存在。
总结:异常是我们在编程不时候,很容易遇到的事情,我们需要灵活的学会捕捉这个异常,处理方法:
1.一般我们用这个方法来进行处理:
try{ 可能出现异常的代码 }catch(Exception e) { 捕获后处理的办法,经常用e.printStackTrace();这个方法来打印异常的详细信息 }finally { 不管是不是捕获到了异常,这里都会执行 }
2.还有另一种方法,直接throws将相应的异常抛出,不过这个在大型的编程项目里,会比较麻烦。
只要是调用了这个方法的方法,我们要不断的抛出异常。
大家一起加油,争取早日交到异常这个好朋友!
相关推荐
- 异常类的使用可以帮助程序员更好地控制程序流程,分离错误处理代码,并提高代码的可维护性。 6. **断言(Assertion)** - 断言是一种调试工具,用于检查代码中的假设是否正确。通过`assert`关键字,可以在代码...
学习J2SE意味着掌握了Java编程基础,包括语法、面向对象设计、异常处理等。 2. **J2EE**:Java企业版,用于开发企业级应用,如Web应用、分布式系统等。涵盖Servlet、JSP、EJB等内容,需要理解MVC设计模式、会话管理...
Java的速查表可能涉及类、对象、接口、异常处理、多线程等核心概念。 3. **JavaScript**:主要用于网页和网络应用的脚本语言,支持事件处理、动态内容更新等。JavaScript速查表涵盖变量、函数、DOM操作、AJAX请求等...
`promise`是`future`的“伙伴”,用于设置`future`的值或抛出异常。当你创建一个`future`时,你可以同时创建一个`promise`,通过`promise`来设定`future`的值,使得异步操作的结果可以在适当的时间被`future`获取。 ...
在IT行业中,高效且精准的调试工具是程序员们不可或缺的伙伴。CodeSite 5 Pro,作为专为DelphiXE2及以上版本设计的一款高级调试器,它以其强大的功能和易用性赢得了程序员们的广泛赞誉。本文将深入探讨CodeSite 5 ...
《Python 3.7.3 官方中文文档 集合》是学习Python编程语言不可或缺的资源,尤其对于...通过深入阅读和实践,可以提升Python编程技能,更好地利用Python解决实际问题。在你的编程之旅中,这份文档将是你不可或缺的伙伴。
- **用途**:注释是用来解释代码的文本,对程序员阅读代码非常有帮助。在Java中,注释可以分为单行注释(`//`)、多行注释(`/* */`)和文档注释(`/** */`)。文档注释可以被工具提取并生成文档。 #### anonymous ...
总结来说,VC++6.0作为一款历史性的编程工具,它见证了C++的发展,是无数程序员的启蒙伙伴。尽管存在局限性,但其经典的功能和广泛的教学资源仍然使其在某些场景下具有一定的价值。随着技术的进步,开发者可能需要...
《ScriptExpert脚本大师——深度解析与应用指南》 ScriptExpert是一款备受推崇的脚本调试和分析工具...无论你是初学者还是经验丰富的程序员,ScriptExpert都是你值得信赖的伙伴,它将助你在脚本编程的道路上行稳致远。
通过遵循书中的学习路径,结合个人的努力和实践,即使是完全没有编程背景的人也可以在短时间内成为一名合格的Java程序员。无论你是希望通过自学找到新的职业方向,还是希望提升自己的技术能力,《21天自学Java》都将...
因此,英特尔在文档中明确声明,对于关键任务应用,购买和使用英特尔产品的个人或单位需要对英特尔及其子公司、关联公司、合同商和合作伙伴提供全面的免责保护,包括由产品责任、人身伤害或死亡引起的所有索赔、费用...
在Python的世界里,库扮演着至关重要的角色,它们为程序员提供了丰富的功能模块,大大提升了开发效率。本文将围绕Python库“coffeeshop-1.1.0”进行深入探讨,揭示其在后端开发中的应用价值。 “coffeeshop-1.1.0”...
- **定义**:Comments 是程序员在源代码中添加的注释,用于解释代码的目的或功能。在Java中,注释不会被编译器处理,因此不会影响程序的运行。 #### Compile (编译) - **发音**:[kәm'pail] - **定义**:Compile ...
这个库包括监督学习(如分类、回归、聚类)和无监督学习(如降维、异常检测)算法,同时支持数据预处理、模型选择和评估工具。 **主要特性** 1. **易用性**:Scikit-learn的API设计简洁,使得机器学习模型的训练和...
在嵌入式系统开发中,调试工具是程序员不可或缺的伙伴。STMicroelectronics(意法半导体,简称ST)作为全球领先的微控制器供应商,为开发者提供了多种强大的工具,其中gprobe就是一款专为STM32微控制器设计的高效...