当前位置: 首页 > news >正文

javaSE学习笔记(六)泛型,异常

五、泛型

泛型的由来:通过Object转型问题引入--为了解决安全隐患

早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换异常的问题

泛型作用

提高安全性(将运行期的错误转换到编译期)

省去强转的麻烦,取出数据不再是Object,不需要强转,能确定其类型

泛型基本使用

<>中放的必须是引用数据类型

前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)

不要定义成Object,因为没有意义

使用场景

泛型类:把泛型定义在类上

定义格式:public class 类名

泛型方法:把泛型定义在方法上

定义格式:public 返回类型 方法名(泛型类型 变量名)

泛型接口:把泛型定义在接口上

定义格式:public interface 接口名,implements接口时需要给定泛型

泛型通配符:表示任意类型,如果没有明确,那么就是Object以及任意的Java类了

? extends E:向下限定,E及其子类

? super E:向上限定,E及其父类

六、异常

概述

异常:Java程序在运行过程中出现的错误

分类:Error服务器宕机,数据库崩溃等;Exception

编译异常和运行异常

编译异常:因为程序编码存在问题,必须处理,否则无法通过编译

运行异常:运行时出现的问题,通常因为编码考虑不周导致

异常的继承体系

Throwable

        Error

        Exception

                RuntimeException

                ...

Throwable

Throwable是Exception的父类(继承体系)

常见方法

getMessage() //获取异常信息,返回字符串

toString() //获取异常类名和异常信息,返回字符串

printStackTrace() //获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void,jvm默认的处理方式也是这种

异常处理

jvm默认的异常处理方式

方法内出现异常,如果方法内没有进行处理,那么会将异常抛给调用者,如果到最后都没有处理会交由JVM处理

JVM默认是如何处理异常的:抛出一个异常对象,异常名称和信息输出到控制台,终止运行程序

异常只要在程序内进行了处理,后续代码仍然可以执行

编码处理方式一:try…catch…finally

try 检测异常

catch 捕获异常,并在catch方法体内进行处理

        catch可以有多个,针对不同异常进行不同处理

        try,但是不catch,那么异常仍然会向上抛出

finally 必要操作,如释放资源

注意事项:

1.try部分的代码,只要遇到第一个异常以后,就会寻求异常处理,处理异常以后,try部分的代码也不会执行,但会继续执行其他部分代码

2.jdk1.7以后,可以用 | 的形式用一个catch接受多种异常

finally关键字

作用:finally语句体一定会执行,除非在执行到finally之前jvm退出了(比如System.exit(0))

注意:finally在整个方法的return前执行,不过即使finally中操作了返回值相关的变量,也并不能改变最终return的值,但如果finally中做了return,那么显然本来要执行的return也就没有机会执行了

应用:用于释放资源,在IO流操作和数据库操作中常见

编码处理方式二:throws

应用:需要把方法异常交由调用者处理,就用throw把异常对象抛出,再通过throws在方法上标识,如果方法中声明了多种throw异常,那么throws也要多种,逗号隔开

throws和throw的区别

throws(通知调用者)

        用在方法声明后面,跟的是异常类名

        可以跟多个异常类名,用逗号隔开

        表示抛出异常,由该方法的调用者来处理

throw(通知本方法)

        用在方法体内,跟的是异常对象名

        只能抛出一个异常对象名

        指定异常并抛出,交由调用者处理,后续代码不再继续执行

自定义异常

作用:适应具体的业务场景,比如人的年龄超过200岁,抛出异常年龄错误

创建自定义异常类:

继承Exception,要throws

继承RuntimeException,可以不throws(通常不这么干)

异常的注意事项

子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类(父亲坏了,儿子不能比父亲更坏)

如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常

如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

相关文章:

javaSE学习笔记(六)泛型,异常

五、泛型 泛型的由来&#xff1a;通过Object转型问题引入--为了解决安全隐患 早期的Object类型可以接收任意的对象类型&#xff0c;但是在实际的使用中&#xff0c;会有类型转换异常的问题 泛型作用 提高安全性(将运行期的错误转换到编译期) 省去强转的麻烦&#xff0c;取…...

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发006:基于redis查找玩家姓名+游戏业务实现总结

文章目录 1 Redis的安装与API的使用1.1 安装目录及环境变量1.2 设置远程客户端连接和守护进程1.3 启动redis1.4 Hiredis API的使用1.5 我的动态库和头文件 2 Redis的使用2.1 初始化时候2.2 结束的时候 3 测试4 Makefile5 游戏业务总结 1 Redis的安装与API的使用 1.1 安装目录及…...

数字政府!3DCAT实时云渲染助推上海湾区数字孪生平台

数字孪生&#xff0c;是一种利用物理模型、传感器数据、运行历史等信息&#xff0c;在虚拟空间中构建实体对象或系统的精确映射&#xff0c;从而实现对其全生命周期的仿真、优化和管理的技术。数字孪生可以应用于各个领域&#xff0c;如工业制造、智慧城市、医疗健康、教育培训…...

react之Component存在的2个问题

问题 只要执行setState()&#xff0c;即使不改变状态数据&#xff0c;组件也会重新render()只当前组件重新render()&#xff0c;就会自动重新render子组件 原因 Component中的shouldComponentUpdate()总是返回true 思路 只有当组件的state或props数据发生改变时才重新rend…...

【论文阅读】Generating Radiology Reports via Memory-driven Transformer (EMNLP 2020)

资料链接 论文原文&#xff1a;https://arxiv.org/pdf/2010.16056v2.pdf 代码链接&#xff08;含数据集&#xff09;&#xff1a;https://github.com/cuhksz-nlp/R2Gen/ 背景与动机 这篇文章的标题是“Generating Radiology Reports via Memory-driven Transformer”&#xf…...

IP协议相关技术

文章目录 IP协议相关技术仅凭IP无法完成通信DNSARP IP协议相关技术 仅凭IP无法完成通信 人们在上网的时候其实很少直接输入某个具体的IP地址。 在访问Web站点和发送、接收电子邮件时&#xff0c;我们通常会直接输入Web网站的地址或电子邮件地址等那些由应用层提供的地址&…...

Visual Studio2022安装教程【图文详解】(大一小白)编译软件

工欲善其事&#xff0c;必先利其器。想要学好编程&#xff0c;首先要把手中的工具利用好&#xff0c;今天小编教一下大家如何下载安装并使用史上最强大的编译器--Visual Studio&#x1f357; 一.Visual Studio下载及安装 https://visualstudio.microsoft.com/ 打开文件 点击.ex…...

matlab 点云最小二乘拟合平面(PCA法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、算法原理 见:matlab 点云最小二乘拟合平面(PCA法详细过程版)。 二、代码实现 clc;clear; %% --------...

socks5代理和https代理有什么不同?各自有哪些优点?

socks5代理和https代理是两种不同的代理服务&#xff0c;它们在实现方式、安全性和协议特点等方面存在差异。下面我们来详细了解一下这两种代理的优点。 一、socks5代理的优点 1. 速度快 socks5代理采用了TCP协议&#xff0c;能够有效地减少网络延迟和数据传输速度慢的问题&…...

springboot,spring框架返回204 status code的时候,会吞掉返回值

背景 发现有个有意思的现象&#xff0c;就是当你的接口返回204的 HTTP status code 的时候&#xff0c;会自动把 response body 吃掉&#xff0c;即使代码里是有返回的。例如 &#xff08;其实204本身就是NO_CONTENT的意思&#xff0c;不过我是真没想到真干掉了返回&#xff0…...

6-爬虫-scrapy解析数据(使用css选择器解析数据、xpath 解析数据)、 配置文件

1 scrapy解析数据 1.1 使用css选择器解析数据 1.2 xpath 解析数据 2 配置文件 3 整站爬取博客–》爬取详情–》数据传递 scrapy 爬虫框架补充 # 1 打码平台---》破解验证码-数字字母&#xff1a;ddddocr-计算题&#xff0c;滑块&#xff0c;成语。。。-云打码&#xff0c;超…...

idea 一直卡在maven正在解析maven依赖

修改maven Importing的jvm参数 -Xms1024m -Xmx2048m...

警告:未配置spring boot 配置注解处理器

前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 问题 我再使用ConfigurationProperties(prefix “redisson”)去加载配置文件中的属性的时候&#xff0c;发现idea有个警告 并且配…...

详解虚拟DOM的原理

Virtual DOM&#xff08;虚拟DOM&#xff09;是一种编程概念&#xff0c;它是对真实DOM的轻量级抽象表示。在前端开发中&#xff0c;直接操作真实DOM是昂贵的&#xff0c;尤其是当涉及到大量的DOM更新时。Virtual DOM的出现&#xff0c;为优化和提高Web应用的性能提供了一个有效…...

开设自己的网站系类03安装数据库(centos版)

编者买了一个服务器打算自己构建一个网站&#xff0c;用于记录生活。网站大概算是一个个人博客吧。记录创建过程的一些步骤。 前面已经讲过配置服务器的程序运行环境 网站运行还需要数据库&#xff0c;本篇文章则是安装数据库的内容。 卸载mariadb 查看是否有安装 mariadb&…...

Flutter StreamBuilder 实现局部刷新 Widget

Stream 就是事件流或者管道&#xff0c;是基于事件流驱动设计代码&#xff0c;然后监听订阅事件&#xff0c;并针对事件变换处理响应。 Stream 分单订阅流和广播流,单订阅流在发送完成事件之前只允许设置一个监听器&#xff0c;并且只有在流上设置监听器后才开始产生事件&…...

【代码随想录】算法训练营 第十六天 第六章 二叉树 Part 3

104. 二叉树的最大深度 题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 思路 用递归来做&#xff0c…...

【C++数据结构】顺序存储结构的抽象实现

文章目录 前言一、目标二、SeqList实现要点三、SeqList函数实现3.1 get函数3.2 set函数3.3 insert函数带2个参数的insert带一个参数的insert 3.4 remove函数3.5 clear函数3.6 下标运算符重载函数无const版本const版本 3.7 length函数 总结 前言 当谈到C数据结构时&#xff0c;…...

LeetCode75——Day31

文章目录 一、题目二、题解 一、题目 206. Reverse Linked List Given the head of a singly linked list, reverse the list, and return the reversed list. Example 1: Input: head [1,2,3,4,5] Output: [5,4,3,2,1] Example 2: Input: head [1,2] Output: [2,1] Exa…...

小白学爬虫:通过商品ID或商品链接封装接口获取淘宝商品销量数据接口|淘宝商品销量接口|淘宝月销量接口|淘宝总销量接口

淘宝商品销量接口是淘宝开放平台提供的一种API接口&#xff0c;通过该接口&#xff0c;商家可以获取到淘宝平台上的商品销量数据。使用淘宝商品销量接口的步骤如下&#xff1a; 1、在淘宝开放平台注册并创建应用&#xff0c;获取API Key和Secret Key等必要的信息。 2、根据淘宝…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...