04异常Lambda算法正则

异常

异常是什么?

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

异常分为几类?

  • 编译时异常、运行时异常。
  • 编译时异常:没有继承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>() {@Overridepublic 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() {@Overridepublic 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.rhkb.cn/news/307816.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android适配平板屏幕尺寸

一、划分手机和平板 人为判断方法: 大于6英寸的就是平板。小于6英寸的都是手机 平板尺寸&#xff1a; 6英寸、7英寸、10英寸、14英寸… Android系统支持多配置资源文件&#xff0c;我们可以追加新的资源目录到你的Android项目中。命名规范&#xff1a; 资源名字-限制符 l…

c++调python接口

1. 新建run.py文件&#xff0c;并定义相关接口&#xff1a; import numpy as np from scipy.fftpack import fftdef str_add(str1,str2):return int(str1) int(str2)def my_sort(data):data.sort()return datadef aw_fft(data, Fs):N len(data)result np.abs(fft(xdata, n…

Git 解决分支冲突

一、前言 一直习惯于 add commit push 的三步走&#xff0c;偶然间看到了一个评论说在 push 之前还有一个 pull&#xff0c;小小的疑问就埋在了我的心里。于是我就先了解了 pull 的工作原理&#xff0c;就是先拉取代码&#xff08;fetch&#xff09;再合并分支&#xff08;mer…

C语言-----结构体详解

前面已经向大家介绍过一点结构体的知识了&#xff0c;这次我们再来深度了解一下结构体。结构体是能够方便表示一个物体具有多种属性的一种结构。物体的属性可以转换为结构体中的变量。 1.结构体类型的声明 1.1 结构体的声明 struct tag {member-list;//结构体成员变量 }vari…

数字化时代:IT界的致富秘籍 —— 策略×态度×机遇

&#x1f31f; 数字化时代&#xff1a;IT界的致富秘籍&#x1f680; —— 策略态度机遇 在数字化浪潮中冲浪&#x1f3c4;‍♂️&#xff0c;IT行业犹如一片无限可能的蓝海。想要在这片汹涌的海洋中捕获财富&#xff0c;不是一件轻而易举的事。让我们一起深入探索&#xff0c;如…

(学习日记)2024.04.16:UCOSIII第四十四节:内存管理

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Elastic 线下 Meetup 将于 2024 年 4 月 27 号在重庆举办

2024 Elastic Meetup 重庆站活动&#xff0c;由 Elastic、新智锦绣联合举办&#xff0c;现诚邀广大技术爱好者及开发者参加。 活动时间 2024年4月27日 13:30-18:00 活动地点 中国重庆 沙坪坝区学城大道62-1号研发楼一期b3栋1楼(瑞幸咖啡旁&#xff09; 活动流程 14:00-14:50…

【电控笔记4】拉普拉斯-传递函数-pid

数据标幺化 拉普拉斯变换 欧拉公式 常见s变换 s变换性质

《QT实用小工具·二十一》鼠标十字线

1、概述 源码放在文章末尾 该项目实现了界面绘制十字线并跟随鼠标移动的过程&#xff0c;下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : public QWidg…

PE文件的分析和构造超详细过程

本文详细讲述如何从0构造一个PE文件&#xff0c;运行该文件会弹出一个HelloPE的窗口 目录 预备知识 1. 构造DOS头IMAGE_DOS_HEADER 1.1 构造DOS_MZ头 1.2 构造DOS_STUB 2、构造PE头IMAGE_NT_HEADERS 248字节 2.1 signature 2.2 IMAGE_FILE_HEADER 2.3 IMAGE_OPTI…

Jenkins UI 自动化持续化集成测试

一&#xff1a;安装jenkins 环境 在官网下载msi 直接安装即可 二&#xff1a;设置全局变量 设置allure 路径 三&#xff1a;创建项目 1、创建自由风格项目 2、如果项目在本地&#xff0c;且本地服务器是windows &#xff0c;找到Jenkins安装根目录&#xff0c;寻找config…

Excel从零基础到高手【办公】

第1课 - 快速制作目录【上篇】第1课 - 快速制作目录【下篇】第2课 - 快速定位到工作表的天涯海角第3课 - 如何最大化显示工作表的界面第4课 - 给你的表格做个瘦身第5课 - 快速定位目标区域所在位置第6课 - 快速批量填充序号第7课 - 按自定义的序列排序第8课 - 快速删除空白行第…

MQ:延迟队列

6.1场景&#xff1a; 1.定时发布文章 2.秒杀之后&#xff0c;给30分钟时间进行支付&#xff0c;如果30分钟后&#xff0c;没有支付&#xff0c;订单取消。 3.预约餐厅&#xff0c;提前半个小时发短信通知用户。 A -> 13:00 17:00 16:30 延迟时间&#xff1a; 7*30 * 60 *…

使用 Python 标记具有相同名称的条目

如果大家想在 Python 中标记具有相同名称的条目&#xff0c;可以使用字典&#xff08;Dictionary&#xff09;或集合&#xff08;Set&#xff09;来实现。这取决于你们希望如何存储和使用这些条目。下面我将提供两种常见的方法来实现这个目标。 1、问题背景 在处理数据时&…

Linux上的可执行文件在Windows上是不能运行的

一、概要 1、可执行文件的格式 Linux上的可执行文件是elf格式的 Windows上的可执行文件是exe格式的 Linux上的可执行文件在Windows上是不能运行的 2、程序的普通构建与静态构建 普通构建&#xff1a; 一个.c文件&#xff0c;用gcc命令编译成可执行文件(程序)&#xff0c…

登陆qq,经常收到qq游戏中心的推送信息,关闭推送信息

手动关闭推送信息的步骤&#xff1a; 1.点开左侧游戏中心 2、在打开界面&#xff0c;点击左下角自己的头像 3、打开设置中心&#xff0c;关闭所有的推送 4、完成关闭&#xff0c;不会推送了

Elasticsearch8.x 设置密码

文章目录 一、环境说明二、使用elasticsearch-reset-password工具修改1、elasticsearch-reset-password工具位置2、设置密码 一、环境说明 elasticsearch版本&#xff1a;8.13.0 系统版本&#xff1a;Ubuntu 18.04.6 二、使用elasticsearch-reset-password工具修改 1、elast…

通讯录实现

实现通讯录可以采用顺序表&#xff0c;单链表&#xff0c;双链表等数据结构实现&#xff0c;所以我们需要先写出顺序表&#xff0c;单链表&#xff0c;双链表的代码实现。 顺序表&#xff1a; 定义&#xff1a;顺序表&#xff08;Sequence List&#xff09;是一种线性表的存储…

anaconda创建了虚拟python环境,且安装了pytorch,但是pycharm中import torch运行时报错

报错如下&#xff1a; C:\Users\tashi\.conda\envs\test1\python.exe D:\project\python\transformer\main.py C:\Users\tashi\.conda\envs\test1\lib\site-packages\numpy\__init__.py:127: UserWarning: mkl-service package failed to import, therefore Intel(R) MKL init…

【计算机网络】ip子网划分--超详细例题解析

Hello!这一篇主要是计算机网络中的ip地址子网划分的例题&#xff0c;这里例举了四个题型。保证即便从0也可以掌握&#xff01;(前面是一些预备知识&#xff0c;不熟悉的小伙伴一定要看下学习下哦&#xff5e;) 这也是博主的学习过程&#xff0c;做题中仅仅我的理解哦。若文章中…