回调函数
记录一下近期学习的一些东西。
例子是从网上看来的不过忘了地址是什么,描述大概如下:
小明到超市超市买辣条,可是超市近期没有货,于是让小明留下联系方式,日后到货了通知小明。
在这里小明留下联系方式就是一个注册登记过程,之后的通知就是回调过程。
那么为什么要注册/登记呢?其实很好理解,调用方要回调被调用方的方法(函数),当然需要知道被调用方都有谁啦(通常不会是一个,可以是一个列表来存放多个被调用方。)
下面是代码示例:
package com.wcj.test;
public class CallBackDemo {
public static void main(String[] args) {
SuperMarket superMarket = new SuperMarket(new People("小明"));
superMarket.work();
}
}
//超市,也就是调用方
class SuperMarket{
//这里简化,直接是一个被调用对象
//以后可能是更多的人或者其他能被调用者比如
//List<CallBackAble> list;
private CallBackAble callSomeOne;
public SuperMarket(CallBackAble callBackAble) {
this.callSomeOne = callBackAble;
}
public void work() {
//回调处,因为只有一个对象,所以不用循环
this.callSomeOne.call();
}
}
class People implements CallBackAble{
private String nameString;
public People(String name) {
this.nameString = name;
}
/**
* 小明实现了CallBackAble中的call方法,做出自己的操作
*/
@Override
public void call() {
System.out.println("通知"+nameString+"辣条到货");
}
}
//一个公共接口,想要被超市通知的都要实现这个接口
interface CallBackAble{
public void call();
}
异常捕获
Exception和error
共同点:
Exception和error是java异常结构中最常用的两个类,统称为异常。它们都是throwable的子类
不同点:
Exception表示程序中遇到的异常,可以用try catch进行捕获
error一般指jvm错误,程序中无法捕获
Throw和Throws关键字
Throws:在定义一个方法时,使用Throws关键字声明,表示此方法不处理异常,而是交给调用方法来处理
(注意:不要在main方法中使用throws,main方法为一切方法的起点,一切的操作也是由主方法开始的,所以,如果在主方法中使用throws,则程序出现问题后肯定交由jvm处理,将会导致程序中断。)
Throw:Throw关键字是人为的抛出异常,直接抛出异常的实例化对象。
示例:
package javaBasics;
public class Math {
public int div(int i,int j) throws Exception{
int temp = 0;
try{
temp = i/j;
}catch(Exception e){ //捕获异常
throw e; //把异常交给被调用处处理
}finally{
System.out.println("计算结束");
}
return temp;
}
}
package javaBasics;
public class test5 {
public static void main(String[] args) {
Math math = new Math();
try {
System.out.println(math.div(10, 0));
} catch (Exception e) { //进行异常捕获
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
自定义异常类
package javaBasics;
public class MyException extends Exception{ //自定义异常类继承Exception类
public MyException(String msg){ //构造方法接受异常信息
super(msg); //调用父类中的构造方法
}
}
package javaBasics;
public class test5 {
public static void main(String[] args) {
try{
throw new MyException("自定义异常信息");//抛出异常
}catch(Exception e){ //异常捕获处理
e.printStackTrace();
}
}
}