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.mzph.cn/news/813973.shtml

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

相关文章

Linux: 工具: tshark 抓到了收方向的ESP明文包?

根据这个描述&#xff0c;看着是正常的&#xff0c; 抓到包之后&#xff0c;可以方便的分析问题&#xff0c;省去在wireshark里解码的问题。 经过调查发现是内核将ESP解开之后&#xff0c;如果是tunnel模式&#xff0c;内核又重新将skb丢给了interface去做处理。这样tshark/tcp…

Java基础(三)--常用工具类

文章目录 第三章、常用工具类一、Java异常1、什么是异常2、异常处理3、常见的异常类型4、throws5、throw6、自定义异常7、异常链 二、包装类1、包装类2、字符串与基本数据类型转换3、包装类的比较 三、String 类1、创建String对象的方法2、String的常用方法3、字符串的存储4、字…

360安全卫士去除广告方法

大安全时代&#xff0c;360 安全卫士为您提供全面安全服务&#xff0c;电脑端下载&#xff1a; https://urlqh.cn/orQqc 在当今数字化时代&#xff0c;网络安全已成为人们日常生活中的重要关切。在这片浩瀚的网络海洋中&#xff0c;360安全卫士犹如一座坚不可摧的灯塔&#xf…

基于微信公众号,搭建一套简单的电商支付环境(下)-- 微信公众号的对接

一、接着上文 上文把部署情况介绍了&#xff0c;侧重于网络及代理&#xff0c;本文选择把微信公众号的对接实现介绍一下。 还是那句话&#xff0c;微信官方的文档已非常详细&#xff0c;这里先摘抄一些重要的概念。 其次&#xff0c;待对接微信公众号的接口众多&#xff0c;…

Qt | 视频播放器(multimedia、multimediawidgets)

QT +=multimedia 通俗解释: 此代码行告诉编译器在构建应用程序时包含多媒体库。这意味着您的应用程序将能够播放和显示音频和视频文件。 使用分步说明构建模型: 创建一个新的 Qt 项目。 在 .pro 文件中添加以下行: QT += multimedia 导入必要的多媒体头文件: #include &l…

普乐蛙VR航天体验馆设备VR太空飞船VR元宇宙展厅

三天小长假就要来啦&#xff01;五一假期也即将到来。老板们想捉住人流量这个财富密码吗&#xff1f;那快快行动起来&#xff01;开启VR体验项目&#xff0c;假期赚翻天&#xff01;小编亲测&#xff01;&#xff01;这款设备刺激好玩&#xff0c;想必会吸引各位家长小孩、学生…

java使用ShutdownHook优雅地停止服务

在Java程序中可以通过添加关闭钩子&#xff0c;实现在程序退出时关闭资源、平滑退出的功能。 使用Runtime.addShutdownHook(Thread hook)方法&#xff0c;可以注册一个JVM关闭的钩子&#xff0c;这个钩子可 这通常用于确保在应用程序退出时能够执行一些清理工作&#xff0c;比…

openssl3.2 - exp - zlib

文章目录 openssl3.2 - exp - zlib概述笔记命令行实现程序实现备注 - 压缩时无法base64压缩时无法带口令压缩实现 - 对buffer进行压缩和解压缩测试效果工程实现main.cppCOsslZlibBuffer.hCOsslZlibBuffer.cpp总结备注 - 解压可以替代完整性校验备注 - 多次压缩没作用备注 - 和7…

海外媒体发稿:探究7个旅游业媒体套餐背后的秘密-华媒舍

旅游业媒体套餐对于旅游行业来说扮演着重要的角色&#xff0c;帮助企业在竞争激烈的市场中宣传推广&#xff0c;吸引更多的游客。在这篇文章中&#xff0c;我们将深入探究7个旅游业媒体套餐背后的秘密&#xff0c;为您揭示其真正的价值和影响。 1. 平台选择的关键 在选择旅游业…

spring boot学习第十七篇:OAuth2概述及使用GitHub登录第三方网站

0. 导言 我们在浏览器上可以访问成百上千个网站&#xff0c;使用每个网站的服务一般都要先注册账号&#xff0c;那么我们为了更好地记忆&#xff0c;一般都会在多个网站使用相同的账号和密码进行注册。那么问题就来了&#xff0c;如果在你注册的网站中有某些个网站的系统设计不…

CentOS7里ifcfg-eth0文件不存在解决方案/Centos7修改网络IP解决方案

Centos7网络IP地址手动设置 1、centos7没有ifcfg-eth0&#xff0c;我的centos7也没有其他博客说的什么ifcfg-ens33、ifcfg-ens32&#xff0c;然后我打开了我这里的ifcfg-eno***&#xff0c;结果发现就是centos6里的ifcfg-eth0里的网络配置。2、vim ifcfg-eno***&#xff08;按t…

202203青少年软件编程(Scratch图形化) 等级考试试卷(四级)

第1题&#xff1a;【 单选题】 由1,2,3,4,5,0这六个数字经过排列组合能够组成多少个六位数偶数&#xff1f; 注意&#xff1a; 每一位都不相同&#xff0c; 最高位不能为0。&#xff08; &#xff09; A:720 B:360 C:312 D:88 【正确答案】: C 【试题解析】 : 逻辑知识…

10分钟带你学会配置DNS服务正反向解析

正向解析 服务端IP客户端IP网址192.168.160.134192.168.160.135www.openlab.com 一、首先做准备工作&#xff1a; 关闭安全软件&#xff0c;关闭防火墙&#xff0c;下载bind软件 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootserver ~]# y…

【C++程序员的自我修炼】拷贝构造函数

心存希冀 追光而遇目有繁星 沐光而行 目录 拷贝构造函数概念 拷贝构造的特征 无穷递归的解释 浅拷贝 总结&#xff1a; 深拷贝 拷贝构造函数典型调用场景 总结 契子✨ 在生活中总有很多琐事&#xff0c;不做不行做了又怕麻烦&#xff0c;有时候想要是有个和自己一模一样的人就…

每日一题 第八十九期 洛谷 [NOIP2017 提高组] 奶酪

[NOIP2017 提高组] 奶酪 题目背景 NOIP2017 提高组 D2T1 题目描述 现有一块大奶酪&#xff0c;它的高度为 h h h&#xff0c;它的长度和宽度我们可以认为是无限大的&#xff0c;奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系&#xff0c;在坐标系…

Go——面向对象

一. 匿名字段 go支持只提供类型而不写字段名的方式&#xff0c;也就是匿名字段&#xff0c;也称为嵌入字段。 同名字段的情况 所以自定义类型和内置类型都可以作为匿名字段使用 指针类型匿名字段 二.接口 接口定义了一个对象的行为规范&#xff0c;但是定义规范不实现&#xff…

Matlab之过球面一点的平面方程

这篇文章描述2件事情&#xff1a; 1、已知球面上任意点&#xff0c;求过该点、地心、与北极点的平面方程&#xff08;即过该点的经线平面方程&#xff09;&#xff1b; 2、绕过球心的任意轴旋转平面得到新平面的方程 一、已知球面上任意点&#xff0c;求过该点、地心、与北极点…

javase_进阶 day10 集合(泛型,数据结构)

1.泛型 1.1泛型概述 泛型的介绍 ​ 泛型是JDK5中引入的特性&#xff0c;它提供了编译时类型安全检测机制 泛型的好处 把运行时期的问题提前到了编译期间避免了强制类型转换 泛型的定义格式 <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如:…

CopyTranslator下载地址及安装教程

CopyTranslator是一款免费且开源的机器翻译工具&#xff0c;旨在提供快速、便捷的翻译服务。它采用了先进的神经网络机器翻译技术&#xff0c;能够提供准确、流畅的翻译结果。 CopyTranslator的特点和功能如下&#xff1a; 多语言翻译&#xff1a;支持多种常见的语言对&#…

【随笔】Git 高级篇 -- 项目里程碑 git tag(二十)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…