java异常处理及自定义异常的使用

1. 异常介绍

 异常机制可以提高程序的健壮性和容错性。

  Throwable:Throwable是java语言所有错误或异常的超类。 有两个子类Error和Exception。


1.1 编译期异常

编译期异常必须处理,否则编译无法通过。 

AclNotFoundException, ActivationException, AlreadyBoundException, ApplicationException, AWTException, BackingStoreException, BadAttributeValueExpException, BadBinaryOpValueExpException, BadLocationException, BadStringOperationException, BrokenBarrierException, CertificateException, ClassNotFoundException, CloneNotSupportedException, DataFormatException, DatatypeConfigurationException, DestroyFailedException, ExecutionException, ExpandVetoException, FontFormatException, GeneralSecurityException, GSSException, IllegalAccessException, IllegalClassFormatException, InstantiationException, InterruptedException, IntrospectionException, InvalidApplicationException, InvalidMidiDataException, InvalidPreferencesFormatException, InvalidTargetObjectTypeException, InvocationTargetException, IOException, JAXBException, JMException, KeySelectorException, LastOwnerException, LineUnavailableException, MarshalException, MidiUnavailableException, MimeTypeParseException, MimeTypeParseException, NamingException, NoninvertibleTransformException, NoSuchFieldException, NoSuchMethodException, NotBoundException, NotOwnerException, ParseException, ParserConfigurationException, PrinterException, PrintException, PrivilegedActionException, PropertyVetoException, RefreshFailedException, RemarshalException, SAXException, ScriptException, ServerNotActiveException, SOAPException, SQLException, TimeoutException, TooManyListenersException, TransformerException, TransformException, UnmodifiableClassException, UnsupportedAudioFileException, UnsupportedCallbackException, UnsupportedFlavorException, UnsupportedLookAndFeelException, URIReferenceException, URISyntaxException, UserException, XAException, XMLParseException, XMLSignatureException, XMLStreamException, XPathException

1.2 运行期异常(RuntimeException

AnnotationTypeMismatchException, ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, EnumConstantNotPresentException, EventException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IncompleteAnnotationException, IndexOutOfBoundsException, JMRuntimeException, LSException, MalformedParameterizedTypeException, MirroredTypeException, MirroredTypesException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NoSuchMechanismException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, RejectedExecutionException, SecurityException, SystemException, TypeConstraintException, TypeNotPresentException, UndeclaredThrowableException, UnknownAnnotationValueException, UnknownElementException, UnknownTypeException, UnmodifiableSetException, UnsupportedOperationException, WebServiceException

   NullPointerException、IndexOutOfBoundsException都是比较常见的运行期异常。

  举例:

   public static void main(String[] args) {

        int[] array = new int[10];
        array = null;
        System.out.println(array.length);
    }
Exception in thread "main" java.lang.NullPointerException
	at lang.Object.ExceptionTest.main(ExceptionTest.java:18)

 关于NPE异常

当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括: 

  • 调用 null 对象的实例方法。 
  • 访问或修改 null 对象的字段。 
  • 将 null 作为一个数组,获得其长度。 
  • 将 null 作为一个数组,访问或修改其时间片。 
  • 将 null 作为 Throwable 值抛出。 

应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用。 


2. 运行期异常的处理

  异常可以使用catch进行捕获,然后进行处理。

    @Test
    public void testArithmeticException() {
        try {
            int result = 10 / 0;
            System.out.println("try中异常之后的代码不会执行");
        } catch (ArithmeticException e) {
            System.out.println("进行异常处理:");
            System.out.println(e.getMessage());
        }
        System.out.println("try...catch之后的代码可以执行");
    }

3. 运行期异常的抛出  

不进行处理,可以将异常抛给上层,由上层进行处理。

    public static void main(String[] args) {

        try {
            testNullPointerException();
        } catch (NullPointerException e) {
            e.printStackTrace();
            System.out.println("异常由上层进行处理");
        }
        //如果前面的代码中发生异常,后面的代码就不会执行
        System.out.println("调用成功");
    }

    public static void testNullPointerException() {

        int[] array = new int[10];
        array = null;
        //由于执行者不处理异常,异常会自动抛出
        int length = array.length;
        System.out.println(length);
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java、Spring、技术分享

fastjson详解

  fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

5551
来自专栏xingoo, 一个梦想做发明家的程序员

Oozie分布式工作流——EL表达式

oozie支持使用EL(expression language)表达式。 基本的EL常量 KB MB GB TB PB 基本EL函数 string fir...

2418
来自专栏小樱的经验随笔

POJ 3278 Catch That Cow(BFS,板子题)

Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions...

2885
来自专栏JAVA后端开发

xml与java对象的快速互转

做流程图的项目时,新的流程定义为xml的,需要对xml与java对象进行互转 查了一下activiti的转换xml方式,发现转换太麻烦了,需要一步步的解析xm...

5483
来自专栏Ryan Miao

Java中ArrayList remove会遇到的坑

前言 平时最常用的莫过于ArrayList和HashMap了,面试的时候也是问答的常客。先不去管容量、负载因子什么的,就是简单的使用也会遇到坑。 ? Rem...

2707
来自专栏数据小魔方

左手用R右手Python系列之——字符串格式化进阶

关于R语言字符串格式化之前无论是专题还是案例教程中均有所涉及,今日这一篇之所以重提是因为又找到了一个很好用的字符串格式化包。 这个包的语法源于Python风格,...

29212
来自专栏菩提树下的杨过

Flash/Flex学习笔记(8):ActionScript3.0中的面对对象

首先要习惯AS3.0的几个BT约定: 1.一个.as文件中,只能定义一个类 2.类名称必须与.as的文件名相同 3.类定义中必须要有package包声明 4.一...

1689
来自专栏阿杜的世界

Java泛型基础(二)泛型接口泛型方法# 总结

泛型可以应用于同一个类,该类可以针对多种类型使用,例如构建一个RedisTemplateService组件,用于处理当前应用中所有对象的缓存操作。这篇文章主要介...

6483
来自专栏IT笔记

Integer类型比较的问题

工作几年了,居然还是出现这个问题,最近做websocket通信,其中在SystemWebSocketHandler类中的一个代码片段,判断条件如下: /** ...

2894
来自专栏杂烩

使用javascript让项目支持热插拔 原

    突然想起之前做过的一个小项目,项目虽小,需求却不小,要求解析特定格式的字符串,并且特定格式并非一成不变,想要一套系统能够支持解析多变的规则且更改规则时不...

1482

扫码关注云+社区