`
hl756799782
  • 浏览: 77425 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

张龙 Exception学习笔记

阅读更多

1.Java中的异常分为两大类:
a) Checked exception (非 Runtime Exception)
b) Unchecked exception(Runtime Exception)

 

2.Java中所有的异常类都会直接或间接地继承自Exception,RuntimeException类也是直接继承自Exception类,它叫做运行时异常,Java中所有的运行时异常都会直接或间接地继承自RuntimeException,Java中凡是继承自Exception而不是继承RuntimeException的类都是非运行时异常。

 

3.异常处理的一般结构是:
try
{
}
catch(Exception e)
{
}
finally
{
}
无论程序是否出现异常,finally块中的代码都是会被执行的。

 

4.对于非运行时异常(checked exception),必须要对其进行处理,处理方式有两种:第一种是使用try.. catch…finally进行捕获;第二种是在调用该会产生异常的方法所在的方法声明throws Exception

举例1:ExceptionTest.java

 

package com.shengsiyuan.exception;

public class ExceptionTest
{
	public static void main(String[] args)
	{
		int c = 0;
		
		try
		{
			int a = 3;
			int b = 0;
			
			c = a / b;
			
			System.out.println("hello world");
		}
		catch(ArithmeticException e)
		{
			e.printStackTrace();
		}
		finally
		{
			System.out.println("welcome");
		}
		
		
		System.out.println(c);
	}
}

 

举例2:ExceptionTest2.java

 

package com.shengsiyuan.exception;

public class ExceptionTest2
{       
        //在方法声明的时候要抛出异常使用的是throws关键字
	public void method() throws Exception
	{
		System.out.println("hello world");
		
                //在方法体要抛出异常里面使用的是throw关键字
                //方法体里面一旦出现了throw关键字,方法定义的时候就必须跟着throws关键字,否则会报错
		throw new Exception();
	}
	
	public static void main(String[] args)
	{
		ExceptionTest2 test = new ExceptionTest2();
		
		try
		{
			test.method();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			System.out.println("aaa");
		}
		
		
	}
}

  

5.对于运行时异常(runtime exception),我们可以不对其进行处理,也可以对其进行处理。推荐不对其进行处理。

6.NullPointerException是空指针异常,出现该异常的原因在于某个引用为null,但你
却调用了它的某个方法。这时就会出现该异常。

 

举例:ExceptionTest3.java

 

package com.shengsiyuan.exception;

public class ExceptionTest3
{
	public static void main(String[] args)
	{
		String str = null;
		
		System.out.println(str.length());
	}
}

 

7.所谓自定义异常,通常就是定义了一个继承自Exception类的子类,那么这个类就是一个自定义异常类。通常情况下,我们都会直接继承自Exception类,一般不会继承某个运行时的异常类,自定义异常一般是为了在标准异常里加入一些自己独特的信息。

8.我们可以使用多个catch块来捕获异常,这时需要将父类型的catch块放到子类型的catch块之后,这样才能保证后续的catch可能被执行,否则子类型的catch将永远无法到达,Java编译器会报编译错误;如果多个catch块的异常类型是独立的(MyException, MyException2), 那么谁前谁后都是可以的。

举例: MyException,MyException2,Exception4

package com.shengsiyuan.exception;

public class MyException extends Exception
{
	public MyException()
	{
		super();
	}
	
	public MyException(String message)
	{
		super(message);
	}
}

 

package com.shengsiyuan.exception;

public class MyException2 extends Exception
{
	public MyException2()
	{
		super();
	}
	
	public MyException2(String message)
	{
		super(message);
	}
}

 

package com.shengsiyuan.exception;

public class ExceptionTest4
{
	public void method(String str) throws Exception
	{
		if(null == str)
		{
			throw new MyException("传入的字符串参数不能为null");
		}
		else if("hello".equals(str))
		{
			throw new MyException2("传入的字符串不能为hello");
		}
		else
		{
			System.out.println(str);
		}
	}
	
	public static void main(String[] args)
	{
		try
		{
			ExceptionTest4 test = new ExceptionTest4();
			
			test.method("hello");
		}
		catch(MyException e)
		{
			System.out.println("进入到MyException catch块");
			e.printStackTrace();
		}
		catch(MyException2 e)
		{
			System.out.println("进入到MyException2 catch块");
			e.printStackTrace();
		}
		catch(Exception e)
		{
			System.out.println("进入到Exception catch块");
			e.printStackTrace();
		}
		finally
		{
			System.out.println("异常处理完毕");
		}
		
		System.out.println("程序执行完毕");
		
	}
}

 

说明:

a)如果一个方法抛出了异常,另外一个方法调用这个方法的时候,可以有2种处理办法:要么try--catch--finally,要么继续往上抛,第一种处理方式容易理解,没什么好说的,如果是第二种处理方式,即继续往上抛,最高层可以抛到main方法,main方法可以捕获异常然后进行处理,也可以继续往外抛,此时,是抛给JVM去进行处理了。
    继续往上抛与try--catch的区别是如果程序执行过程中发生异常,处理方式如果为往上抛的话程序就不会继续往下执行,就在发生异常的地方中止了,后面的代码不会执行,如果是try--catch,发生异常后程序进入catch,执行完后会接着执行下面的代码,也就是说就算发生异常,程序也不会中止执行,依然会跑下去。

 

b)关于自定义异常:实际项目中经常要用到自定义异常,一般使用情况是程序抛出了一个java预定义的异常,我们  catch住后,将该异常包装为自定义的异常,然后抛出去,这样我们写的方法声明的时候就只会抛自定义的异常,而不会再去抛java自带的异常。

 

9.Exception常见面试题

   举例:ExceptionTest5

  

package com.shengsiyuan.exception;

public class ExceptionTest5
{
	public void method() 
	{
		try
		{
			System.out.println("进入到try块");
			
                        //return
                         
			System.exit(0);
		}
		catch(Exception ex)
		{
			System.out.println("异常发生了");
		}
		finally
		{
			System.out.println("进入到finally块");
		}
		
		System.out.println("异常处理后续的代码");
	}
	
	public static void main(String[] args)
	{
		ExceptionTest5 test = new ExceptionTest5();
		
		test.method();
	}
}

 

 说明:

 a)如果在try代码块里出现了return,那程序执行到return时并不会立即return,而是会继续把finally代码块里面的代码 执 行完,然后返回,切记。

 b)如果try块中存在System.exit(0)语句,那么就不会执行finally块中的代码,因为System.exit(0)会终止当前运行的Java虚拟机,程序会在虚拟机终止前结束执行。

       

分享到:
评论

相关推荐

    圣思园张龙JavaSE课堂笔记

    张龙老师的JavaSE课堂笔记是针对这个基础平台的重要学习资源,适合初学者和希望巩固Java基础知识的开发者。 【类与对象】 在JavaSE中,一切皆为对象。类是创建对象的模板,定义了对象的状态(属性)和行为(方法)...

    张龙S2SH学习笔记(经典)

    【张龙S2SH学习笔记(经典)】是基于圣思园张龙的视频教程整理出的学习资料,主要涵盖了Struts2、Spring和Hibernate这三大框架的整合使用,也就是我们常说的SSH(Spring、Struts2、Hibernate)框架集成。SSH框架在...

    张龙圣思园struts2学习笔记word

    张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...

    张龙 Schema DOM笔记

    ### 张龙 Schema DOM笔记 #### 一、Schema概述 **Schema**是一种用于验证XML文档有效性的工具,类似于**DTD**(Document Type Definition),但它提供了更加强大且灵活的功能。Schema不仅支持更丰富的数据类型,还...

    张龙JAVA圣思园笔记

    张龙老师的JAVA圣思园笔记深入浅出地涵盖了JAVA-SE的基础知识点,帮助学习者构建扎实的Java编程基础。 1. **IO(输入/输出)**: Java IO是处理数据输入和输出的重要模块,包括文件操作、流处理等。笔记中可能讲解...

    java圣思园学习笔记

    北京圣思园JAVA学习笔记全套: 全套的北京圣思园java学习笔记,总结的很好,很受用。 此文档是将圣思园张龙老师的javase早期的笔记,很值得初学者学习,javsse是java技术得基础,只有将此掌握好,才能更深入得了解...

    张龙 java se课程笔记

    张龙的Java SE课程笔记涵盖了这个领域的许多关键知识点。 1. **Java环境搭建**:首先,学习Java SE需要安装Java Development Kit (JDK),设置好环境变量`JAVA_HOME`、`PATH`和`CLASSPATH`,以便于编译和运行Java...

    张龙 sax解析课堂笔记

    ### 张龙 SAX 解析课堂笔记详解 #### 一、SAX 概念与特点 **SAX**(Simple API for XML)是一种用于解析XML文档的技术。与DOM(Document Object Model)不同,SAX提供了顺序访问模式,适用于快速读取XML数据。在...

    张龙 Java SE 课程笔记下载

    张龙老师的Java SE课程笔记是学习这一关键领域的宝贵资源,旨在帮助学员深入理解Java编程语言的基本概念和技术。 笔记内容可能涵盖了以下几个核心知识点: 1. **Java语言基础**:包括基本数据类型、变量、运算符、...

    张龙 javaWeb部分 课堂笔记

    在张龙老师的课堂笔记中,我们可以看到涵盖了不同阶段的学习内容,从基础到进阶,帮助学生逐步理解JavaWeb开发的核心概念和技术: - **Lesson 1-4**:通常会介绍Web开发的基础知识,包括HTTP协议、Servlet的基本...

    张龙老师Java SE课堂笔记和文档

    通过张龙老师的Java SE课堂笔记,学习者不仅可以理解Java语言的基本语法,还能掌握面向对象设计原则和实战技巧,为后续的Java EE(企业版)和Android开发打下坚实的基础。同时,笔记中的实例和练习将帮助巩固理论...

    圣思源的jquery学习笔记

    圣思源张龙老师的jQuery学习笔记,深入浅出地剖析了这个库的核心概念和实用技巧,对于想要深入理解jQuery或提升前端技能的开发者来说,无疑是一份宝贵的学习资源。 首先,jQuery的核心理念是"Write Less, Do More...

    北京圣思园张龙老师Struts2全部课堂笔记

    在"风中叶之 Struts2学习笔记"中,我们可以探索以下关键知识点: 1. **Struts2架构**:Struts2的核心是Action类,它是业务逻辑处理的中心。通过配置文件或注解,我们可以定义Action与URL的映射关系,实现请求的分发...

    张龙 MongoDB实战张龙 MongoDB实战张龙

    张龙 MongoDB实战张龙 MongoDB实战

    张龙老师Java Web学习文档

    张龙老师的Java Web学习文档可能涵盖了以上这些知识点,通过课堂笔记和实例讲解,帮助学习者系统地掌握Java Web开发的基础和进阶技巧。学习Java Web不仅涉及技术层面,还包括如何组织代码、优化性能以及遵循最佳实践...

    java圣思园学笔记+文档(张龙)

    这份“java圣思园学笔记+文档(张龙)”的压缩包文件,很可能包含了张龙老师在圣思园教学过程中的详细笔记和相关文档,这些资料对于正在学习或复习Java编程的学员来说是宝贵的资源。通过这份笔记,你可以系统地学习...

    北京圣思园张龙老师JavaSE 01-11章的课堂笔记 pdf文件

    张龙老师的JavaSE课程涵盖了从基础到进阶的重要知识点,旨在帮助学习者掌握Java编程语言的基础和核心概念。以下是根据提供的压缩包文件名称所涵盖的知识点的详细解释: 1. **Java SE入门、JDK的下载与安装**: - *...

    北京圣思园xml学习笔记

    ### 北京圣思园XML学习笔记核心知识点详解 #### XML概述 - **XML全称**:eXtensible Markup Language(可扩展标记语言) - **学习XML的原因**: - 数据交换的需求日益增长,XML成为了电子商务的重要基础之一。 - ...

    张龙 SE 笔记

    ### Java SE 基础知识点总结 #### 类与对象 - **概念理解**:类是对一组具有相同属性和行为的对象...通过以上知识点的学习,可以更好地理解和掌握Java SE的基础概念和技术,为进一步学习更高级的主题打下坚实的基础。

Global site tag (gtag.js) - Google Analytics