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…

Java23种设计模式理解----创建型模式

工厂模式 我要实现一个发送邮件的功能&#xff0c;一开始我想着是准备用QQ邮箱去发送&#xff0c;于是我在项目消息通知模块定义了一个类 package com.hwq.message;/*** author huangwq* date 2024/4/12* description 描述*/ public class QQMailService {public boolean sen…

UE5+GIS技术应用场景介绍

随着科技的不断发展,虚幻引擎(Unreal Engine)和地理信息系统(Geographic Information System,GIS)技术在众多领域得到了广泛的应用。虚幻引擎5(UE5)作为一款功能强大的实时3D创作工具,与GIS技术的结合,为各行各业带来了前所未有的创新。 一、UE5与GIS的结合方式主要…

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

一、接着上文 上文把部署情况介绍了&#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…

Lambda表达式保姆级教程详解(二)

本系列文章简介&#xff1a; Lambda表达式在现代编程语言中越来越流行&#xff0c;如Java、Python等。它是一种简洁、灵活的编码方式&#xff0c;能够使代码更易读、更易编写&#xff0c;同时提高代码的可维护性和扩展性。 Lambda表达式的引入使得函数式编程思想在传统的面向对…

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

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

博士找教职--经验贴

目录 一、如何寻找教职&#xff1f; 二、海投还是多投&#xff1f; 三、博士什么时候找工作最好&#xff1f; 为什么9月份开始最好&#xff1f; 四、论文没有出来可以9月找工作吗&#xff1f; 五、其他的一些嘱咐 一、如何寻找教职&#xff1f; 上必应键入关键词&#xf…

leetcode最长有效括号

. - 力扣&#xff08;LeetCode&#xff09; 32. 最长有效括号 困难 相关标签 相关企业 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号 子串 的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输…

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;有时候想要是有个和自己一模一样的人就…

springboot中常见的设计模式

Spring Boot&#xff0c;作为基于Spring框架的扩展&#xff0c;广泛应用了多种设计模式来简化企业级应用开发。以下是在Spring Boot中常见的一些设计模式&#xff1a; 1. 单例模式&#xff08;Singleton Pattern&#xff09; 这是Spring框架中最常用的模式之一。Spring容器默…