java异常讲解与java内部类之间的闭包和回调笔记

目录

java异常分析

java异常指的是:程序运行期出现的错误
java异常的概念:

  • java异常是java提供的用于处理程序中错误的一种机制
  • java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给java运行时系统,这个过程称为抛出(throws/throw)异常
  • 当java运行时系统接收到异常对象时,会寻找能处理这一异常代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常

finally代码块
不管try、catch里面的代码有无return,finally都会执行
如果try、catch里有return,finally也有return,最后以finally为准
finally不会执行的情况
在finally之前有程序退出代码:System.exit(0);
注意:子类抛出的异常只能是父类异常的子集(不能比父类多与大)
第一种方式:自己捕获

try{
	代码...
}catch(Exception e){
	处理代码...
}finally{
	一定执行代码...
}

第二种形式:自己在方法中抛(不必处理)

throw new 异常类(String s);

第三种,重点:自定义异常
代码解释

int age;
if(age<0){
	throw new RuntimeException("年龄无效");
//RuntimeException类在java.lang包下
}

完整代码


public class myTest {
    public static void main(String[] args) throws agemistakes {
        int age=-1;
        if(age<0){
            throw new agemistakes("年龄无效");
        }
    }
}
class agemistakes extends Exception{

    public agemistakes(String s){
        super(s);
    }
}

自定义异常方法展示代码:

public class myTest {
    static myTest m;
    public static void main(String[] args) {
        sql();
    }
    public static void sql(){
        try {
            forName("com.mysql.cj.jdbc.Drivers");
        }catch (sqlClassException Class){
            Class.printStackTrace();
        }try {
            String url = "jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC";
            String user = "root";
            String password = "1988";
            con(url, user, password);
        }
        catch (sqlConException con){
            con.printStackTrace();
        }
        finally {
            close();
            System.out.println();
            System.out.println("本实验说明:模拟JDBC连接数据库异常,前两个为自定义的连接相关异常,最后一个自动为抛出异常");
            System.out.println(m.getClass().getName());
        }
    }
    public static void forName(String className) throws sqlClassException {
        if(!className.equals("com.mysql.cj.jdbc.Driver")){
            throw new sqlClassException("驱动加载失败,请检查驱动类名");
        }
    }
    public static void con(String url,String user,String password) throws sqlConException {
        if(!url.equals("jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC\";")
                ||!user.equals("root")||!password.equals("198810")){
            throw new sqlConException("信息匹配错误,请检查信息填写");
        }
    }
    public static void close(){
        System.out.println("资源已成功关闭");
    }
}
class sqlClassException extends Exception{
    public sqlClassException(String msg){
        super(msg);
    }
}
class sqlConException extends Exception{
    public sqlConException(String msg){
        super(msg);
    }
}

运行结果:
在这里插入图片描述

java内部类之间的闭包和回调

返回目录
笔记分析来源于网络

前言:
闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。
通过这个定义,可以看出内部类是面向对象的闭包,因为它不仅包含外围类对象(创建内部类的作用域)的信息还自动拥有一个指向此外围类对象的引用,在此作用域内,内部类有权操作所有的成员,包括private成员

java最引人争议的问题之一就是,人们认为java应该包含某种类似指针的机制,以允许回调(callback)。通过回调,对象能够携带一些信息,这些信息允许它在稍后的某个时刻调用初始的对象。如果回调是通过指针实现的,那么就只能寄希望程序员不会误用该指针。

更多信息:
https://www.cnblogs.com/tiancai/p/7350464.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在某种程度上,Python中的闭包Java中的内部类有一些相似之处,但它们的实现和使用方式有所不同。 闭包(Closure)是指一个函数与其相关的引用环境(包括函数定义时的非局部变量)的组合。在Python中,函数是一等公民,可以作为参数传递和返回值返回,这使得闭包的实现变得相对简单。闭包可以捕获并保留函数定义时的环境状态,使得函数可以访问外部变量,即使在其定义之后执行。 Java中的内部类(Inner Class)是定义在其他类内部的类。与闭包不同,内部类Java中是通过特殊的类语法来定义的,它可以直接访问包含它的外部类的成员变量和方法,包括私有成员。内部类提供了一种实现细粒度封装和组织代码的方式。 虽然闭包内部类都提供了一种在函数或类内部定义其他函数或类的方式,但它们在实现和使用上有一些不同之处: 1. 语法:Python中的闭包是通过函数定义来实现的,没有额外的语法结构。而Java中的内部类是通过class关键字来定义的。 2. 访问外部变量:Python中的闭包可以捕获并访问外部函数中定义的变量,即使外部函数已经执行完毕。Java中的内部类可以直接访问外部类的成员变量和方法。 3. 生命周期:闭包在函数定义时创建,并且可以在函数返回后继续存在。内部类的生命周期与外部类实例的生命周期相关联。 4. 使用场景:闭包在Python中常用于函数式编程和回调函数等场景。内部类Java中常用于实现接口、事件处理和封装细节等场景。 总体而言,虽然Python中的闭包Java中的内部类都提供了在函数或类内部定义其他函数或类的能力,但它们的实现和使用方式有所不同,适用于不同的编程范式和场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CharmDeer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值