异常
finally
- finally代码块:定义一定执行的代码
- 通常用于关闭资源。
package 异常.Finally;
class FuShuException extends RuntimeException
{
FuShuException(String msg)
{
super(msg);
}
}
class Demo
{
int div(int a,int b)
{
if(b<0)
throw new FuShuException("出现了除数为负数");
if(b==0)
throw new ArithmeticException("被零除了 /0");
return a/b;
}
}
public class ExceptionDemo5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo d=new Demo();
try
{
int x=d.div(4, -1);
System.out.println("x="+x);
}
catch(FuShuException e)
{
System.out.println(e.toString());
return;
}
finally
{
System.out.println("finally");//finally中存放的是一定会执行的代码
}
System.out.println("Over");
}
}
输出:
异常.Finally.FuShuException: 出现了除数为负数
finally
异常-处理语句其他格式
第一个格式:
try
{
}
catch()
{
}
第二个格式:
try
{
}
catch()
{
}
finally
{
}
第三个格式:
try
{
}
finally
{
}
异常-覆盖时的异常
- 子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常,或者该异常的子类。
- 如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集
- 如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。
- 如果子类方法发生了异常,就必须要进行try处理,绝对不能抛。
package 异常.覆盖异常;
class AException extends Exception
{
}
class BException extends AException
{
}
class CException extends Exception
{
}
class Fu
{
void show()throws AException
{
}
}
class Zi extends Fu
{
void show()throws AException
{
}
}
public class ExceptionDemo7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
异常总结
异常:
- 是对问题的描述,将问题进行对象的封装。
异常体系:
- Throwable
- Error
- Exception
-RuntimeException
异常体系的特点:
- 异常体系中的所有类以及建立的对象都具备可抛性。
- 也就是说可以被throw和throws关键字所操作。
- 只有异常体系具备这个特点。
throw和throws的用法:
throw定义在函数内,用于抛出异常对象。
throws定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开。
当函数内有throw抛出异常对象,并未进行try处理。必须要在函数上声明,否则编译失败。
注意:RuntimeException除外。也就是说,函数内如果抛出RuntimeException异常,函数上可以不用声明。
如果函数声明了异常,调用者需要进行处理。处理方法可以throws可以try.
异常有两种:
编译时被检测异常
- 该异常在编译时,如果没有处理(没有抛也没有try),编译失败。
运行时异常(编译时不检测),
- 在编译时,不需要处理,编译器不检查。
- 该异常的发生,建议不处理,让程序停止。需要对代码进行修正。
包(package)
- 对类文件进行分类管理
- 给类提供多层命名空间
- 卸载程序文件的第一行
- 类名的全程是 包名.类名
- 包也是一种封装形式
javac -d . PackageDemo.java
-d命令指定生成的class文件的存放目录。
.点号代表当前目录
关键词package
使用 package可以声明 该文件属于哪个包
package pack;//声明包名
public class Test{
public void show()
{
System.out.println("show");
}
}
import关键词
通过import关键词可以简化类名的书写,
import pack.*;//通过*通配符导入包中的所有类
import pack.pa.*;//导入子包中的类
class Demo
{
public static void main(String[] args)
{
Test t=new Test();
t.show();
}
}
建议不要写通配符 * ,需要用到包中的哪个类,就导入哪个类。
jar包
- Java的压缩包
- 方便项目的携带
- 方便于使用,只要在classpath设置jar路径即可
- 数据库驱动,SSH框架等都是以jar包体现的
通过命令:
jar -cf 目标文件.jar 源文件目录1 源文件目录2
可以生成一个 目标文件.jar 包
-v参数,显示详细过程
jar -tf 目标文件.jar 显示jar包里的所有文件及目录
jar -xf 目标文件.jar 解压jar包中的文件
\Java\jdk1.6.0_43\lib\tools.jar
tools.jar\sun\tools\javac
存放了编译器javac的class文件
Java\jdk1.6.0_43\src.zip
存放了java所有类的源代码