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 条评论
登录 后参与评论

相关文章

来自专栏SpringBoot

String、StringBuffer与StringBuilder之间区别

最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。

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

Netty ByteBuf源码解读

  Netty里的ByteBuf主要用于发送或接收消息。在JDK里有相似功能的类java.nio.ByteBuffer。由于JDK在设计ByteBuffer A...

731
来自专栏用户2442861的专栏

java反射详解

http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html#3143018 (挺牛逼的)...

641
来自专栏Android知识点总结

Java总结IO篇之其他IO流对象

592
来自专栏CSDN技术头条

Java中的十个“单行代码编程”(One Liner)

本文列举了十个使用一行代码即可独立完成(不依赖其他代码)的业务逻辑,主要依赖的是 Java8 中的 Lambda 和 Stream 等新特性以及 try-wit...

1213
来自专栏封碎

Android开发减少方法数的建议 博客分类: Android小技巧 方法数android

     现在的Android应用越来越庞大,开发者越来越能感受到方法数限制带来的影响。这里简单讲几个减少方法数的小建议。

815
来自专栏龙首琴剑庐

Java标准I/O流编程一览笔录

Java标准I/O知识体系图: ? 1、I/O是什么? I/O 是Input/Output(输入、输出)的简称,输入流可以理解为向内存输入,输出流是从内存输出。...

35114
来自专栏一名合格java开发的自我修养

MapReduce中一次reduce方法的调用中key的值不断变化分析及源码解析

摘要:mapreduce中执行reduce(KEYIN key, Iterable<VALUEIN> values, Context context),调用一...

703
来自专栏静默虚空的博客

[Java IO]02_字节流

概要 字节流有两个核心抽象类:InputStream 和 OutputStream。所有的字节流类都继承自这两个抽象类。 InputStream 负责输入,Ou...

1827
来自专栏尾尾部落

[剑指offer] 链表中环的入口结点

假设环长度为n,进入环之前结点个数为x,slow在环内走了k个结点,fast绕环走了m圈,则有2(x+k)=x+mn+k 可以得出x = mn - k。此时sl...

613

扫码关注云+社区