服装网站建设准备/上海今天发生的重大新闻
一、异常与异常处理
1. 异常简介
在Java中,**异常是程序在执行过程中出现的问题或意外情况,导致程序无法按照预期的流程进行。**异常处理是Java中用于处理程序中出现的异常的一种机制。
Java中的异常可以分为两大类:受检查的异常(Checked Exceptions)和未受检查的异常(Unchecked Exceptions)。
1. 受检查的异常(Checked Exceptions):这些异常在编译时会被检查,必须显式地处理它们。例如,IOException、ClassNotFoundException等。
如果一个方法可能会抛出受检查的异常,那么该方法要么必须通过try-catch块来捕获并处理该异常,要么必须在方法签名中使用throws关键字来声明该异常。
try { // 可能会抛出IOException的代码
} catch (IOException e) { // 处理IOException的代码
}
2. 未受检查的异常(Unchecked Exceptions):这些异常在编译时不会进行检查,它们通常表示程序中的逻辑错误或运行时错误。例如,NullPointerException、ArrayIndexOutOfBoundsException等。如果一个方法可能会抛出未受检查的异常,那么该方法不需要在方法签名中使用throws关键字来声明该异常。
try { // 可能会抛出NullPointerException的代码
} catch (NullPointerException e) { // 处理NullPointerException的代码
}
除了try-catch块外,Java还提供了其他几种异常处理机制,包括:
- throws关键字:用于声明一个方法可能会抛出哪些受检查的异常。
- finally块:无论try块中是否发生异常,finally块中的代码都会执行。通常用于资源的清理操作,如关闭文件、数据库连接等。
- throw关键字:用于在方法内部手动抛出异常。当程序中发生异常时,可以使用throw关键字抛出异常,然后将其传递给调用该方法的代码进行处理。
- Java标准库中提供的多种异常类:Java标准库中提供了许多预定义的异常类,如IOException、SQLException等。这些异常类可以用于表示各种不同的错误情况,并且可以自定义新的异常类来表示应用程序特有的错误情况。
2.异常处理
在Java中,我们使用try-catch-finally语句块来处理异常。
try块包含可能会引发异常的代码,catch块用于捕获并处理特定的异常,而finally块包含的代码无论是否发生异常都会执行。
下面是一个简单的例子:
public class Main { public static void main(String[] args) { try { // 可能会引发异常的代码 int result = divide(10, 0); System.out.println("The result is " + result); } catch (ArithmeticException e) { // 处理特定的异常 System.out.println("Cannot divide by zero!"); } finally { // 无论是否发生异常都会执行的代码 System.out.println("This code is executed in every case."); } } public static int divide(int a, int b) { if (b == 0) { throw new ArithmeticException("Divisor cannot be zero"); } return a / b; }
}
结论:在这个例子中,我们有一个方法divide,如果除数为0,它会抛出一个ArithmeticException。在main方法中,我们调用divide方法,并使用try-catch-finally语句块来处理可能发生的异常。
- 如果除数不为0,那么程序会正常执行,并打印出结果。
- 如果除数为0,那么会触发ArithmeticException,程序会跳到catch块,打印出"Cannot divide by zero!"。
- 无论是否发生异常,finally块中的代码都会执行,打印出"This code is executed in every case."。
注意:如果可能抛出多个异常类型,你可以添加多个catch块来处理不同的异常。例如:
try { // 可能会引发多种异常的代码
} catch (ArithmeticException e) { // 处理ArithmeticException
} catch (NullPointerException e) { // 处理NullPointerException
} finally { // 无论是否发生异常都会执行的代码
}
3.异常抛出与自定义异常
在Java中,当一个方法遇到错误条件时,它会抛出一个异常。这是通过使用throw关键字完成的。
public class Main { public static void main(String[] args) { try { // 创建一个新的Exception异常并抛出throw new Exception("自定义异常"); }// 捕捉异常 catch (Exception e) { e.printStackTrace(); } }
}
自定义异常,你也可以创建自定义的异常类,这通常是通过继承Exception类或其子类来完成的。下面是一个自定义异常的例子:在这个例子中,我们创建了一个新的MyException类,它继承了Exception类。然后我们在try-catch块中抛出并捕获这个自定义异常。
class MyException extends Exception { public MyException(String message) { super(message); }
} public class Main { public static void main(String[] args) { try { throw new MyException("这是一个自定义异常"); } catch (MyException e) { e.printStackTrace(); } }
}
4. 异常链
在Java中,异常链(Exception chaining)是一种机制,通过它可以将一个异常与导致它的异常(或多个异常)关联起来。
作用:提高了代码的可维护性和可读性。详细如下几点
- 提供更多的上下文信息:通过将多个异常关联在一起,可以提供关于异常发生时的更多上下文信息。这有助于更准确地诊断和解决问题。
- 追踪异常来源:通过使用异常链,可以在处理异常时更方便地追踪异常的来源。这有助于确定问题的根本原因,以及如何采取适当的措施来避免或解决该问题。
- 简化异常处理:异常链使开发人员能够将多个异常处理逻辑集中在一个地方,而不是为每个异常单独编写处理代码。这有助于简化异常处理逻辑,并提高代码的可维护性。
- 提供更详细的错误报告:通过将多个异常关联在一起,可以提供更详细的错误报告。这有助于开发人员更好地理解问题的性质和范围,从而能够更快地解决问题。
实现:
异常链可以通过Throwable类的initCause(Throwable cause)方法实现。该方法允许在创建新的异常时,将一个已存在的异常作为原因(cause)与它关联起来。
这样,在捕获并处理异常时,我们可以使用Throwable类的getCause()方法获取导致当前异常的原始异常。
public class ExceptionChainExample { public static void main(String[] args) { try { // 引发第一个异常 throw new Exception("First exception"); } catch (Exception e) { // 在第一个异常的基础上引发第二个异常 e = new Exception("Second exception", e); throw e; } }
}
在上面的代码中,我们首先抛出一个新的Exception对象,然后在捕获该异常时,我们创建一个新的Exception对象,并将原始的异常对象作为第二个参数传递给构造函数。这样,第二个异常就包含了导致它的原始异常。然后我们重新抛出这个新的异常。
当调用getCause()方法时,我们可以获取导致第二个异常的原始异常。
try { // 引发第一个异常 throw new Exception("First exception");
} catch (Exception e) { // 在第一个异常的基础上引发第二个异常 e = new Exception("Second exception", e); throw e;
} catch (Throwable t) { // 获取导致第二个异常的原始异常 Throwable cause = t.getCause(); System.out.println("Caused by: " + cause.getMessage());
}
例如在上面的代码中,我们捕获了第二个异常,并使用getCause()方法获取导致该异常的原始异常。然后我们打印出原始异常的消息。输出结果为:“Caused by: First exception”。
二、字符串-String
定义
在Java中,字符串是一种不可变的对象,用于表示文本数据。字符串是由零个或多个字符组成的序列。Java中的字符串通常用双引号括起来,表示该字符串是一个字符串字面值。
不变性
Java中的字符串具有不变性,是因为它们在结构上是不可变的。字符串字面值被编译成字符数组,而这个字符数组被存储在只读内存中。 通过将字符串实现为字符数组,Java可以在内存中高效地操作字符串。
由于字符串是不可变的,当对字符串执行操作时,实际上是创建了一个新的字符串,而不是修改原始字符串。例如,当我们对字符串进行连接、切割或替换操作时,Java会创建新的字符串来保存操作的结果。 这种实现方式可以避免因为修改字符串而产生不必要的性能开销。
总的来说,Java中的字符串之所以具有不变性,是因为其底层结构是基于字符数组实现的,并且操作字符串时是通过创建新的字符串来实现的。 这种设计可以提高内存使用效率,并增强字符串的安全性。
常用方法
Java中的字符串类String提供了许多常用的方法,以下是一些常用的方法:
- charAt(int index): 返回指定索引位置的字符。
- length(): 返回字符串的长度。
- substring(int beginIndex, int endIndex): 返回从beginIndex到endIndex之间的子字符串。
- indexOf(String substring): 返回子字符串第一次出现的索引,如果未找到则返回-1。
- lastIndexOf(String substring): 返回子字符串最后一次出现的索引,如果未找到则返回-1。
- equalsIgnoreCase(String anotherString): 比较两个字符串的内容是否相同,不区分大小写。
- startsWith(String prefix): 测试字符串是否以指定的前缀开始。
- endsWith(String suffix): 测试字符串是否以指定的后缀结束。
- replace(char oldChar, char newChar): 替换字符串中的所有指定字符为另一个字符。
- replaceAll(String regex, String replacement): 使用正则表达式替换字符串中的所有匹配项。
- toLowerCase(): 将字符串转换为小写。
- toUpperCase(): 将字符串转换为大写。
- trim(): 去除字符串两侧的空白字符和其他预定义的可忽略字符。
除了上述方法,String类还提供了许多其他方法,用于处理字符串的各种操作。另外,如果需要更高效的字符串操作,可以使用StringBuilder或StringBuffer类。
StringBuilder类
创建成功的字符串对象,长度是固定的,内容不能被改变与编译。虽然使用 + 运算符能够达到附加新字符或新字符串的目的,但是 + 运算符是产生一个新的String实例,创建一个新的字符串对象,如果大量的对字符串进行修改,会极大的增加系统开销。
例如:
StringBuilder类不是字符串,所以要创建StringBuilder类的对象,需要调用其构造方法。
可以传递以下参数进行构造。
格式:StringBuilder sb=new StringBuilder(参数);
StringBuilder sb=new StringBuilder("123");
如果需要将StringBuilder类值,转换为Stirng类值呢?StringBuilder提供了toString方法,会将StringBuilder对象内的值转换为字符串进行返回。
所以我们可以将需要对字符串进行大量修改的操作转移到StringBuilder内进操作,操作完毕后再将其转换为字符串。这样就节省了大量的内存空间,提高了运行效率。
三、常用类库
在Java中,基本类型的包装类是对应于基本数据类型的类。它们可以将基本类型转换为对象,以便在需要对象参数的场合使用。这些包装类包括:Integer、Double、Boolean等等。
1. 基本类型的包装类:
- 基本类型的包装类是将基本类型封装成对象,以便在需要对象参数的场合使用。
- 每个基本类型都有一个对应的包装类,例如Integer、Double、Boolean等。
- 包装类的主要作用是提供了一些方法来操作基本类型,例如将基本类型转换为字符串、进行算术运算等。
2. Date类:
- 基本类型的包装类是将基本类型封装成对象,以便在需要对象参数的场合使用。
- 每个基本类型都有一个对应的包装类,例如Integer、Double、Boolean等。
- 包装类的主要作用是提供了一些方法来操作基本类型,例如将基本类型转换为字符串、进行算术运算等。
3. SimpleDateFormat类:
- SimpleDateFormat类是一个日期时间格式化类,它可以将日期时间对象转换为字符串,也可以将字符串解析为日期时间对象。
- 你可以使用SimpleDateFormat类的构造方法创建一个格式化对象,并指定日期时间的格式。
- SimpleDateFormat类提供了一些方法来格式化日期时间,例如format()方法将日期时间对象格式化为字符串。
- 另外,SimpleDateFormat类还提供了一些方法来解析字符串为日期时间对象,例如parse()方法将字符串解析为Date对象。
4. Calendar类:
- Calendar类是Java的日期时间辅助类,它提供了一种方便的方式来处理日期和时间。
- Calendar类提供了一些静态常量来表示日期和时间的各个部分,例如ERA、YEAR、MONTH、DAY_OF_MONTH等。
- 你可以使用Calendar类的构造方法创建一个Calendar对象,并使用set()方法设置日期和时间的各个部分。
- Calendar类还提供了一些方法来获取当前日期和时间的各个部分,例如get()方法获取指定字段的值。
5. Math类:
- Math类是Java的数学辅助类,它提供了一些静态方法来执行常见的数学运算,例如sqrt()方法计算平方根、log()方法计算自然对数等。
- Math类还包含一些常量和常用函数的值,例如PI表示π的值、E表示自然对数的底数等。
- 你可以使用Math类的静态方法来执行数学运算,例如Math.sqrt(x)计算x的平方根。
总结:
通过学习这些常用类,你将能够更深入地理解Java中的基本数据类型,并能够进行基本类型和包装类之间的转换。你还可以掌握这些常用类的使用方法,以便在实际编程中更好地处理日期、时间和数学计算等问题。
相关文章:

Java入门第三季
一、异常与异常处理 1. 异常简介 在Java中,**异常是程序在执行过程中出现的问题或意外情况,导致程序无法按照预期的流程进行。**异常处理是Java中用于处理程序中出现的异常的一种机制。 Java中的异常可以分为两大类:受检查的异常ÿ…...

【linux命令讲解大全】056.updatedb命令:创建或更新slocate数据库文件
文章目录 updatedb补充说明语法选项实例 从零学 python updatedb 创建或更新slocate命令所必需的数据库文件 补充说明 updatedb命令用来创建或更新slocate命令所必需的数据库文件。updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,…...

查看视频文件关键帧间隔
一、Elecard StreamEye Tools拖放视频文件查看。 红的是I帧;蓝的是P帧;绿的是B帧。 二、ffprobe -show_streams统计。 1、统计视频关键帧、非关键帧 ffprobe.exe -i 1.mp4 -show_streams v -show_packets -print_format json > d:\1.json 再统计1.j…...

如何在mac上安装多版本python并配置PATH
摘要 mac 默认安装的python是 python3,但是如果我们需要其他python版本时,该怎么办呢? 例如:需要python2 版本,如果使用homebrew安装会提示没有python2。同时使用python --version 会发现commond not found。 所以本…...

GPT-人工智能如何改变我们的编码方式
在本文中,您将找到我对人工智能和工作的最新研究的总结(探索人工智能对生产力的影响,同时开启对长期影响的讨论),一个准实验方法的示例(通过 ChatGPT 和 Stack Overflow 进行说明,了解如何使用简…...

混淆技术研究-混淆技术简介(1)
背景 在实际的移动安全分析过程中,遇到的混淆防护技术越来越多,因此分析难度逐渐增大,本系列技术研究主要通过对目前已有的混淆技术进行详细的技术分析,包括原理分析、反混淆技术等。本文是此系列的第一篇,主要是介绍目前市场上存在的混淆技术及其简单原理概述。 混淆技…...

HTML5+CSS3+JS小实例:科技感满满的鼠标移动推开粒子特效
实例:科技感满满的鼠标移动推开粒子特效 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport&qu…...

某物联网数智化园区行业基于 KubeSphere 的云原生实践
公司简介 作为物联网 数智化园区一体化解决方案提供商,我们致力于为大中型园区、停车场提供软硬件平台,帮助园区运营者实现数字化、智能化运营。 在使用 K8s 之前我们使用传统的方式部署上线,使用 spug(一款轻量级无 Agent 的自…...

MySQL查询数据库所有表名及其注释
1 查询 数据库 所有表 select table_name from information_schema.tables where table_schemasdam 2 查询数据库所有表 和表的 注释 SELECT TABLE_NAME, TABLE_COMMENT from information_schema.tables WHERE TABLE_SCHEMA dam ORDER BY TABLE_NAME; 3 查询数据库 单…...

8月31日-9月1日 第六章 案例:MySQL主从复制与读写分离(面试重点,必记)
本章结构 案例概述 案例前置知识点 详细图示 1、什么是读写分离? 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导…...

Oracle RAC 删除CRS集群配置失败
1.错误现象 [gridrac1~]$ /u01/app/11.2.0/grid/crs/install/rootcrs.pl -deconfig -force -verbose Cant locate Env.pm in INC (INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64 /app/11.2.0/grid/crs/install) at /u01/app/11.2.0/grid/crs/insta…...

Kafka3.0.0版本——消费者(消费者总体工作流程图解)
一、消费者总体工作流程图解 角色划分:生产者、zookeeper、kafka集群、消费者、消费者组。如下图所示: 生产者发送消息给leader,followerr主动从leader同步数据,一个消费者可以消费某一个分区数据或者一个消费者可以消费多个分区数据。如下图…...

MacOS 为指定应用添加指定权限(浏览器无法使用摄像头、麦克风终极解决方案)
起因:需要浏览器在线做一些测评,但我的 Chrome 没有摄像头/麦克风权限,并且在设置中是没有手动添加按钮的。 我尝试了重装软件,更新系统(上面的 13.5 就是这么来的,我本来都半年懒得更新系统了)…...

Mysql 流程控制
简介 我们可以在存储过程和函数中实现比较复杂的业务逻辑,但是需要对应的流程控制语句来控制,就像Java中分支和循环语句一样,在MySQL中也提供了对应的语句,接下来就详细的介绍下。 1.分支结构 1.1 IF语句 IF 表达式1 THEN 操作1…...

Java学习笔记之----I/O(输入/输出)二
【今日】 孩儿立志出乡关,学不成名誓不还。 文件输入/输出流 程序运行期间,大部分数据都在内存中进行操作,当程序结束或关闭时,这些数据将消失。如果需要将数据永久保存,可使用文件输入/输出流与指定的文件建立连接&a…...

2024字节跳动校招面试真题汇总及其解答(一)
1. 【算法题】重排链表 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 输入:hea…...

【Nginx23】Nginx学习:响应头与Map变量操作
Nginx学习:响应头与Map变量操作 响应头是非常重要的内容,浏览器或者客户端有很多东西可能都是根据响应头来进行判断操作的,比如说最典型的 Content-Type ,之前我们也演示过,直接设置一个空的 types 然后指定默认的数据…...

前端代理报错Error occured while trying to proxy to: localhost:端口
webpack配置进行前端代理时, 报错信息如下:(DEPTH_ZERO_SELF_SIGNED_CERT) 需设置:secure为false即可解决此报错 // webpack配置前端代理config["/test"]{target: https://xxxx.com,changeOrigin: true,secure: false // 这个配置…...

QT DAY6
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);socket new QTcpSocket(this);//如果连接服务器成功,该客户端就会发射一个connected的信号。//我们…...

Slint学习文档
Slint学习文档 Slint Learn如何学习本文档学习顺序标志说明 Slint With VSCodeSlint With Rust依赖👎定义宏 Slint与Rust分离1.添加编译依赖(slint-build)2.编写slint文件3.编写build.rs4.编写main.rs 普通组件主窗体Windowexample 文本Texte…...

【最新!七麦下载量analysis参数】逆向分析与Python实现加密算法
文章目录 1. 写在前面2. 请求分析3. 加密分析4. 算法实现 1. 写在前面 之前出过一个关于榜单analysis的分析,有兴趣的可以查看这篇文章:七麦榜单analysis加密分析 最近运营团队那边有同事找到我们,说工作中偶尔需要统计分析一下某APP在一些主…...

蓝桥杯练习题(3的倍数)
问题描述 小蓝对 3 的倍数很感兴趣。现在他手头有三个不同的数 a,b,c, 他想知道, 这三个数中是不是有两个数的和是 3 的倍数。 例如, 当 a3,b4,c6 时, 可以找到 a 和 c 的和是 3 的倍数。 例如, 当 a3,b4,c7 时, 没办法找到两个数的和是 3 的倍数。 输入格式 输入三行, 每行…...

安装Qe-7.2细节
编译 直接编译报错,发现要使用gpu加速。 检查linux的GPU: nvidia-smi lspci |grep -i nvidia module load cuda ./configure make all 安装curl mkdir build cd build …/configure --prefix/home/bin/local/curl make make install 加入路径: expor…...

3.运行项目
克隆项目 使用安装的git克隆vue2版本的若依项目,博主使用的版本是3.8.6. git clone https://gitee.com/y_project/RuoYi-Vue.git目录结构如下图所示,其中ruoyi-ui是前端的内容,其它均为后端的内容。 配置mysql数据库 在数据库里新建一个…...

【算法题】2651. 计算列车到站时间
题目: 给你一个正整数 arrivalTime 表示列车正点到站的时间(单位:小时),另给你一个正整数 delayedTime 表示列车延误的小时数。 返回列车实际到站的时间。 注意,该问题中的时间采用 24 小时制。 示例 1…...

Mybatis传递实体对象只能直接获取,不能使用对象.属性方式获取
mybatis的自动识别参数功能很强大,pojo实体类可以直接写进mapper接口里面,不需要在mapper.xml文件中添加paramType,但是加了可以提高mybatis的效率 不加Param注解,取值的时候直接写属性 //这里是单参数,可以不加param!…...

flink 写入数据到 kafka 后,数据过一段时间自动删除
版本 flink 1.16.0kafka 2.3 流程描述: flink利用KafkaSource,读取kafka的数据,然后经过一系列的处理,通过KafkaSink,采用 EXACTLY_ONCE 的模式,将处理后的数据再写入到新的topic中。 问题描述࿱…...

golong基础相关操作--一
package main//go语言以包作为管理单位,每个文件必须先声明包 //程序必须有一个main包 // 导入包,必须要要使用 // 变量声明了,必须要使用 import ("fmt" )/* * 包内部的变量 */ var aa 3var ss "kkk"var bb truevar …...

【深度学习】基于卷积神经网络的铁路信号灯识别方法
基于卷积神经网络的铁路信号灯识别方法 摘 要:1 引言2 卷积神经网络模型2.1 卷积神经网络结构2.2.1 卷积层2.2.2 池化层2.2.3 全连接层 3 卷积神经网络算法实现3.1 数据集制作3.2 卷积神经网络的训练过程3.2.1 前向传播过程 4 实验5 结语 摘 要: 目前中…...

DR IP-SoC China 2023 Day演讲预告 | 龙智Perforce专家解析芯片开发中的数字资产管理
2023年9月6日(周三),龙智即将亮相于上海举行的D&R IP-SoC China 2023 Day,呈现集成了Perforce与Atlassian产品的芯片开发解决方案,助力企业更好、更快地进行芯片开发。 D&R IP-SoC China 2023 Day 是中国首个…...