您的位置:首页 > 职场人生

黑马程序员-------异常

2014-03-08 02:24 323 查看
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

/*
package day09;
* 异常:就是程序在运行时出现不正常的情况。
* 异常由来:问题也是现实生活中一个具体事物,也可以通过java的类的形式进行描述,并封装成对象
* 			其实就是java 对不正常情况进行描述后的对象体现
* 对于问题的规划分:
* 两种: 一种是严重的问题 , 一种是非严重的问题
*
* 对于严重的,java通过Error类进行描述。
* 		对于Error一般不编写针对性的代码对其进行处理。
*
* 对于非严重的,java通过Exception 类进行描述。
* 对于Exception 可以使用针对性的处理方式进行处理。
*
* 无论Error 或者 Exception 都具有一些共性的内容
* 比如: 不正常情况的信息,引发原因等。
*
* Throwable
* 		|---Error
* 		|---Exception
*
* 2.异常的处理
*
* java 提供了特有的语句进行处理。
* try
* {
* 		需要检测的代码
* }catch(异常类  变量)
* {
* 		处理异常代码:(处理方式)
* }
* finally
* {
* 		一定会执行的语句
* }
*
* 3.对捕获到的异常对象进行常见方法的操作。
* 		String getMessage();获取异常的信息
*
* 在函数上声明异常
* 便于提高安全性,让调用出进行处理。不处理编译失败
*
* 对多异常的处理
*
* 1.声明异常是,建议声明更为具体的异常,这样处理的可以更具体
* 2.对方声明几个异常,就对应有几个catch块。
* 		如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面
*
*
* 建立在进行catch 处理时,catch中一定要定义具体处理方式。
* 不要简单定义一句e.printStackTrace(),
* 也不要简单的就书写一条输出语句
*
*
*/
class FuShuException extends ArithmeticException
{

}

class Demo2
{
int div(int a, int b) throws ArithmeticException,ArrayIndexOutOfBoundsException  //在功能上通过throws的关键字声明了该功能的有可能出现问题
{
int[] arr = new int[a];

System.out.println(arr[4]);
return a/b;
}
}
public class ExceptionDemo {
public static void main(String[] args) {

Demo2 d = new Demo2();
try{

int x = d.div(4, 1);
System.out.println("x="+x);
}
catch (ArithmeticException e){
System.out.println(e.toString());
System.out.println("被除零啦");
}
catch(ArrayIndexOutOfBoundsException e){
System.out.println(e.toString());
System.out.println("角标越界啦!!");
}
System.out.println("over");

/*int x = 0;
try {
x = new Demo2().div(4, 0);
} catch (FuShuException e) { // Exception e = new ArithmeticException();
// TODO Auto-generated catch block
Systemo.out.println(e.getMessage());
e.printStackTrace(); //异常的名称,异常的信息,异常出现的位置
//其实jvm默认的异常处理机制,就是调用printStackTrace方法,打印异常堆栈信息
System.out.println("除零啦");
}
System.out.println("x="+x);
System.out.println("over");*/

//byte[]arr = new byte[1024*1024*600];//OutOfMemoryError
}
}


自定义异常

package day09;
/*
* 因为项目中会出现特有的问题
* 而这些问题并未被java所描述并封装对象
* 所以对于这些特有的问题可以按照java的对问题封装的思想。
* 将持有的问题,进行自定义的异常封装
*
* 自定义异常。
*
* 需求:在本程序中,对于除数是-1,也视为是错误的是无法进行运算的。
* 那么就需要对这个问题进行自定义的描述。
*
* 当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作
* 呢么在内部try catch 处理。
*
* 一般情况在函数内部出现异常,函数需要声明
*
* 发现打印结果中只有异常的名称,却没有异常信息。
* 因为自定义的异常并未定义信息。
*
* 如果定义异常信息呢?
* 因为父类中已经把异常信息操作都完成了。
* 所以子类只要在构造时,将异常信息递给父类通过super语句,
* 那么就可以直接通过getMesage 方法获取自定义异常信息。
*
*
* 自定义异常
* 必须是自定义类继承Exception
*
* 继承Exception原因:
* 异常体系有一个特点:因为异常类和异常对象都被抛出。
* 他们都具备可抛性。这个可抛性是Throwable这个体系独有的特点
*
* 只有这个体系中的类和对象才可以被throws和throw操作
*
* throws 和 throw 的区别
* throws 使用在函数上
* throw 使用在函数内
*
* throws 后面跟的是异常类。可以多个,用逗号隔开。
* throw 后跟的是异常对象
*
*/
class FuShuException extends Exception
{
private String msg;
FuShuException(){
super();
}
FuShuException(String msg){
this.msg = msg;
}
public String getMsg(){
return msg;
}

}
class Demo3
{
int div(int a, int b) throws FuShuException{

if(b < 0)
throw new FuShuException("出现了除数是负数");//手动通过throw关键词抛出一个自定义异常对象
return a/b;
}
}
public class ExceptionDemo2 {
public static void main(String[] args) {
Demo3 d = new Demo3();

int x = 0;
try {
x = d.div(4, 1);
} catch (FuShuException e) {
System.out.println(e.toString());
System.out.println("除数为零了");
}
System.out.println("x="+x);

System.out.println("over");
}
}

/*class Throwable
{
private String message;
Throwable(String message){
this.message = message;
}
public String getMessage(){
return message;
}
}

class Exception extends Throwable
{

Exception(String message) {
super(message);
}

}

class Person{
private String name;
Person(String name){
this.name = name;
}
public String getName(){
return name;
}

}

class Student extends Person
{
Student (String name){
super(name);
}
}

new Student("lili").getName();*/

异常的分类
package day09;
/*
* Eception 中有一个特殊的子类异常RuntimeException 运行异常。
* 如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。
* 如果在函数上声明了该异常。调用者可以不用进行处理,编译一样通过
* 当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,
* 对代码进行修改。
*
*
* 自定义异常是:如果给异常的发生,无法在继续进行运算,就让
* 自定义异常继承RuntimeException.
*
* 对于异常分为两种:
* 1.编译时被检测的异常
*
* 2.编译时不被检测的异常(运行时异常。RuntimeExcption以及其子类)
*/

class FuShuException extends RuntimeException
{
FuShuException(String msg){
super(msg);
}
}

class Demo4{
int div (int a, int b)//throw ArithmeticException
{
if(b<0)
throw new FuShuException("出现了除数为负数");
if(b==0)
throw new ArithmeticException("被除零啦");
return a/b;
}
}
public class EceptionDemo5 {
public static void main(String[] args) {
Demo4 d = new Demo4();

int x = d.div(4, -9);
System.out.println("x="+x);

System.out.println("over");
}
}


finally的应用
package day10;
/*
* finally代码块:定义一定执行的代码
* 通常用于关闭资源
*/
class FuShuException extends Exception
{
FuShuException(String msg)
{
super(msg);
}
}

class Demo
{
int div(int a, int b)throws FuShuException
{
if(b<0)
throw new FuShuException("除数为负数");
return a/b;
}
}

public class ExceptionDemo {
public static void main(String[] args) {
Demo d = new Demo();
try {
int x = d.div(4, -1);
} catch (FuShuException e) {
// TODO: handle exception
Syste
976a
m.out.println(e.toString());
}
finally{
System.out.println("finally");//finally中存放着一定执行的代码
}
System.out.println("over");
}
}

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息