精华内容
下载资源
问答
  • Java的异常类型总结

    2019-03-25 14:11:32
    简而言之,并不是所有的异常都是相同的,因此程序员需要考虑几种类型。 异常是导致程序无法在其预期的执行中运行的事件。异常有三种类型——检查异常、错误和运行时异常。 The Checked Exception(检查...

    Java的设计目的是让程序员有机会设计一个没有错误的应用程序。当应用程序与资源或用户交互时,程序员可能会知道一些异常,这些异常是可以处理的。不幸的是,也有程序员无法控制或简单忽略的例外情况。简而言之,并不是所有的异常都是相同的,因此程序员需要考虑几种类型。

    异常是导致程序无法在其预期的执行中运行的事件。异常有三种类型——检查异常、错误和运行时异常。

    The Checked Exception(检查异常)

    已检查异常是Java应用程序应该能够处理的异常。例如,如果应用程序从文件中读取数据,它应该能够处理FileNotFoundException。毕竟,无法保证预期的文件会出现在它应该出现的位置。文件系统上可能发生任何事情,应用程序对此一无所知。

    让我们进一步看看这个例子。假设我们使用FileReader类来读取字符文件。如果你看一看Java api中的FileReader构造函数定义,你会发现它的方法签名:

    public FileReader(String fileName)
    throws FileNotFoundException
    

    如您所见,构造函数明确声明FileReader构造函数可以抛出FileNotFoundException。这是有意义的,因为文件名字符串很可能会不时出错。请看下面的代码:

    public static void main(String[] args){
    FileReader fileInput = null;
    //打开输入文件
    fileInput = new FileReader("Untitled.txt");
    }
    

    从语法上来说,这些语句是正确的,但是这些代码永远不会编译。编译器知道FileReader构造函数可以抛出FileNotFoundException,而处理此异常则取决于调用代码。有两个选择-首先,我们可以通过指定一个throw子句来传递异常:

    public static void main(String[] args) throws FileNotFoundException{
    FileReader fileInput = null;
    //打开输入文件
    fileInput = new FileReader("Untitled.txt");
    }
    

    或者我们可以处理例外情况:

    public static void main(String[] args){
    FileReader fileInput = null;
    try
    {
    //打开输入文件
    fileInput = new FileReader("Untitled.txt");
    }
    catch(FileNotFoundException ex)
    {
    //告诉用户去找文件
    }
    }
    

    编写良好的Java应用程序应该能够处理检查过的异常。

    Errors(错误)

    第二种异常称为错误。当异常发生时,JVM将创建一个异常对象。这些对象都派生自可抛出类。可抛出类有两个主要子类——错误和异常。Error类表示应用程序不太可能处理的异常。

    这些例外被认为是罕见的。例如,JVM可能会因为硬件无法处理它必须处理的所有进程而耗尽资源。应用程序可以捕获错误并通知用户,但通常应用程序必须关闭,直到底层问题得到处理。

    Runtime Exceptions(运行时异常)

    发生运行时异常仅仅是因为程序员犯了错误。你已经写好了代码,编译器会觉得一切都很好当你运行代码时,它会崩溃,因为它试图访问一个不存在的数组元素或者一个逻辑错误导致一个方法被调用为空值。或者程序员可能犯的任何数量的错误。但是没关系,我们通过详尽的测试来发现这些异常,对吧?

    错误和运行时异常属于未检查异常的类别。

    为了学习工作与休闲娱乐互不冲突,现新建圈【码农茶水铺】用于程序员生活,爱好,交友,求职招聘,吐槽等话题交流,希望各位大神工作之余到茶水铺来喝茶聊天。群号:603619042

    还有大量的面试题,视频资源共享,
    在这里插入图片描述

    展开全文
  • 浅谈.net和Java的异常类型设计

    千次阅读 2011-06-26 21:35:00
    最近在自学Java,看到Java的检查型异常设计时,心中不免有些疑惑。疑惑使用检查型异常的必要性。注:本人现在从事的.net开发。C#在设计上借鉴了Java,但是,C# 并没有引入所谓的检查型异常。 在网上看到一些关于...

    最近在自学Java,看到Java的检查型异常设计时,心中不免有些疑惑。疑惑使用检查型异常的必要性。注:本人现在从事的.net开发。C#在设计上借鉴了Java,但是,C# 并没有引入所谓的检查型异常。

     

    在网上看到一些关于Java中是否该采用检查型异常的机制。真是众说纷纭,但是还是可以总结为,对这个设计的批评声更多。其实,我没有在真正项目中使用Java开发的经验,更没有过在方法签名中声明检查型异常的经验。但是,在使用了C#这个长时间以来,也没有觉得C#完全抛弃检查型异常带来怎样的不便和设计上的缺陷。

     

    据说,C#的设计人员大都有很长时间的Java语言开发经验(怪不得从语法到机制上都是这么惊人的相似),也怪不得他们不引入检查型异常,估计是深受其苦吧。

     

    我的感觉是,在.net的任何语言中引入检查型异常真的是弊大于利。面向对象中大家都知道一个原则——开放封闭原则。我们在设计的时候总是尽可能地考虑到扩展性,尽可能避免对已有实现的修改。当然,完全不修改几乎没有可能。但是我们倾向于“配置”。将一些改变配置在配置文件中,将耦合性降到最低。这样的好处有很多:可以用采用反射机制根据配置文件动态加载等。采用检查型异常的机制很明显,使配置的种种优点无法发挥作用。

     

    一旦采用这种机制,方法的签名就将与各种异常类型产生紧密的耦合关系。一旦设计或者异常使用不当,需要进行改动,然后重新编译。特别是存在多层调用关系的时候,这样的修改关系就更为复杂。并且,也很难发挥面向对象的一些优势,比如多态。但是,有时确实需要提醒方法的调用者,某个方法确实存在很大的产生某种异常的风险(比如I/O、或者数据库异常),需要加以处理。这在C#中也做到了——是在调用类库方法的时候,智能提示产生的方法注释中告诉了客户程序,该方法将会产生哪些异常,需要注意捕获。说明C#中还是注意到了这一点。当然,如果你作为一个类库开发者或者开发人员,也可以这么做。

     

    同时采用检查型异常,也很好地暴露了不必要的信息,有些意图从异常类中就可以加以揣测。这从某种程度上失去了信息的隐蔽性,但是,这个带来的好处应该远大于它的负面作用。采用检查型异常,可以很清楚地指示方法本身和主调方法遵循相应的规则。这个会使开发更加规范化。我想,这也是Java语言设计团队认为几乎一定要采用这种方式的原因吧。但是,我还是没有想到一个一定要使用的理由。

     

    .net中的完全抛弃检查型异常,也会使得异常处理变得不那么实用和高效。因为,如果没有很好的文档作指导或者注释不规范,很容易你就丢失了对异常信息的掌握。但是,个人还是不觉得.net中引入检查型异常带来的好处更多,其实,如果在开发时文档规范化一些,就能够弥补缺失检查型异常的不足,但是,你知道的这是不可能的。

     

    我觉得Java中也没有说应该完全抛弃检查型异常。存在的就是合理的。只要是适度使用。由于本人暂未有任何Java的项目经验,所以暂时不敢说有什么心得,期待在使用中能有点感悟。

    展开全文
  • java异常的异常类型

    2015-09-15 18:04:57
    java异常分两种大的异常类型,运行异常以及受检查异常,这两种异常的区别如下: 1、java运行时异常 运行异常的特点为Java编译器不去检查它,换句话说,程序中可能出现这类异常时,就算没有使用try…catch...
    java异常分两种大的异常类型,运行异常以及受检查异常,这两种异常的区别如下:


    1、java运行时异常


    运行异常的特点为Java编译器不去检查它,换句话说,程序中可能出现这类异常时,就算没有使用try…catch语句捕获它、该异常,也不用throws字句声明抛出它,但是还是会编译通过。


    2、java受检查异常


    除了java运行异常外,别的java异常都属于受检查异常,这类异常的特点是不是用try…catch捕获处理,那么就是throws语句声明抛出,否则编译不会通过。


    3、两者的区别:


    运行异常是无法让程序恢复运行的异常,引起这种java异常的原因一般是因为执行了错误的操作。一旦出现错误,最好让程序终止。


    java受检查异常是程序可以处理的异常。假如抛出异常的方法本身不处理或不能处理它,那方法的调用者就一定要去处理该异常,不然调用会出错,连编译也不能通过。然而,这两种java异常都是能够通过程序来捕获并处理的。


    对于java运行异常,最好不要用try…catch…捕获处理,应该在程序开发调试的过程中尽量的避免,当然有一些必须要处理的,自己知道了那个部分会出现异常,而这种异常你要把它处理的你想要的结果,如:空值处理。


    而java受检查的异常,编译的时候不可以通过,只能老老实实的用throw或者try..catch…来处理,出现了受检查的异常直接用try…catch…捕获,可是这种捕获基本上没有什么有用的意义,还不如用throw抛出去的好直接告诉调用者,这个方法会出现SQLException,不然调用者用这个方法结果返回了一个null,就不知道发生了什么事。


    事实上在try…catch…语句块中,一般的受检查异常是很难在自己方法内处理的,但如果出现了异常怎么办,一般的做法是在catch语句块中记录异常,给后台工作人员。


    java异常处理的原则上是,可以自己处理的就不往上抛,尽量把java异常细化不要什么异常都直接用Exception来代替,在一个try语句块中尽量少的异常。


    1.检查型异常,这样的异常继承于Excetpion,在编译期间需要检查,假如该异常被throw,那在该异常所在的method之后必须显示的throws,调用该method的地方也必须捕获该异常,否则编译器会抛出异常.ejb里的RemoteException是一个这样的异常.


    2.java运行时异常,就是在运行期间系统出现的异常,该类异常继承于RuntimeException,该类异常在编译时系统不进行检查,如NullPointerExcetpion,NumberFormatException.


    3.系统错误,一般是JVM出现异常时抛出的异常,例如OutofMemoryError,这样的异常在J2EE开发中是不用太关心的.
    J2EE开发中,检查型异常被滥用导致过一段时间程序员自己都看不明白抛出这样的异常,.里头封装的这些错误信息是干什么用的,更可怕的是有好多有用的信息找不到了.比如SQLException和RemoteException这样的异常我们没必要再进行封装,这样的异常只对我们调试程序有用,而对客户来说它就是一个”系统错误”而已.异常处理有一个简单的原则,什么时候需要封装自己的检查型异常?就是你很清楚自己抛出这个异常的用途时,比如用户输入用户名和密码要登录,但用户名和密码不匹配,你就要定义一个检查型异常,客户端通过捕获该异常,然后把相应的错误信息反馈给客户.而其它的自己未预期的错误或者异常比如SQLException,只需封装到EJBException中,ejb container会把它的信息追加到RemoteException里,这样客户端捕获RemoteException后把它写到系统日志里,就很容易进行调试。
    展开全文
  • java自定义异常类型

    2016-05-29 23:13:48
    java自定义异常类型 /**  * 实现逻辑异常  * 在java中, 已经提供了很多的异常类的定义,  * 但是我们在实际项目开发中,可能需要使用一些  * 自己的异常类,那么可以通过继承Exception  * 类或已有...

    java自定义异常类型

    /**
     * 实现逻辑异常
     * 在java中, 已经提供了很多的异常类的定义,
     * 但是我们在实际项目开发中,可能需要使用一些
     * 自己的异常类,那么可以通过继承Exception
     * 类或已有的异常类的方式完成一个自定义异常的操作
     * @author cheng
     *

     */


    先定义一个异常类型

    自定义异常类型通常是继承原有的异常类型

    然后通过toString()函数返回异常类型的描述

    <span style="font-size:18px;">package com.vince;
    // 自定义异常类型
    
    /**
     * 实现逻辑异常
     * 在java中, 已经提供了很多的异常类的定义,
     * 但是我们在实际项目开发中,可能需要使用一些
     * 自己的异常类,那么可以通过继承Exception
     * 类或已有的异常类的方式完成一个自定义异常的操作
     * @author cheng
     *
     */
    public class MyException extends Exception{
    	private String message;
    	public MyException(String message){
    		super(message);//继承父类中的message
    		this.message = message;
    	}
    	</span>
    


    然后是调用这个自定义异常

    并用try...catch语句实现


    <span style="font-size:18px;">package com.vince;
    
    public class UserService{
    	
    	public static boolean login(String name,String password)throws MyException{
    		if(!"admin".equals(name)){
    			throw new MyException("用户名不正确");
    		}
    		if(!"123".equals(password)){
    			throw new MyException("密码不正确");
    		}
    		return true;
    	}
    	public static void main(String[] args){
    		try {
    			boolean b = login("abc","123");
    			System.out.println(b);
    		} catch (MyException e) {
    			// TODO 自动生成的 catch 块
    			e.printStackTrace();
    			System.out.println("用户名或密码不正确");
    		}
    	}
    }
    </span>



    展开全文
  • java异常的类型

    2016-10-15 14:40:25
    许多java初学者都会面临和博主一样的困惑,那便是在运行程序的时候会遇到各种各样的异常,但是自己却无法精确有效地定位那些异常的原因。今天博主便综合之前学习的经验和现有的一些资料来总结一下java异常的类型。 ...
  • java的异常类型

    2015-11-29 23:45:20
    java的异常类型
  • java常见异常类型

    2019-04-17 15:09:35
    由Throwable派生出来的异常类有两种 Error类和Exception类 Error:错误,代表JVM本身的错误,处理程序运行环境方面的异常,不能通过代码处理。比如OutOfMemoryError、AWTError Exception:异常,程序运行时发生,...
  • java异常类型

    2019-05-27 11:04:35
    Java 中所有异常类型都是内置类 java.lang.Throwable 类子类,即 Throwable 位于异常类层次结构顶层。Throwable 类下有两个异常分支 Exception 和 Error,如图 1 所示。 图1 异常结构图 由图 2 可以知道,...
  • java中常见的异常类型

    2016-12-03 13:22:15
    java中集中常见的异常类型
  • 一.异常机制1. Try:执行可能发生异常的代码块2. Catch:捕获异常3. Finally:无论是否发生异常,代码总能执行,除非虚拟机...常见的异常类型异常说明 Exception 异常层次结构的父类 ArithmeticException 算术错误...
  • Java常用的异常类型

    千次阅读 2019-06-24 10:52:30
    由Throwable派生出来的异常类有两种 Error类和Exception类 Error:错误,代表JVM本身的错误,处理程序运行环境方面的异常,不能通过代码处理。比如OutOfMemoryError、AWTError Exception:异常,程序运行时发生,...
  • Java异常类型及处理

    万次阅读 多人点赞 2018-09-21 10:54:18
    本文基于此详细捋一下异常类型,实现以及使用时应怎么注意。 一、异常实现及分类 1.先看下异常类的结构图 上图可以简单展示一下异常类实现结构图,当然上图不是所有的异常,用户自己也可以自定义异常实现。上图...
  • Java异常类型

    2018-06-14 14:20:57
    所有异常类型都是内置类Throwable的子类。因此,Throwable在异常类层次结构的顶层。紧接着Throwable下面的是两个把异常分成两个不同分支的子类。一个分支是Exception。该类用于用户程序可能捕捉的异常情况。它也是你...
  • java 异常类型

    2016-10-31 12:43:05
    Java提供了两类主要的异常:runtime exception和checked exception。checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常, JAVA编译器强制要求我们必需对出现的这些异常进行catch。...
  • java 所有异常类型

    2012-10-05 23:46:05
    异常类型   算术异常类:ArithmeticExecption  空指针异常类:NullPointerException  类型强制转换异常:ClassCastException  数组负下标异常:NegativeArrayException  数组下标越界异常
  • Java 枚举异常的类型

    2020-05-26 17:10:25
    USER_INPUT_ERROR(400,"用户输入异常"), SYSTEM_ERROR (500,"系统服务异常"), OTHER_ERROR(999,"其他未知异常"); CustomExceptionType(int code, String typeDesc) { this.code = code; this.typeDesc = type...
  • java中两种异常类型 Errors are the bane of users and programmers alike. Developers obviously don't want their programs falling over at every turn and users are now so used to having errors in programs ...
  • Java常见异常类型及原因分析

    千次阅读 2018-08-24 17:07:05
    Java常见异常类型及原因分析 0x1 NullPointerException异常 顾名思义,NullPointerException 是空指针异常。但是在 Java 中没有指针,怎么会有 空指针异常呢? 在 C++中,声明指针需要指向一个实例(通过 new...
  • Java中常见的异常类型

    2019-08-19 14:39:54
    常见的异常类型 1.1 最常见异常类型 异常类型 异常名称 NullPointerException 空指针异常 ClassCastException 类型转换异常 ArrayIndexOutOfBoundsException 数组下标越界 StackOverflowError 堆栈一...
  • JAVA常见的异常类型

    2015-12-01 09:04:48
    所以它也不是个什么新鲜东西,如果您对Exception机制一点都不了解,没关系,只是国内通常接触新事物时间都相对要晚老美几年,但了解Java Exception机制对Java开发人员来说是必要,不过Exception 异常处理...
  • 版权声明:未经允许,随意转载,请附上本文链接...JAVA常见异常类型及其原因分析 NullPointerException 异常  顾名思义,NullPointerException是指空指针异常,JAVA中没有指针概念,但是JAVA引用,也是...
  • Java 异常类型学习

    2019-12-31 16:54:47
    异常类型 Throwable 类是 Error 和 Exception 父类,只有是 Throwable 实例才能被 JVM 或者 Java 语句抛出,捕获。 Error:表示不希望被程序捕获或者是程序无法处理错误,Error 类对象由 Java 虚拟机生成并...
  • Java中自定义异常类型

    2020-11-08 16:42:41
    Java的异常类型不够我们使用,我们可以自定义异常类型并使用。 在这里我们定义一个弹出消息错误的异常类型。 /** *Java自定义异常信息 * @author jianyeli */ public class RegisterException extends ...
  • java异常类型分为Error(错误)和Exception。Exception又包含运行时异常(Runtime Exception 又叫非检测异常)和非运行异常(又叫检测异常) 1.Error Error是程序处理不了,例如OutOfMemoryError等,这些异常发生时jvm会...
  • JAVA的异常类型

    2011-10-26 13:35:00
    JAVA的异常类型 qq群:1543150073,欢迎加入哦! 1. java.lang.nullpointerexception  这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象...
  • java网络异常类型

    千次阅读 2012-11-27 16:29:12
     抛出此类异常,表示连接丢失,也就是说网络连接另一端非正常关闭连接(可能是主机断电、网线出现故障等导致)   2、ConnectException:connection refused connect.  抛出此类异常,表示无法连接,也...
  • Java子类抛出的异常类型不能比父类抛出的异常类型更宽泛,只对非检查异常有效。 如下的例子会报错,Exception为受查异常。 import java.util.Arrays; import java.util.LinkedList; import java.util.List; ...
  • 尤其对于一个刚入职场或者刚开始接触java的小白来说,每当开发过程中遇到错误,往往会搞得自己手足无措。下面楼主就简单的来说说我们平时工作开发中经常遇到的一些异常:首先我们要明确一点:java中异常可以简单的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,662
精华内容 5,864
关键字:

java的异常类型

java 订阅