< 今日心情 >这里还有个小尾巴
在编写程序的时候,经常会遇到各种错误提示,或是在编译的时候,或是在运行的时候。
这些不正常的现象就是异常。
一、 异常
1.什么是异常
在程序运行时遇到的不正常情况。
2.异常体系
Throwable:Error:
问题严重:如加载的类不存在,内存溢出等。
一般不编写处理代码。
Exception:
在运行时出现的一些情况。
通过try catch finally进行处理。
3.Throwable中的方法:
getMessage()
获取异常信息,返回字符串。
toString()
获取异常类名和异常信息,返回字符串。
printStackTrace()
printStackTrace(PrintStream s)获取异常类名和异常信息,以及异常出现在程序中的位置。
返回值void。
通常用该方法将异常内容保存在日志文件中,以便查阅。
3.throw和throws
throw:
用在函数内,抛出异常对象。
throws:
用在函数上,后面跟异常类,表示函数会有或可能会有异常对象被抛出
注意:
函数内throw了一个异常必须:(否则编译不能通过)
有对应的throws标示出来。
调用者必须处理或继续抛出。
或自己处理该异常。
try catch finally
例外:如果抛出的是运行时异常(RuntimeException类异常或子类异常)可以不抛出,调用者可以不处理。
函数标识(throws)了一个异常类,如果它被覆盖,覆盖它的方法必须抛出相同的异常或子类异常。
throws了多个异常类时,覆盖它的方法必须抛出那些异常的子集,不能抛出新的异常。
简单的说就是,覆盖函数处理问题的能力必须弱于被覆盖的函数,最多相等。
4.自定义异常
定义一个类继承Exception或其子类。在构造函数中通过super关键字设置异常信息。如果遇到该问题时希望程序停止运行,就让该类继承RuntimeException或其子类异常。class DefaultNumberException extends RuntimeException//自定义了一个无效数字异常 { DefaultNumberException(String msg) { super(msg); } } class MyMath { public static double chu(double x,double n) throws DefaultNumberException//声明异常 { if(n<=0) throw new DefaultNumberException("除数不符合要求。");//抛出一个自定义异常,抛出异常时运行时异常可以不声明 return x/n; } } class ExceptionDemo { public static void main(String[] args) { double res=0; try//捕捉异常 { res=MyMath.chu(10,-5); } /* 处理异常 catch (DefaultNumberException de) { de.printStackTrace(); } */ finally//不论程序是否发生异常,都会执行的代码块。 { System.out.println("哎呀,这道题真难!"); } System.out.println("结果是:"+res); } }
定义异常类的好处:
将正常的程序流程和问题处理部分分离开,增强程序的阅读性。
二、 包(package)
1.概述
对类文件进行分类管理。
给类提供多层命名空间。
写在程序文件的第一行。
格式:package 包名;
类名的全称的是 包名.类名。
包也是一种封装形式。
2.classpath
给JVM提供的一个环境变量。
指定类或者包所在的路径。
当前位置:.;3.访问权限
4.import
给类安排了包后,就必须使用类的全称了,为了简化书写,可以使用import。一个类中只能有一个package,可以有多个import。import只能导入包中的类,不能导入包中的包。通常写import mypack.Demo;
而不写import mypack.*;
5.Jar包
java的压缩包方便项目携带。方便使用,只要在classpath设置jar路径即可。数据库驱动,SSH框架等都是以jar包体现的。jar.exe工具对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