Java基础知识(9)

Java基础知识(9)

(包括:方法引用,异常)

目录

Java基础知识(9)

一. 方法引用

1. 方法引用基础

2. 方法引用的分类

(1)引用静态方法

(2)引用成员方法

(3)引用构造方法

(4)其他调用方式

3. 引用静态方法

4. 引用成员方法

(1)格式:对象::成员方法

5. 引用构造方法

6. 方法引用(类名引用成员方法)

(1)格式

(2)方法引用的规则:(这个特有的)

(3)抽象方法形参的详解:

7. 引用数组的构造方法

二.异常

1.异常基础

(1)异常就是代表程序出现的问题

(2)异常结构

(3)小结

(4)运行时异常和编译时异常的区别

2. 异常的作用

3. 异常的处理方式

4.JVM默认的处理方式

5.自己处理

(1)格式:

(2)目的:当代码出现异常时可以让程序继续往下执行。

(3)例如:

(4)灵魂四问

(5)Throwable 的成员方法

6. 抛出异常(抛出处理)

(1)throws

(2)throw

7. 自定义异常


一. 方法引用

1. 方法引用基础

(1)把已经有的方法拿过来用,当做函数式接口中抽象方法的方法体

(2)引用处必须是函数式接口

(3)被引用的方法必须已经存在(以是Java已经写好的,也可以是一些第三方的工具类,自己写的也可以)

(4)被引用方法的形参和返回值需要跟抽象方法保持一致

(5)被引用方法的功能要满足当前需求

(6)例子

Arrays.sort(arr,new comparator<Integer>){

@Override

public int compare(Integer o1,Integer o2){

return o2-01;

}

});

public int subtraction(int n1,int n2){

return n2 -n1;

}

此处sort可以引用subtraction方法

Arrays.sort(arr,FunctionDemo1::subtraction);

//‘::’表示引用FunctionDemo1类里面的subtraction方法,是方法引用符

//把这个方法当做抽象方法的方法体 

2. 方法引用的分类

(1)引用静态方法
(2)引用成员方法

1)引用其他类的成员方法

2)引用本类的成员方法

3)引用父类的成员方法

(3)引用构造方法
(4)其他调用方式

1)使用类名引用成员方法

2)引用数组的构造方法

3. 引用静态方法

(1)格式:类名::静态方法

(2)范例:Integer::parseInt

4. 引用成员方法

(1)格式:对象::成员方法

1)其他类:其他类对象::方法名

2)本类:this::方法名

3)父类:super::方法名

list.stream().filter(new FunctionDemo3()::stringJudge)

.forEach(s->System.out.println(s));

静态方法中是没有this,super的,也得这样写。

5. 引用构造方法

(1)格式:类名::new

范例:Student::new

list.stream().map(Student::new).collect(Collectors.tolist());

public student(string str){

String[]arr =str.split(regex",");

this.name = arr[0];

this.age = Integer.parseInt(arr[1]);

}(构造方法不需要写返回值)

6. 方法引用(类名引用成员方法)

(1)格式

类名::成员方法

(2)方法引用的规则:(这个特有的)

1)需要有函数式接口

2)被引用的方法必须已经存在

3)被引用方法的形参,需要跟抽象方法的第二个形参到最后一个形參保持一致,返回值需要保持一致。

4)被引用方法的功能需要满足当前的需求

(3)抽象方法形参的详解:

1)第一个参数:表示被引用方法的调用者,决定了可以引用哪些类中的方法

在stream流当中,第一个参数一般都表示流里面的每一个数据。

假设流里面的数据是字符串,那么使用这种方式进行方法引用,只能引用string这个类中的方法

2)第二个参数到最后一个参数:跟被引用方法的形參保持一致,如果没有第二个参数,说明被引用的方法需要是无参的成员方法

list.stream().map(string::toUpperCase).forEach(s->System.out.printIn(s));

3) 局限性:

不能引用所有类中的成员方法,是跟抽象方法的第一个参数有关,这个参数是什么类型的,那么就只能引用这个类中的方法。

7. 引用数组的构造方法

(1)格式:数据类型[]::new

范例:int[]::new

(2) 细节:

数组的类型,需要跟流中数据的类型保持一致。

Integer[]arr2 =list.stream().toArray(Integer[]::new);

二.异常

1.异常基础

(1)异常就是代表程序出现的问题
(2)异常结构

Java.lang.Throwable

Error

Exception

RuntimeException

其他异常

NullPointerException

ArithmeticException

ArrayIndexOutOfBoundsException

等等

1)Error:

代表的系统级别错误(属于严重问题)

系统一旦出现问题,sun公司会把这些错误封装成E7ror对象

Error是给sun公司自己用的,不是给我们程序员用的,因此我们开发人员不用管它。

2)Exception:

叫做异常,代表程序可能出现的问题。

我们通常会用Exception以及他的子类来封装程序出现的问题。

①运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒。

运行时出现的异常(如:数组索引越界异常)

②编译时异常:编译阶段就会出现异常提醒的。(如:日期解析异常)

(3)小结

1)异常是什么?

程序中可能出现的问题

2)异常体系的最上层父类是谁?异常分为几类?

父类:Exception。

异常分为两类:编译时异常、运行时异常

3)编译时异常和运行时异常的区别?

编译时异常:没有继承RuntimeExcpetion的异常,直接继承于Excpetion。

编译阶段就会错误提示

运行时异常:RuntimeException本身和子类,

编译阶段没有错误提示,运行时出现的

(4)运行时异常和编译时异常的区别

1)编译时异常:除了RuntimeExcpetion和他的子类,其他都是编译时异常

编译阶段需要进行处理,作用在于提醒程序员

2)运行时异常:RuntimeException本身和所有子类,都是运行时异常,

编译阶段不报错,是程序运行时出现的,一般是由于参数传递错误带来的问题

2. 异常的作用

(1)作用一:异常是用来查询bug的关键参考信息

(2)作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况(主动抛出异常)

3. 异常的处理方式

(1)JVM默认的处理方式

(2)自己处理

(3)抛出异常

4.JVM默认的处理方式

(1)把异常的名称,异常原因及异常出现的位置等信息输出在了控制台

(2)程序停止执行,下面的代码不会再执行了

5.自己处理

(1)格式:

try{

可能出现异常的代码;

}catch(异常类名 变量名){

异常的处理代码;

}finally {

}

特点:finally里面的代码一定被执行,除非虚拟机停止

(2)目的:当代码出现异常时可以让程序继续往下执行。
(3)例如:

int[]arr={1,2,3,4,5,6};

try{

//可能出现异常的代码;

System.out.printin(arr[10]);//此处出现了异常,程序就会在这里创建一个ArrayIndexoutofBoundsException对象

//new ArrayIndexOutofBoundsException();

//拿着这个对象到catch的小括号中对比,看括号中的变量是否可以接收这个对象

//如果能被接收,就表示该异常就被捕获(抓住),执行 catch里面对应的代码

//当catch里面所有的代码执行完毕,继续执行try...catch体系下面的其他代码

}catch(ArrayIndexOutOfBoundsException e)

//如果出现了ArrayIndex0utOfBoundsException异常,我该如何处理

System.out.println("紫引越界了”);

}

System.out.println("看看我执行了吗?");

(4)灵魂四问

①灵魂一问:如果try中没有遇到问题,怎么执行?

会把try里面所有的代码全部执行完毕,

不会执行catch里面的代码

②灵魂二问:如果try中可能会遇到多个问题,怎么执行?

会写多个catch与之对应

父类异常需要写在下面

了解性:在JDK7之后,我们可以在catch中同时捕获多个异常,中间用|进行隔开,表示如果出现了A异常或者B异常的话,采取同一种处理方案

③灵魂三问:如果try中遇到的问题没有被捕获,怎么执行?

相当于try..catch白写了,当前异常会交给虚拟机处理

④灵魂四问:如果try中遇到了问题,那么try下面的其他代码还会执行吗?

不会执行了。try中遇到问题,直接跳转到对应的catch

如果没有对应的catch与之匹配,则交给虚拟机处理

(5)Throwable 的成员方法

1)public string getMessage() 返回此 throwable 的详细消息字符串

2)public string tostring() 返回此可抛出的简短描述

3)public void printStackTrace() 把异常的错误信息输出在控制台

(细节:仅仅是打印信息,不会停止程序运行。最常用)

6. 抛出异常(抛出处理)

(1)throws

1)注意:

写在方法定义处,表示声明一个异常

告诉调用者,使用本方法可能会有哪些异常

2)格式:public void 方法()throws 异常类名1,异常类名2...{

}

编译时异常:必须要写

运行时异常:可以不写。

(2)throw

1)注意:

写在方法内,结束方法

手动抛出异常对象,交给调用者

方法中下面的代码不再执行了

2)格式:public void 方法(){

throw new NullPointerException();

}

3) 抛出是为了告诉调用者出错了

捕获是为了不让程序停止

7. 自定义异常

(1)定义异常类

(2)写继承关系

(3)空参构造

(4)带参构造

(5)意义:就是为了让控制台的报错信息更加的见名之意

(6)投巧:

//NameFormat:当前异常的名字,表示姓名格式化问题

//Exception:表示当前类是一个异常类

//运行时:RuntimeException 核心 表示由于参数错误而导致的问题

//编译时:Exception 核心 提醒程序员检查本地信息

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

将AI融入项目开发工作中去吧

目录 1.提高编写开发日报的效率 2.提高编写代码注释的效率 3.提高代码重构的效率 4.编写测试用例及测试报告 5. 协助进行代码走查与工作量分析 在AI元年后&#xff0c;作为一名程序员&#xff0c;相信各位友友已经深切地感受到了它带来的变革。作为一个从小白到资深码农的…

canvas识别路线

theme: jzman 视频说明 jvideo 前言 效果一 技术栈 htmljavascriptcsscanvas 项目主要功能上传一张地图&#xff0c;或者迷宫地图&#xff0c;通过canvas的一系列操作&#xff0c;并指定一个起点和终点&#xff0c;并找到到达终点最近的路线 迷宫找出口效果 正文 加载图像 首先…

芋道系统springcloud模块启动报错,枚举类不能为空

问题描述&#xff1a; Error starting ApplicationContext. To display the conditions report re-run your application with debug enabled. 2024-05-10 15:50:15.756 | ERROR 9120 | main [TID: N/A] o.s.b.d.LoggingFailureAnalysisReporter | ************************…

【C++】详细版 RAII技术的应用之智能指针(智能指针发展历程和简单模拟实现介绍)

目录 前言 一、智能指针有什么用&#xff1f; 二、什么是RAII(智能指针的底层思想)&#xff1f; 三、智能指针的发展历程以及模拟实现 1.auyo_ptr&#xff08;C98&#xff09; 2.unique_ptr&#xff08;C11&#xff09; 3.shared_ptr&#xff08;C11&#xff09; 前言 C中…

面向对象 03:类与对象的创建、初始化和使用,通过 new 关键字调用构造方法,以及创建对象过程的内存分析

一、前言 记录时间 [2024-05-10] 系列文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 11&#xff1a;Java 方法相关内容&#xff0c;方法的设计原则&#xff0c;以及方法的定义和调用 面向对象 01&#xff1a;Java 面向对…

使用com.google.common.collect依赖包中的Lists.transform()方法转换集合对象之后,修改集合中的对象属性,发现不生效

目录 1.1、错误描述 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;模拟代码 &#xff08;3&#xff09;运行结果 1.2、解决方案 1.1、错误描述 最近在开发过程中&#xff0c;使用到了com.google.common.collect依赖包&#xff0c;通过这个依赖包中提供的…

4D 成像毫米波雷达:新型传感器助力自动驾驶

1 感知是自动驾驶的首要环节&#xff0c;高性能传感器必不可少 感知环节负责对侦测、识别、跟踪目标&#xff0c;是自动驾驶实现的第一步。自动驾驶的实现&#xff0c;首先要能够准确理解驾驶环境信息&#xff0c;需要对交通主体、交通信号、环境物体等信息进行有效捕捉&#x…

2024-AIDD-人工智能药物设计-AlphaFold3

AlphaFold3&#xff5c;万字长文解读 AlphaFold3预测所有分子相互作用准确结构 AlphaFold3 自2021年AlphaFold2问世以来&#xff0c;科研工作者们便开始利用这一蛋白结构预测模型来详细描绘众多蛋白质的结构、探索新药。近日&#xff0c;Google DeepMind公司推出了其最新产品…

[附源码]石器时代_恐龙宝贝内购版_三网H5手游_带GM工具

石器时代之恐龙宝贝内购版_三网H5经典怀旧Q萌全网通手游_Linux服务端源码_视频架设教程_GM多功能授权后台_CDK授权后台 本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff0…

《Python编程从入门到实践》day24

# 昨日知识点学习 创建外星人从一个到一行 # 主程序snipdef _create_fleet(self):"""创建外星人群"""# 创建一个外星人并计算一行可容纳多少个外星人# 外星人的间距为外星人的宽度alien Alien(self)alien_width alien.rect.widthavailable_sp…

Android 屏幕适配全攻略(上)-掌握屏幕单位,应对千变万化的设备

本文从 Android 开发中常见的长度单位 px、dp、sp 入手&#xff0c;详细介绍了它们的特点及转换关系。 接着深入探讨了屏幕尺寸、分辨率、像素密度等重要的屏幕指标&#xff0c;帮助读者全面理解它们之间的联系。最后&#xff0c;通过实例代码演示了如何在代码中进行单位转换&…

从头开始的建材类电商小程序开发指南

在当今数字化时代&#xff0c;小程序已经成为了许多企业推广和销售的重要渠道。对于建筑材料行业来说&#xff0c;开发一个属于自己的小程序商城不仅可以提升产品曝光度&#xff0c;还可以提供更好的用户购物体验。下面&#xff0c;我们将逐步教你如何开发建筑材料行业小程序。…

【c++算法篇】双指针(下)

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;算法笔记仓 朋友们大家好啊&#xff0c;本篇文章我们来到算法的双指针的第二部分 目录 1.有效三角形的个数2.查找总价格为目标值的两个商品3.三数之和4.四数之和5.双指针常见场景总结 1.有效三角形…

【Linux】Linux——Centos7安装Nginx

不需要安装包 1.安装依赖 #查看 C 环境是否安装gcc -v #查看 zlib 是否安装cat /usr/lib64/pkgconfig/zlib.pc #查看 pcre 是否安装pcre-config --version 2.安装C #安装C yum install gcc-c 3.安装pcre yum install -y pcre pcre-devel 4.安装zlib #安装 yum install -y zlib…

西米支付:数字藏品元宇宙的介绍与骗局套路解析

一、什么是元宇宙&#xff1f; 元宇宙是一个集体虚拟共享空间&#xff0c;由虚拟增强的物理现实和物理持久的虚拟空间融合而创造&#xff0c;包括所有虚拟世界、增强现实和互联网的总和。简单地说&#xff0c;元宇宙是Web3.0时期的数字世界。 这类新兴概念被非法分子包装后&am…

libssh C++封装之六(Dir)

1 概述 libssh是一个在客户端和服务器端实现SSHv2协议的多平台C库。使用libssh,您可以远程执行程序、传输文件、使用安全透明的隧道、管理公钥等等。本文描述的对libssh客户端功能的C++封装。 libssh下载地址 3 实现 3.5 Dir Dir类型管理远程路径,通过SFTP和Channel实现(有…

Java入门基础学习笔记14——数据类型转换

类型转换&#xff1a; 1、存在某种类型的变量赋值给另一种类型的变量&#xff1b; 2、存在不同类型的数据一起运算。 自动类型转换&#xff1a; 类型范围小的变量&#xff0c;可以直接赋值给类型范围大的变量。 byte类型赋值给int类型&#xff0c;就是自动类型转换。 pack…

20240503安装HEVC解码器播放H265格式的8K视频

20240503安装HEVC解码器播放H265格式的8K视频 2024/5/3 9:55 缘起&#xff1a;由于youtube支持8K视频了&#xff0c;想尝尝鲜&#xff01; 主摄像头当然是选择SONY的【夜摄/弱光场景】&#xff0c;根据优选&#xff0c;小米&#xff08;MI&#xff09;13Ultra 最佳了。 在开始播…

什么是SOL链跟单机器人与阻击机器人?

SOL链作为一个快速增长的区块链生态系统&#xff0c;为各种应用程序提供了丰富的发展机会。在SOL链上&#xff0c;智能合约的应用已经开始蓬勃发展&#xff0c;其中包括了许多与加密货币交易相关的应用。在本文中&#xff0c;我们将介绍在SOL链上开发的阻击机器人&#xff08;S…
最新文章