Throwable
|--Error 严重问题:如运行类不存在或者内存溢出等,不编写针对代码对其代理
|--Exception 能处理异常,在运行时出现的异常,可以通过try catch finally处理
|--RuntimeException 运行时异常,编译时不报错,运行时才会报告错误,这种错误只能由程序员控制。
1.1 异常的处理
要么抛(在函数上用throws声明),要么try
try
{
需要被检测的代码;
}catch(异常类 变量)
{
处理异常的代码;(处理方式)
}
finally
{
一定会执行的语句;
}
多异常的处理:
1、声明异常时,建议声明更为具体的异常。这样处理的可以更加具体。
2、对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。
如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
2、自定义异常
自定义异常继承Exception或者其子类如:RuntimeException。
例:
class MyException extends Exception
{
MyException(String message)
{
super(message);
}
}
通过throw将自定义异常抛出。
3、其他重要知识
RuntimeException以及其子类如果在函数中被throw抛出,可以不用再函数上声明。
一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类。
如果父类抛出多个异常,那么重写方法必须抛出那些异常的一个子集,不能抛出新的异常。
throws和throw的区别:
1、throws使用在函数上。throw使用在函数内。
2、throws抛出的是异常类,可以抛出多个,用逗号隔开。throw抛出的是异常对象。
try、catch、finally的几种组合:
1、try catch finally
2、try catch(多个) 当没有必要资源需要释放时,可以不用定义finally。
3、try finally 异常无法直接catch处理,但是资源需要关闭。
注意:如果父类的方法没有抛出异常,那么子类覆盖时绝对不能抛,就只能try。
常见异常:NullPointerException、ClassCastException、IOException、NoSuchMethodException
4、重要练习
练习:
/*
毕老师用电脑上课。
问题领域中涉及两个对象。
毕老师,电脑。
分析其中的问题。
比如电脑蓝屏啦。冒烟啦。
*/
class LanPingException extends Exception{
private String msg;
LanPingException(String msg){
super(msg);
}
}
class MaoYanException extends Exception{
private String msg;
MaoYanException(String msg){
super(msg);
}
}
class NoPlanException extends Exception{
private String msg;
NoPlanException(String msg){
super(msg);
}
}
class Teacher{
private String name;
private Computer c;
Teacher(String name,Computer c){
this.name = name;
this.c = c;
}
public void prelect() throws NoPlanException{
try {
c.run();
} catch (LanPingException e) {
c.reset();
} catch (MaoYanException e) {
test();
throw new NoPlanException("课时无法继续。"+e.getMessage());
}
System.out.println("讲课");
}
public void test(){
System.out.println("做作业");
}
}
class Computer{
private int state = 2;
public void run() throws LanPingException,MaoYanException{
if(state==2)
throw new LanPingException("蓝屏了");
if(state==3)
throw new MaoYanException("冒烟了");
System.out.println("电脑运行。。。。");
}
public void reset(){
state = 1;
System.out.println("电脑重启。。。。");
}
}
public class ExceptionDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Computer c = new Computer();
Teacher t = new Teacher("bilaoshi",c);
try {
t.prelect();
} catch (NoPlanException e) {
System.out.println(e.toString());
System.out.println("换老师或者放假");
}
}
}
5、包(package)
类名的全称:包名.类名。
包与包之间的类进行访问,被访问的包中的类必须是public的,被访问的包中的类的方法也必须是public的。
public protected default private
同一类中 ok ok ok ok
同一包中 ok ok ok
子类中 ok ok
不同包中 ok
import
用来导包中的类。*代表所有。
jar包的操作
通过jar.ext工具队jar的操作。
创建jar包
• jar -cvf mypack.jar packa packb
• 查看jar包
• jar -tvf mypack.jar [>定向文件]
• 解压缩
• jar -xvf mypack.jar
• 自定义jar包的清单文件
• jar –cvfm mypack.jar mf.txt packa packb