javaday4

javaday4

抽象
抽象函数:表达概念但无法实现具体代码的函数
抽象类:表达概念但无法构造对象的函数

一个类里面有抽象函数那么他一定是一个抽象类

用abstract修饰抽象函数或者类

抽象类中可以定义变量,但是使用这个变量的一定是这个抽象类的非抽象子类

抽象类的非抽象子类必须覆盖这个抽象类中的所有抽象函数(就是再在子类中定义一遍抽象函数,把这个抽象函数实体化写成不抽象的形式) 如果没有全部覆盖,那么这个子类必须也是抽象的。

接口

java中不能多继承,一个子类最多只能继承一个父类

接口是纯抽象类,他的所有成员函数都是抽象函数,所有成员变量都是public static final (不会被改变的常量)

类表达的是一种东西,接口表达的是一个概念,接口规定了长什么样,但不管他里面有什么

接口的定义
public interface cell
{
...                           //可实现的抽象函数
}
类实现接口
public class fox extend animals implements cell
{
...                          //这样就表明fox是animals的子类并且能够实现cell接口
}
接口的变量
public int hanshu(cell o)   //cell本身是抽象类不能构造对象,这里的变量o的意思是只要是实现了cell这个接口的类的变量都可以作为参数o传入函数
{
...
}

一个类可以实现很多接口,接口也可以继承(extends)很多的接口(但是不能继承(extends)类),但是接口不能实现(implements)接口

面向接口的编程:程序设计时先定义接口在实现类,任何需要在函数间传入传出的一定是接口而不是一个具体的类

异常
Scanner in=new Scannner(System.in)
int i=in.nextInt();
int[] a=new int[10];
try
{
a[idx]=10;
}catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("error");
}

输入10及以上的数的时候,因为数组越界所以会出现异常,这个异常就会被catch捕捉到,捕捉到异常后会执行catch后的语句就打印出error,如果没有异常那么就不会运行之后的语句。

在这里插入图片描述

可以使用e.getMessage()来查看异常e中存储的东西,直接用println(e)(这里是toString()转化了e)来查看异常,也可以用e.printStackTrace()来进一步更详细的查看异常,会逐一显示在哪里发生的,又在哪里被调用了。

如果说一个函数里某句话出现了异常,那么这个函数里她之后的语句都不会被执行,包括return也不会

抛出异常

异常只会被处理一次,如果需要多次利用这个异常,就需要抛出异常throw e;这样的话后续的catch就仍然能够捕捉到这个异常,从而进行后续的操作

异常机制就是将业务逻辑和处理方法清晰的分开了,每种一场都对应相应的处理方法。

现在比如说有两个函数,一个是open()打开文件,一个是read()阅读文件,read的前提就是open要能成功。如果说一个文件不能打开(open返回-1),那么read这个函数就要抛出异常。

class openwrong extends Throwable{    //声明异常所属的类,这个类必须要继承Throwable这个父类才能够抛出(Throwable有两个子类,一个叫Error,一个叫Exception,声明的类也可以继承这两个子类)
}
public class yichang  {
    public static int open()
    {
        return -1;
    }
    public static void read() throws openwrong {//如果一个函数有可能会抛出异常,那么在声明这个函数的时候就必须要在他后面加上他有可能抛出的异常的类型,这里的这个throws必须是复数
        if (open() == -1) {
            throw new openwrong();   //抛出一个新的异常的对象,注意这里必须是异常的对象,像抛出-1或者是字符串什么的都是不被允许的,所以必须要先定义异常的类
        }
    }
    public static void main(String[] args)
    {
        try {                     //只要是要调用的函数有可能会抛出异常的,就必需要用try catch 来写用来捕捉异常,不然会报错
            read();
        } catch (openwrong e) {
            e.printStackTrace();
        }
    }
}

子异常类可以继承(extend)父异常类,并且子异常类可以被父异常类捕获,如果没有别的操作的时候每个异常只能被捕获一次,也就是说如果将父异常类捕获写在了子异常类捕获前面且用于捕获子异常类的时候,那么后面的那条子异常类的捕获就永远不会被使用到,所以这个时候就会报错,需注意

可以用Exception来捕获所有异常

子类不能比父类抛出更多的异常,不然会报错,但是,如果说时用构造函数的方法,子类中是可以抛出更多的异常的,作为成员函数的时候是不能抛出更多的异常的(意思就是父类中有一个会抛出某个异常的函数,子类之中要定义它的时候不能让他抛出必父类之中更多的一场,但是呢如果说父类是以构造函数方法构造的,那么子类之中构造的时候就可以在子类的构造函数之中抛出更多的异常)

能抛出更多的异常的(意思就是父类中有一个会抛出某个异常的函数,子类之中要定义它的时候不能让他抛出必父类之中更多的一场,但是呢如果说父类是以构造函数方法构造的,那么子类之中构造的时候就可以在子类的构造函数之中抛出更多的异常)==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值