------- android培训、java培训、期待与您交流! ----------
异常:就是程序在运行时出现的不正常情况
异常由来:问题是现实生活中一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象。其实就是java对不正常情况进行描述后的对象体现
异常的体系
Throwable
-----Error 出现重大问题,运行的类不存在或者内存溢出。
不编写代码对其处理
-----Exception 在运行时出现的一些情况
可以通过try catch finally 进行处理
Exception和Error的子类名都是以父类名作为后缀
异常的处理
try{
需要被检测的代码
}catch(异常类 变量) {
处理异常的代码(处理方式)
}
Finally{
一定会执行的语句
}
对异常对象进行常见方法操作
String getMessage() 获取异常的信息
String toString() //异常名称:异常信息
void printStackTrace() 打印堆栈中的跟踪信息 //异常名称:异常信息;异常出现的位置
自定义异常
自定义的异常java不认识,只能手动抛出
当在函数内部出现了throw抛出异常对象那么就必须要给对应的处理动作
要么在内部try catch处理
要么在函数上声明让调用者处理
一般情况下,函数内出现异常,函数上需要声明
自定义除数我负数的异常
class FushuExceptionextends Exception{
private Stringmsg;
FushuException(String msg) {
this.msg = msg;
}
public String getMessage(){
returnmsg;
}
}
class Demo {
int div(int a,int b) throws FushuException{
if(b<0)
throw new FushuException("除数为负数");
return a/b;
}
}
public class AutoBox {
/**
* @param args
* @throws FushuException
*/
public static void main(String[] args)throws FushuException {
// TODO Auto-generatedmethod stub
Demo d = new Demo();
int di = d.div(4, -1);
System.out.println(di);
}
}
但上面的异常信息定义的过于麻烦
如何定义异常信息呢?
因为父类中已经把异常信息的操作都完成了
所以子类只要在构造时,将异常信息传递给父类通过super语句
那么就可以直接通过getMessage方法获取自定义的异常信息
class FushuExceptionextends Exception{
FushuException(String msg) {
super(msg);
}
}
自定义异常类,必须继承Exception 因为exception有个特点,就是异常类和异常对象都要抛出。他们都具备可抛性,这个可抛性是throwable这个体系中独有的特点
throws和throw的区别
throws 使用在函数上 throw使用在函数内
throws后面跟的异常类,可以跟多个 用逗号隔开
throw 后面跟的异常对象
当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上声明,否则编译失败。注意:RuntimeException除外,也就是
RuntimeException在函数内抛出了,函数上不用声明
如果在函数上声明了该异常,调用者可以不用进行处理
自定义异常时:如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException
如果函数声明了异常,调用者需要进行处理,处理方式可throws可以try
异常有两种
编译时被检测异常
该异常在编译时,如果没有处理,编译失败。该异常被标识,代表这可以处理
运行时异常
该异常的发生建议不处理,让程序停止,好对代码修改
异常在子父类覆盖中的体现:
1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类
如:
class A extends Exception{}
class B extends A
class FU(){ void show()throws A }
classZI(){ void show() 只能throws A或者B }
2.如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子类
异常的好处:
将问题进行封装。
将正常流程代码和问题处理代码相分离,方便于阅读。
异常的处理原则:
1 处理方式有两种:try 或者throws。
2 调用到抛出异常的功能时,抛出几个,就处理几个。一个try对应多个catch。
3 多个catch,父类的catch放到最下面。
4 catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句,也不要不写。
当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。
包
用来对类文件进行分类管理的
给类文件提供了多层命名空间
写在程序的第一行
类名的全称是 包名.类名
如果原文件带着包的话也就是package 需要加参数
Javac –d 文件位置原文件名
包与包之间访问
常见问题
1. 类名的全称是:包名.类名
2. Packa包不在当前目录下: 需要设置classpa,告诉jvm去哪里找知道的packa包
3. 权限不够,需要将权限设置为public
总结:
包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰
不同包中的子类还可以访问父类中被protected权限修饰的成员
包与包之间可以使用的权限只有两种,public protected
public protected default private
同一个类中 可以 可以 可以 可以
同一个包中 可以 可以 可以
子类 可以 可以
不同包中 可以
Jar包
Java的压缩包
方便于项目的携带
方便于使用,只能在classpath设置jar路径即可