适配器模式;没有抽象方法的抽象类
接口与子类之间新增一个抽象类去实现这个接口,如然后子类继承这个抽象类,并重写子类需要的功能方法
eg1
package oopdemo1;
public interface Demo1{
public abstract void way1();
public abstract void way2();
public abstract void way3();
}
public abstract class Demo2 implements Demo1{ //抽象类的方式实现接口,
public void way1() {
}
public void way2() {
}
public void wqy3() {
}
}
public class ConNoteBook extends Demo2{//子类基础抽线类
// TODO Auto-generated method stub
@Override
public void way1() {
// TODO Auto-generated method stub
}
异常:(程序运行中出现的问题)
java中存在的:1.异常,2.错误
1.描述异常的类;
java.lang.ArrayIndexOutOfBoundsException
描述错误的类;
java.lang.OutOfMemoryError: 内存溢出
异常:在程序运行发生,通常该异常有针对性处理方案
错误;错误无针对性处理方案,系统级别,产生JVM在操作内存上出现的问题
2.异常发生过程:
执行到异常程序时,程序不会往下执行,而是描述异常的位置,问题名称,问题内容,jvm把所2描述的信息封装到一个类中,丢给调用方法的地方
throw new ArrayIndexOutOfBoundsException("异常的信息“)
3.解决异常的方法
创建异常类的对象,并给对象提供异常信息
把异常类的对象,并且抛出去 使用throw
4.自定义异常
异常类继承RuntimeException
如何书有参函数和有参构造函数,构造函数的调用super()方法
java中,提供了两种处理异常的方法:声明,捕获
声明: 使用关键字throws 对异常进行声明(通常所抛出异常和所声明异常相同)
格式:修饰符 返回值类型 方法名(参数列表)throws 异常名1,异常名2……{
//语句
//Exception(throw)
}
捕获: 自己处理异常
java中捕获的关键字:try catch finally
1. try{
}catch(异常类 引用变量){
//异常处理代码
}finally{
永远会执行的代码
}
2. try{
}catch(异常类 引用变量){
//处理异常的代码
}
自定义异常:继承RuntimmeException,构造方法必须写 super();
处理异常的方式:
声明:throws
捕获:try{
//捕获可能出现的类
}catch(Exception ex){
//处理异常
}finally{
//一定会执行的类
}
区别:throw;抛出异常,书写在方法内
throws:书写在方法上,用来声明该方法中出现的异常,可以声明多个类,用逗号隔开
例子:计算矩形的面积
package lang1;
//判断长度数据是否为异常的数据
public class CheckLengthException extends Exception{
public CheckLengthException() { //构造函数,下同
super();
}
public CheckLengthException(String str) { //构造函数的调用
super(str);
}
}
package lang1;
//判断宽度数据是否异常
public class CheckWidthException extends Exception{
public CheckWidthException()
{
super(); //继承父类的异常
}
public CheckWidthException(String str) {
super(str);
}
}
package lang1;
//计算·矩形·的面积
public class Rect {
private double length;
private double width;
public void setLength(double length) throws CheckLengthException{ //声明该方法中可能出现长度数据非法的异常
if(length<0) {
throw new CheckLengthException("矩形长度为1非法数据");
//抛出异常的后面不能写代码
}
this.length=length;
}
public void setWidth(double width) throws CheckWidthException{
if(width<0) {
throw new CheckWidthException("矩形宽度为非法数据");
}
this.width=width;
}
public Rect(double length,double width)throws Exception{//直接声明异常为父类,此时的Exception==CheckLengthException,CheckWidthException
setLength(length);
setWidth(width);
}
//功能,计算矩形的面积
public double getArea() {
return this.length*this.width;
}
}
package lang1;
//测试
public class Test1 {
public static void main(String[] args) {
//捕获异常
try {
Rect r=new Rect(-1.2,2.9);
System.out.println(r.getArea());
}catch(Exception ex) {
ex.printStackTrace();//抛出异常
}
}
}