异常、包


异常知识
1、何谓异常?
异常:就是程序在运行时出现不正常情况,程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
Java中的异常用对象来表示。Java对异常的处理是按异常分类处理的,不同异常有不同的分类,每种异常都对应一个类型(class),每个异常都对应一个异常(类的)对象。
2、异常和异常对象来源
1)异常有两个来源,一是Java语言本身定义的一些基本异常类型,二是用户通过继承Exception类或者其子类自己定义的异常。Exception 类及其子类是 Throwable 的一种形式,它指出了合理的程序想要捕获的条件。
2)异常的对象有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出!二是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以是Java语言中定义的,用throw 关键字抛出异常,这种异常常用来向调用者汇报异常的一些信息。
3、异常分类

1)编译时被检测异常

该异常在编译时,如果没有处理(没有抛也没有try),编译失败。该异常被标识,代表着可以被处理。

2)运行时异常(编译时不检测)

在编译时,不需要处理,编译器不检查。该异常的发生,建议不处理,让程序停止。需要对代码进行修正。如:RuntimeException以及其子类。


对于严重的问题,java通过Error类进行描述。对Error类一般不编写针对性的代码对其进行处理。

对于非严重的,java通过Exception类进行描述。对于Exception可以使用针对性的处理方式进行处理。

Throwable

                |---Error  //通常出现重大问题如:运行的类不存在或者内存溢出等。

                |---Exception //运行时出现的一起情况

                            |---RuntimeException    //特殊异常类,抛时不需要声明

4、异常的处理

class FushuIndexException extends Exception{
FushuIndexException(String name) {
	super(name);
}
}
 class Demo {
	 public int method(int[] arr,int index) throws NullPointerException,FushuIndexException
	 {
		 if(arr==null)
			 throw new NullPointerException();
		 if(index<0)
			 throw new FushuIndexException();
		 return arr[index];
	 }
 }
public class ExceptionDemo {
	public static void main(String[] args){
		int[] arr=new int[3];
		Demo d=new Demo();
		try {
		int num=d.method(arr, -3);
		System.out.print(num);
		}
		catch(FushuIndexException e){
			System.out.print("角标数字不能为负");
		}
	}

以上程序中,用到了throws,try {}catch(){},那么这些什么时候用,是否还有别的机制?我们需要掌握好。

异常处理原则:

1)函数内容如果抛出需要检测的异常,那么函数上必须要声明,否则必须在函数内用trycatch捕捉,否则编译失败

2) 如果调用了声明异常的函数,要么try catch要么throws,否则编译失败

3)  (什么时候catch,什么时候throws呢? )功能内可以自己解决,用catch,解决不了,就throws告诉调用者解决

4)如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理,内部有几个需要检测的异常,就抛几个异常,抛出几个,就catch几个

 java提供了特有的语句进行处理。

        try

        {需要被检测的代码。}

        catch(异常类  变量)

        {处理异常的代码;(处理方式) }

        finally

        {一定会执行的语句; }

有三个结合格式:

        atry

             {}

             finally

             {} 

         btry

              {}

             catch ()

             {}

       

        ctry

             { }

             catch ()

             {}

             finally

             {} 

throwthrows的用法

        throw定义在函数内,用于抛出异常对象。

        throws定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开。

        当函数内容有throw抛出异常对象,并未进行try处理。必须要在函数上声明,否则编译失败。

        注意:RuntimeException除外。也就说,函数内如果抛出的RuntimeExcpetion异常,函数上可以不用声明。

特殊之处:

        Exception中有一个特殊的子类异常RuntimeException 运行时异常。

                1 如果在函数内抛出该异常,函数上可以不用声明,编译一样通过。

                2)如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过。

        之所以不用在函数上声明,是因为不需要让调用者处理。当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。

5、自定义异常( 如以上程序中的FushuIndexException类就是自定义异常)

因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。所以对这些特有的问题可以按照java中的面向对象思想。将特有的问题,进行自定义的异常封装。定义类继承Exception或者RuntimeException

自定义异常注意事项:

      必须是自定义类有继承关系,通常继承Exception

       继承Exception原因:

                 异常体系有一个特点:因为异常类和异常对象都被抛出。他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。

                 只有这个体系中的类和对象才可以被throwsthrow操作。

1、包(package)的概念

java中,管叫包,相当于文件夹。包里通常存放的是类文件。

2、包的好处

1)为避免多个类重名的情况,如果出现两个相同名字的类,可通过包将两者区分,从而避免冲突。

2)对类文件进行分类管理,可以将相关的一些类放在同一个包中。

3)给类提供多层命名空间,如a包中的Demo.class文件,如果要创建Demo对象,就要在使用时加上a.如:a.Demo demo=new a.Demo();

4)包的出现可以将java的类文件和源文件相分离。

3、包的规则

1)包必须写在程序的第一行。因为要先有包,才知道类文件的存放地方。

2)类的全称:包名.类名。

 3)编译定义了包的程序文件时,在编译时要指定包的存储目录。

4、包的使用(导入-import)

a,在导入包时,如果包中有很多类,可以使用通配符 *来替代包中的所有类。但是,建议不要使用通配符 * ,因为将不需要使用的类导入后,会占用内存空间。所有在编写程序时,要使用包中的哪些类,就导入哪些类。

b,定义包名不要重复,可以使用url来完成定义,url是唯一的。如:package cn.itheima.Demo

 c,导入的不同包中有相同类时,必须写类的全名以区分,否则将会报错。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值