04异常Lambda算法正则

news2024/12/23 4:18:49

异常

异常是什么?

  • 异常是代码在编译或者执行的过程中可能出现的错误。
  • 避免异常的出现,同时处理可能出现的异常,让代码更稳健。

异常分为几类?

  • 编译时异常、运行时异常。
  • 编译时异常:没有继承RuntimeExcpetion的异常,编译阶段就会出错。
  • 运行时异常:继承自RuntimeException的异常或其子类,编译阶段不报错,运行可能报错。

异常的体系

  • Error:

    • 代表的系统级别错误(属于严重问题).
  • Exception:叫异常,分为两类: 编译时异常, 运行时异常

    • 运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常(如:数组索引越界异常)
    • 编译时异常:编译阶段就会出现错误提醒的。(如:日期解析异常)
  • JVM默认如何处理异常?

    • 打印异常信息

      立即结束程序(异常出现后,如果不处理,程序是无法继续向下运行的)

  • 直接抛出

    • 异常需要被调用者知道,就需要把异常抛出 throws Exception
  • 捕获异常

  • 如果方法中出现的异常, 不需要调用者知道, 需要为异常进行处理解决, 就可以使用捕获异常 try catch后的代码会继续执行

抛出异常

  • 在Java的方法调用中,如果一个方法中出现了异常,本方法自己不处理,默认是会抛给调用方法去处理的
  • 此时要注意的是,如果发生的是非运行时异常,需要在方法上明确使用throws关键字声明抛出
方法 throws 异常1 ,异常2 ,异常3 ..{}
// 推荐方式
方法 throws Exception{ }
// Exception代表可以捕获一切异常
B方法 -> A方法 -> main

捕获异常

  • 直接在当前方法,发生异常的代码外使用try–catch–结构捕获并处理异常
  • 异常处理后,后续的代码是可以继续执行的
try{
    // 监视可能出现异常的代码!
}catch(异常类型1 变量){
    // 处理异常
}catch(异常类型2 变量){
    // 处理异常
}...
// 推荐方式
try{
    // 可能出现异常的代码!
}catch (Exception e){
    e.printStackTrace(); // 直接打印异常对象的信息
}
    // Exception代表可以捕获一切异常
B方法 -> A方法 -> main

自定义异常

运行时异常自定义异常
定义一个异常类继承RuntimeException定义一个异常类继承Exception
重写构造器重写构造器
通过throw new 异常类(xxx)来创建异常对象并抛出通过throw new 异常类(xxx)来创建异常对象并抛出
编译阶段不报错,提醒不强烈,运行时才可能出现!!编译阶段就报错,提醒更加强烈!!
运行时异常的特点编译时异常的特点
运行时异常:继承自RuntimeException的异常或者其子类编译时异常:继承自Exception的异常或者其子类
编译阶段不报错,运行可能报错。编译阶段报错,必须处理,否则代码不通过。
默认异常处理机制默认的异常处理机制并不好,一旦真的出现异常,程序立即死亡!
异常的处理形式运行时异常编译阶段不会出错,是运行时才可能出错的,所以编译阶段不处理也可以; 按照规范建议还是处理:建议在最外层调用处集中捕获处理即可。
自定义编译时异常定义一个异常类继承Exception; 重写构造器; 在出现异常的地方用throw new 自定义对象抛出; 作用:编译时异常是编译阶段就报错,提醒更加强烈,一定需要处理!!
异常处理的总结作用:编译时异常是编译阶段就报错,提醒更加强烈,一定需要处理!!在开发中按照规范来说第三种方式是最好的:底层的异常抛出去给最外层,最外层集中捕获处理; 实际应用中,只要代码能够编译通过,并且功能能完成,那么每一种异常处理方式似乎也都是可以的。

Lambda表达式

Lambda表达式是JDK 8开始新增的一种语法形式; 作用:用于简化匿名内部类的代码写法。

(被重写方法的形参列表) -> {
    被重写方法的方法体代码。
}

Lambda表达式只能简化
函数式接口的匿名内部类!!!

new  类或接口(参数值…) {
    方法实现(被重写方法的形参列表){
              被重写方法的方法体代码
       }
};

什么是函数式接口?

  • 有且仅有一个抽象方法的接口。
  • 注意:大部分函数式接口上面都会有一个@FunctionalInterface的注解,有该注解的接口就必定是函数式接口。

Lambda表达式的省略写法(进一步简化Lambda表达式的写法)

  • 参数类型可以省略不写
  • 如果只有一个参数,小括号()也可以省略。
  • 如果Lambda表达式中的方法体代码只有一行代码,可以省略花括号{}不写,同时要省略分号!此时,如果这行代码是return语句,也必须去掉return不写。

方法引用

静态方法的引用

语法 类名::静态方法

场景 如果某个Lambda表达式里只是调用一个静态方法,并且前后参数的形式一致,就可以使用静态方法引用。

实例方法的引用

语法 对象名::实例方法

场景 如果某个Lambda表达式里只是调用一个实例方法,并且前后参数的形式一致,就可以使用实例方法引用。

特定类型的方法引用

语法 类型::方法

场景 如果某个Lambda表达式里只是调用一个实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用。

构造器引用

语法 类名::new

场景 如果某个Lambda表达式里只是在创建对象,并且前后参数情况一致,就可以使用构造器引用。

Integer[] ages={66,44,87,34};
Arrays.sort(ages, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;
    }
});
System.out.println("内容: "+ Arrays.toString(ages));

Integer[] ages={66,44,87,34};
Arrays.sort(ages, (o1, o2) -> o2-o1);
System.out.println("内容: "+ Arrays.toString(ages));
注意:通常我们见到的函数式接口上都有一个@Functionallnterface注解,
标记该接口必须是满足函数式接口。

Lambda表达式简化按钮监听器ActionListener的匿名内部类形式

JButton btn = new JButton("登录");
//给登录按钮绑定点击事件监听器
btn.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("登录一下~~~");
    }
});

JButton btn = new JButton("登录");
//给登录按钮绑定点击事件监听器
btn.addActionListener(e -> System.out.println("登录一下~~~"));
  • Lambda表达式的省略写法(进一步在Lambda表达式的基础上继续简化)

    • 参数类型可以省略不写。

    • 如果只有一个参数,参数类型可以省略,同时()也可以省略。

    • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!

    • 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写

常见算法

排序算法

冒泡排序

每次比较两个相邻的元素,小的放左边大的放右边

实现冒泡排序的关键点分析

确定总共需要做几轮: 数组的长度-1.
每轮比较几次:

i(第几轮) 比较位 次数规律: 数组的长度 – i -1
0 0 1 2 (3次)
1 0 1 (2次)
2 0 (1次)

比较规则: 相邻两个元素比较,大的放在右边

image-20240411144553734
  1. 冒泡排序的思想

    • 从头开始两两比较,把较大的元素与较小的元素进行交换
    • 每轮把当前 最大的一个元素存入到数组当前的末尾。
  2. 冒泡排序的实现步骤。

    • 定义一个外部循环控制总共需 要冒几轮(数组的长度-1)

    • 定义一个内部循环, 控制每轮依次往后比较几个位置(数组长度-i-1)

    • 如果当前位置的元素值>后- 一个位置的元素值,两者交换。

      public class Test5冒泡排序 {
          public static void main(String[] args) {
              // 1、定义一个数组,存储一些数据啊
              int[] arr=new int[4];
              Scanner sc=new Scanner(System.in);
              for (int i = 0; i < arr.length; i++) {
                  System.out.println("请输入第" + (i+1) + "个数据");
                  arr[i]=sc.nextInt();
              }
              // 2、定义一个循环控制比较的轮数
              //for (int i = 1; i <= arr.length-1; i++) {
              for (int i = 0; i < arr.length-1; i++) {
                  // i == 0  比较的次数 3  j = 0 1 2
                  // i == 1  比较的次数 2  j = 0 1
                  // i == 2  比较的次数 1  j = 0
                  // 3、定义一个循环控制每轮比较的次数,占位
                  //for (int j = 0; j < arr.length-i; j++) {
                  for (int j = 0; j < arr.length-i-1; j++) {
                      // 判断j当前位置的元素值 是否 大于后一个位置 若较大 则交换
                      if (arr[j]>arr[j+1]){
                          int temp=arr[j];
                          arr[j]=arr[j+1];
                          arr[j+1]=temp;
                      }
                  }
              }
              for (int i = 0; i < arr.length; i++) {
                  System.out.print(arr[i] + "\t");
              }
          }
      }
      

选择排序

选择排序算法

每轮选择当前位置, 开始找出后面较小值与该位置交换

选择排序的关键

确定总共需要几轮: 数组的长度减一

控制每轮从以前的位置为基准, 与后面元素选择几次

image-20240411161749161

二分查找

  • 数组的二分查找的实现步骤是什么样的?

    • 定义变量记录左边和右边位置。

    • 使用while循环控制查询(条件是左边位置<=右边位置)

    • 循环内部获取中间元素索引

    • 判断当前要找的元素如果大于中间元素,左边位置=中间索引+1

    • 判断当前要找的元素如果小于中间元素,右边位置=中间索引-1

    • 判断当前要找的元素如果等于中间元素,返回当前中间元素索引。

正则

image-20230507185535686

String类的哪个方法可以与正则表达式进行匹配。

public boolean matches(String regex): 
判断是否匹配正则表达式,匹配返回true,不匹配返回false

正则表达式在字符串方法中的使用

方法名说明
public String replaceAll(String regex,String newStr)按照正则表达式匹配的内容进行替换
public String[] split(String regex):按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。

正则表达式支持爬取信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1592422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python爬虫--------Beautiful Soup 案列(二十一天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

JRT多平台初始化程序

这么多年客户端一直只做Windows&#xff0c;所以初始化程序用C#写个Exe&#xff0c;按网站生成的下载清单文件一个个下载和部署客户端环境是可以的。新的由于设计目标就是支持多平台的&#xff0c;所以需要重新考虑初始化设计。 JRT-Linux初始化演示 JRT-Windows初始化演示 …

【STL详解 —— list的介绍及使用】

STL详解 —— list的介绍及使用 list的介绍list的介绍使用list的构造list iterator的使用list capacitylist element accesslist modifiers 示例list的迭代器失效 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭…

Linux内核中KASLR功能是什么?有什么作用?怎么破除?以及如何实操?(地址空间、layout random、kallsyms)

1. 背景 KASLR是一个什么技术点其实不重要&#xff0c;但重要的是有了KASLR这个功能后&#xff0c;造成内核中某个符号&#xff08;函数 or 变量&#xff09;在System.map中的地址和实际不一样了&#xff08;实际&#xff1a; cat /proc/kallsyms&#xff09;&#xff0c;进一…

vector及cv::Mat删除指定元素并不改变位置

1、vector删除指定元素且不改变原有的顺序 使用erase方法&#xff0c;测试例子如下所示&#xff1a; //测试用例 struct MyStruct {int a;int b; }; std::vector<MyStruct> spotInfo; spotInfo.push_back({ 1,2 }); spotInfo.push_back({ 3,4 }); spotInfo.push_back({…

SSM整合时的配置文件

文章目录 SSM整合时的配置文件pom.xmlweb.xmlmybatis-config.xmlspring-mvc.xmlspring-mapper.xmldatabase.propertiesapplication.xml项目结构图 SSM整合时的配置文件 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"ht…

蓝桥杯第2152题——红绿灯

问题描述 爱丽丝要开车去上班, 上班的路上有许多红绿灯, 这让爱丽丝很难过。为 了上班不迟到, 她给自己的车安装了氮气喷射装置。现在她想知道自己上班最 短需要多少时间。 爱丽丝的车最高速度是 米每秒, 并且经过改装后, 可以瞬间加速到小于 等于最高速的任意速度, 也可以瞵…

【从浅学到熟知Linux】环境变量详谈(含使用程序获取环境变量的3种方法、如何查看环境变量)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程及数据库等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 环境变量基本概念查看环境变量的方法环境变量相关命令环境变量组织方式及获取环境变量的3种方法验…

链表中常见的使用方法逻辑整理

文章目录 1. 二叉树特点1.1 完全二叉树1.2 满二叉树 2. 二叉树创建2.1 通过先序序列带有叶子结点标识符创建二叉树2.2 通过层次遍历顺序创建二叉树2.3 通过 先序中序 创建二叉树2.4 通过 先序中序 创建二叉树2.5 通过 中序后序 创建二叉树 3. 二叉树遍历通用方法3.1 先序遍历(深…

【软考中级】软件设计师考点分布

文章目录 软考官网资格设置软考报考流程 【软件设计师】考点分布选择题考点分布案例题考点分布 软考官网 中国计算机技术职业资格网&#xff1a;https://www.ruankao.org.cn/ 官网报名平台&#xff1a;https://bm.ruankao.org.cn/sign/welcome 资格设置 计算机软件计算机网…

SSM整合配置案例

一、什么是SSM整合 SSM整合用到两个容器&#xff0c;web容器是root容器的子容器&#xff0c;父子容器关系。 为了方便编写&#xff0c;我们可以三层架构每层对应一个配置类&#xff0c;分别指定两个容器加载 Ioc如何初始化&#xff1f; 二、简单实现整合SSM &#xff08;一…

是的,本科毕业八年,我考研了

今天&#xff0c;是一篇纯分享文。 是的&#xff0c;本科毕业八年&#xff0c;我考研了。 停更10个月&#xff0c;历时296天&#xff0c;我考研上岸了。 小伙伴们&#xff0c;好久不见。 一 发今年第一篇文章的时候刚处理完后续事宜&#xff0c;就简单说了句&#xff0c;后台…

QThread的学习

锁住该线程直到下面的情况之一出现&#xff1a; (1)和该线程连接的对象已经执行完成&#xff08;例如&#xff1a;当它从run()中返回时&#xff09; 如果该线程已经结束&#xff0c;该函数将返回true。 如果该线程还没有开始&#xff0c;它也返回true。 (2)time毫秒已经过去。如…

Linux 内核学习(2) --- regulator 框架

目录 Regulator 介绍Regulator provider 注册struct regulator_descstruct regualtor_configDTS 配置和解析On BoardConfig 配置regulator_ops总结 Regulator Consumer 使用struct regulator 获取regulator 操作使用Multi Regulator 参考博客 Regulator 介绍 Regulator 指的是…

电子烟特效音语音方案选型-WTN6020-8S-E

随着科技的迅猛进步&#xff0c;电子烟行业亦在持续创新与突破&#xff0c;引领着全新的潮流。其中&#xff0c;电子烟产品所特有的吸烟声音特效播报功能&#xff0c;无疑成为了技术革新的璀璨亮点。这一设计巧妙地将吸烟的声效融入使用体验中&#xff0c;使得用户在吸电子烟时…

Javascript 斐波那契搜索-迭代与递归(Fibonacci Search)

给定一个大小为 n 的排序数组 arr[] 和要在其中搜索的元素 x。如果 x 存在于数组中&#xff0c;则返回 x 的索引&#xff0c;否则返回 -1。 例子&#xff1a; 输入&#xff1a; arr[] {2, 3, 4, 10, 40}, x 10输出&#xff1a; 3 元素 x 出现在索引 3 处。 输入&#xff1…

HarmonyOS开发实例:【app帐号管理】

应用帐号管理 介绍 本示例选择应用进行注册/登录&#xff0c;并设置帐号相关信息&#xff0c;简要说明应用帐号管理相关功能。效果图如下&#xff1a; 效果预览 使用说明参考鸿蒙文档&#xff1a;qr23.cn/AKFP8k点击或者转到。 1.首页面选择想要进入的应用&#xff0c;首次进…

【Redis】持久化

文章目录 一、RDB1.1、RDB的自动备份与手动备份1.1.1、自动备份1.1.2、手动备份 1.2、RDB优点1.3、RDB缺点1.4、RDB快照1.5、RDB优化配置项 二、AOF2.1、AOF工作流程2.2、AOF写回策略2.3、MP-AOF实现2.4、AOF优缺点2.5、AOF重写机制 三、RDBAOF混合持久化3.1、数据恢复顺序和加…

生产环境中秒杀接口并发量剧增与负载优化策略探讨

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 1. 实施限流措施 1.1 令牌桶算法&#xff1a; 1.2 漏…

如何申请阿里云服务器学生优惠,入口在这呢!

阿里云学生服务器免费申请&#xff0c;之前是云翼计划学生服务器9元/月&#xff0c;现在是高校计划&#xff0c;学生服务器可以免费申请&#xff0c;先完成学生认证即可免费领取一台云服务器ECS&#xff0c;配置为2核2G、1M带宽、40G系统盘&#xff0c;在云服务器ECS实例过期之…