`
XY1991
  • 浏览: 36805 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

java异常小结

阅读更多

 

 

      其实,熊哥前两天讲了java中的异常之后,我不是特别想写异常的总结,可能是因为对异常没有自己的了解,只是上课讲的一些东西。异常,之前老觉得自己遇到的很少,学了异常也不知道有什么用,之前写程序并没有遇到与异常相关的try、catch、finally、throw、throws等关键字,很陌生,加之之前学习C++时,老师讲完类的封装、继承、多态三大重要特性之后,又讲了些C++中的异常和输入输出流的一些知识,我当时没怎么听懂,由于时间关系后来也没去深究,但是现在写C++程序貌似也不受影响,对异常更是云里雾里的。第二次学习异常,绝不会像第一次那样由他去了,一定要搞清除异常到底是什么,能干什么。

 

      异常,谈起异常就离不开那几个关键字:

      try{                              //用来捕获{}中间可能出现的异常

   }catch(){                         //一旦出现异常,就到这个语句中处理异常
  
   }finally{
                                           //不管是否出现异常,都将执行finally中的语句
   }

     这三个关键字是要一起使用的,这是处理异常比较安全的一种方式

     处理异常还有另一种方式,就是在方法名后面直接跟throws + 异常直接把异常抛出去,而我们不做处理,从而不影响程序的运行,例如:

 

public void createFile(String fileName) {//throws IOException { //创建一个File对象 File file = new File(fileName); // 创建文件,调用createNewFile()方法 file.createNewFile(); System.out.println("文件创建成功!"); }


 

 

在这个程序中,file.createNewFile();  会出现问题:Unhandled exception type IOException

    即有一种IOException没有处理,这是为什么呢?原来,createNewFile();这个方法在定义的时候就要抛出一个异常
,所以我们在调用的时候,程序就会强制要求我们抛出异常,否则程序一直有问题

 

//这个是java中已经定义好的createNewFile() 的实现 public boolean createNewFile() throws IOException { SecurityManager security = System.getSecurityManager(); if (security != null) security.checkWrite(path); return fs.createFileExclusively(path); }


 

要解决上述问题,public void createFile(String fileName)throws IOException {

}抛出异常是一种简单但是比较极端方法,也可以采用try…catch()…finally语句,我们自己处理异常

使用这种处理方法时,可以在catch(异常  对象)如:catch (IOException e)

在catch语句中我们可以让程序打印出异常的信息,有以下三种方式:

e.toString();                 //会输出异常类以及错误的信息
e.getMessage();          //只会输出错误的信息
e.printStackTrace();     //输出异常类、错误的信息和所产生错误的行

 

我们要根据具体情况采取合适的方法来处理异常

 

 

还有一个关键字throw是程序员可以自己创建一个异常,然后再来处理自己创建的异常

如创建语句:throw new Exception("出现异常");

 以上这种IOException是程序会提示出现异常,如果程序要运行则必须处理的这种异常,叫做强制异常类型(明文提示)

 

与之相对应的还有非强制异常类型(无明文提示)

         如下这种异常就是非强制性异常:

         java.lang包中的Integer类调用其类方法:

         public static int parseInt(String s)

可以将数字转换为int型的数据,但是若转换的不只是数字时:

如:int a = Double.parseInt(123abc34);

写程序时程序并不会报错,一旦运行,下方会出现异常信息,这是NumberFormatException异常,也是一种非强制类型的异常

 

 

 

无论是IOException还是NumberFormatException,都是Exception的子类,如果有几个异常要处理的话:

有两种处理方式:
  1.直接抛出Exception异常,因为所有的异常类都是Exception的子类,

   throw Exception,就不用将异常一个个抛出了


  2.可以加上多个catch语句,不同的异常,交给不同catch进行处理。catch语句也是可以嵌套使用的

 

 

 

 

      其实,在熊哥讲异常之前,我一直在思考,究竟异常和错误有什么区别,我知道他们肯定不是一回事,但是自己又说不上来有什么区别,总之程序报错,输出错误信息就是了,但现在我对他们的区别又多了一些理解:

 

 

异常:是用来处理预料之外的Exception,即我们在写程序时并不能预料到会出现异常。Mary Campione在The Java Tutorial(Java指南)中所写到,“一个异常是在一个程序执行过程中出现的一个事件,它中断了正常指令的运行。”

而根据根据American Heritage Dictionary的解释,一个错误是“偏离了可接受的代码行为的一个动作或一个实例。”

 

 

如果出现了异常,那么它后面的语句将不再执行,程序直接显示异常信息,这也许就是中断吧,并且异常一般是可以处理的

 

 

错误:Error,这种错误,会很少碰到,一旦碰到将无法进行处理和预防。

 

 如果我们不停读写文件,但是却不调用close()方法时,占用的内存无法被释放,会造成内存溢出,这就是一种错误

 

 

        其实,写到这里,才发现之前写程序时经常会遇到两类异常

1、空指针异常:Java.lang.NullPointerException

 

      之前我遇见的空指针异常,原因基本上就是两个类, 例如:都有一个Chess[]数组,定义的名字也是一样的,我在B类中初始化Chess[]数组,但是我想把数组传到A类中,刚开始对参数传递不熟悉,经常不能成功传递就在A类中输出Chess[]数组的值,往往会报空指针异常,做过一些小项目之后对参数传递也有点理解了,

可以定义一个构造函数传参:

public B(int[] chess){

this.chess = chess;

}

再在A类中创建B类的对象,会调用B类的构造函数,这样就完成了参数传递

 

 

还有一种方法,就是在B类中写一个方法:

public int[] getChess(){

return chess;

}

在A类中创建B类的对象去调用这个方法,也能完成参数传递

 

 

2、数组下标越界

 

    Java.lang.ArrayIndexOutOfBoundsException

我印象中最早遇到数组下标越界是在写自定义队列的实现时(也许之前我曾遇到过,但我并不知道那是数组越界吧)

自定义队列中实现在任意位置添加元素时,由于数组下标是从0开始的,一不小心就出现这个错误

还有在五子棋判断输赢的算法时,没有设置最大最小范围,常常出现数组越界,后来意识到错误时,注意一下就好了

 

 

其实,对于这两种异常已经很熟悉了,异常并不像我想象的那么陌生,初学异常,自己的理解蛮少,运用的也不多,等以后用得多了再来完善这篇文章吧。(在文件的输入输出流也会用到异常)

 

2
0
分享到:
评论

相关推荐

    java异常机制小结

    Java 异常机制小结 Java 异常机制是 Java 语言中一个非常重要的方面,也是程序设计的一大难点。Java 语言在设计的当初就考虑到异常处理的框架的方案,使得所有的异常都可以用一个类型来表示,不同类型的异常对应...

    Java异常小结

    Java异常处理是编程中至关重要的一个部分,它用于处理程序运行时可能出现的错误或异常情况。在Java中,异常处理采用了一种面向对象的方式,通过创建特定的异常类来表示不同类型的错误,使得代码更加清晰、可维护。...

    java异常讲解

    #### 七、小结 通过以上介绍,我们可以了解到Java异常处理机制的强大之处。正确地使用异常处理不仅可以提高程序的健壮性,还可以让程序更加易于维护和扩展。在实际开发中,合理地使用异常处理机制对于构建高质量的...

    java基础小结

    《Java基础小结》 Java,作为一种广泛应用的编程语言,以其跨平台、面向对象的特点深受开发者喜爱。这篇博文和随附的PDF笔记旨在总结Java的基础知识,帮助初学者巩固理解,同时也为有经验的开发者提供回顾参考。 1...

    JAVA异常入门(思维导图)

    1.异常的概念2.异常的分类3.捕获并处理异常(try……catch/finally)try……catch块 try……多catch块 try……catch/finally块 4.抛出异常throws5.自定义异常 自定义异常的来由 操作步骤 ...小结 throw与throws的区别

    Java异常处理操作实例小结

    Java 异常处理操作实例小结 Java 异常处理是 Java 编程语言中的一种错误处理机制,用于捕获和处理运行时的异常情况。本文将通过实例形式总结分析 Java 异常处理操作的常见情况与相关处理技巧。 一、异常处理的使用...

    java课程小结.rar_北京理工大学JAVA课程

    这个“java课程小结.rar_北京理工大学JAVA课程”压缩包中包含的“课程小结”文件,很可能是教授精心编写的教学精华,旨在帮助学生巩固所学知识并为后续学习打下坚实基础。 在Java课程中,有几个核心概念和技术是必...

    Java异常处理-自定义异常类及课后练习

    【Java异常处理-自定义异常类及课后练习】 在Java编程中,异常处理是程序健壮性的重要组成部分。Java提供了丰富的预定义异常类,但有时这些预定义的异常类并不能满足特定业务需求,这时就需要自定义异常类。自定义...

    Thrift-java学习小结

    本文将基于Thrift的Java实现,总结学习过程中的一些关键知识点,旨在帮助理解Thrift的工作原理以及如何在Java环境中应用。 一、Thrift简介 Thrift是一种远程过程调用(RPC)框架,它通过定义一种中间描述文件(....

    java 技巧小结荟萃

    ### Java技巧小结荟萃 #### Javadoc API 文件产生器 Javadoc 是一款非常重要的工具,主要用于生成文档,能够从源代码注释中提取出有用的文档信息。这不仅有助于提高代码的可读性,还方便其他开发人员快速理解类、...

    java异常分类

    #### 四、小结 理解并正确处理Java中的异常对于编写健壮、可靠的应用程序至关重要。通过了解各种异常的特性和如何有效地捕获和处理异常,可以显著提高程序的质量和稳定性。希望本文介绍的几种常见的运行时异常能够...

    java试题小结可以下载的

    【Java试题小结】 1. **Applet生命周期与方法**: - 在Java中,Applet的生命周期包括初始化、启动、绘画、停止和销毁几个阶段。`init()`方法用于初始化Applet所需资源,`paint()`方法负责在屏幕上绘制图形,如线条...

    java多态小结

    ### Java多态详解 #### 什么是多态? 多态(Polymorphism)是面向对象编程的一个核心特性,指的是一个接口可以被多个类所实现或一个类可以被多个类所继承,进而表现出不同的行为。在Java中,多态主要体现在两个...

    java调用RMI小结

    这些接口需要继承`java.rmi.Remote`接口,并声明可能抛出`RemoteException`的异常。例如,上述示例中的`LoadFile`接口。 ```java public interface LoadFile extends Remote { void upLoadFile(FileInformation ...

    Java多线程小结

    ### Java多线程小结 #### 一、多线程的概念与意义 多线程是Java编程中的一个重要概念,指的是程序在运行时可以同时执行多个线程的能力。它能够提高程序的性能,尤其是在多核处理器的环境下。多线程使得程序能够更...

    Java编程开发 Java输入语句小结.doc

    在Java编程中,输入语句是程序与用户交互的关键部分,允许用户向程序提供数据。以下是对Java输入语句的详细总结,主要介绍两种常用的方法:`Scanner`类和`...在处理用户输入时,一定要注意异常处理,确保程序的健壮性。

Global site tag (gtag.js) - Google Analytics