异常处理语句中的注意事项
- finally常用于一定要执行的语句,或者用于关闭资源;
- catch语句用于处理异常,如果没有catch则异常就未被处理,如果该异常是检测时异常,则需要声明;
- 子类在重写父类的方法时,只可以抛出父类异常的子类或者父类异常,假如确实自己的程序产生了新异常,则应该在内部try….catch处理;
异常练习的代码
interface Shape{
public abstract double getArea();
}
class IllegalValueException extends RuntimeException{
IllegalValueException(String message){
super(message);
}
}
class Circle implements Shape{
private double radius;
public static final double PI = 3.14;
Circle(double radius){
if (radius<0)
throw new IllegalValueException("半径是负数");
this.radius = radius;
}
public double getArea(){
return PI*radius*radius;
}
}
class Rectangle implements Shape{
private double length,width;
Rectangle(double length,double width){
if (length<0||width<0)
throw new IllegalValueException("长或者宽是负数");
this.length = length;
this.width = width;
}
public double getArea(){
return width*length;
}
}
class ExceptionTest{
public static void main(String[] args){
Circle c = new Circle(2);
double cArea = c.getArea();
System.out.println(cArea);
Rectangle r = new Rectangle(-3,4);
double rArea = r.getArea();
System.out.println(rArea);
}
}
异常总结
- 异常是把问题封装,将程序正常代码与异常代码相分离;
- finally语句有一种情况不执行,就是其前面出现了System.exit(0),JVM直接结束运行;
- 子类重写父类出现异常的方法时,只能抛出父类异常或父类异常的子类,如果父类没有抛出异常,则必须在子类方法中try…..catch把异常处理;
- 一个try可以对应多个catch,应当将捕获的父类异常放在靠后的catch语句中;
- 在处理异常时,应针对异常做出特定的处理方法,不可以只调用printStackTrace方法,也不可以完全不打印;
包package
- 包用于封装类;
- 假如一个类是属于一个包的,那么这个类的全名为:包名.类名,之后在创建这个类的对象时,应当以全名进行创建;
- 值得注意的是,在编译阶段,即使类从属于一个包,编译命令是:javac -d 指定目录 类名.java ,
- 然而运行命令是:java 包名.类名;
- 假如要运行的class文件不在当前目录下,则要重新设置 set classpath
- 当要访问不同包下的类文件时,比如创建该类对象并调用其A方法,则必须将该类和被调用的方法的访问权限设置为public;
- 还有一种情况,当出现在A包中的子类继承B包中的父类时,此时要通过A包子类对象调用父类方法时,应当将B包中父类被调用方法设置为protected权限,protected权限介于public和默认只见,可以被自己的不同包子类访问;
import关键字
- 为了写代码方便,可以通过import 要导入的包名.要导入的类名;
- 这样在创建对象时就不用写一大串了;
- import 包名.* 为导入该包下的所有类,但在开发中不这么用,会影响程序运行效率;
- import 包名.*只会导入当前包下的class文件,并不会导入下级目录下的class文件;
jar包
- 类似压缩包文件,可以压缩package与class文件
- jar -cvf classes1.jar p1 p1或者jar -cvf classes2.jar 1.class 2.class
- jar 命令中 -c 代表创建,-v 代表在标准输出信息,-f 指定jar文件,-t 查看jar包中的信息;
- 假如要在Dos命令行中运行jar包中的类文件,必须设置classpath为x:\xxx\xxx\classes1.jar;
- 假如要查看某类在屏幕上打印不完的信息,可以在命令行后加上 >路径\1.txt 就是在指定路径下输出一个1.txt文档记录信息;
- jdk的lib目录下有一个tools.jar存储的是编译工具所属类;
- jdk目录下src.zip为所有类的源文件;