黑马程序员_java异常体系

------- android培训、 java培训、 java学习型技术博客、期待与您交流! ----------
异常体系
1、异常体系
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

------- android培训、 java培训、 java学习型技术博客、期待与您交流! ----------

你可能感兴趣的:(黑马程序员)