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

四:java 基础知识(4)-- 异常 字符串

目录

1. 异常处理

1.1 什么是异常

1.2 异常的类型

1.2.1 检查异常

1.2.2 运行时异常

1.3 异常的捕获与处理

1.3.1 try-catch 语句

1.3.2 finally 块

1.3.3 throw 和 throws 关键字

1.4 自定义异常

1.5 异常的最佳实践

2. 字符串

2.1 String 类的概述

2.2 字符串的创建与初始化

2.3 字符串操作方法

1. 拼接与格式化

2. 截取与替换

3. 查找与比较

2.4 StringBuilder 和 StringBuffer 的使用

2.5 字符串的不可变性与效率

2.6 字符串的常量池

2.7 字符串API

1. 字符串创建

2. 字符串长度

3. 字符串比较

4. 字符串查找

5. 字符串操作

6. 字符串分割

7. 字符串格式化

8. 字符串与字符数组的转换

9. 其他常用方法


1. 异常处理

  • 1.1 什么是异常

    •         在 Java 中,异常是指程序执行过程中发生的非正常情况,这些情况通常会影响程序的正常运行。异常可以是由于编程错误、系统错误或外部条件(如用户输入错误、网络问题等)导致的。Java 提供了一种机制来处理这些异常,以确保程序的健壮性和稳定性。
  • 1.2 异常的类型

    • 1.2.1 检查异常

      •         检查异常是指在编译时需要处理的异常。这类异常通常是可以预见的,例如文件未找到(FileNotFoundException)或网络连接失败(IOException)。编译器会强制要求在代码中使用 try-catch 语句捕获这些异常,或者在方法签名中声明 throws 该异常。
    • 1.2.2 运行时异常

      •         运行时异常是指在程序运行期间发生的异常,通常是由程序错误引起的,例如数组下标越界(ArrayIndexOutOfBoundsException)或空指针引用(NullPointerException)。这些异常不需要在编译时显式处理,虽然建议进行捕获以增强程序的健壮性。
  • 1.3 异常的捕获与处理

    • 1.3.1 try-catch 语句

      • try 块中包含可能抛出异常的代码,如果出现异常,程序会跳转到对应的 catch 块进行处理。示例如下:
      • try {int result = 10 / 0; // 可能抛出 ArithmeticException
        } catch (ArithmeticException e) {System.out.println("出现了算术异常:" + e.getMessage());
        }
        
    • 1.3.2 finally 块

      • finally 块用于在 trycatch 块之后执行,无论是否发生异常,finally 块中的代码都会被执行,通常用于资源释放等操作。
      • try {// 可能抛出异常的代码
        } catch (Exception e) {// 异常处理
        } finally {// 资源释放操作
        }
    • 1.3.3 throw 和 throws 关键字

      • throw 用于显式抛出一个异常对象,可以在方法体内使用,通常用于自定义异常的抛出。
      • throws 用于在方法签名中声明一个或多个异常,表示该方法可能抛出这些异常,调用该方法时需要处理这些异常。
  • 1.4 自定义异常

    • 在 Java 中,用户可以定义自己的异常类,通常通过继承 ExceptionRuntimeException 类来实现。自定义异常可以提供更具体的错误信息和异常类型,使得代码更易于维护和理解。
    • public class MyCustomException extends Exception {public MyCustomException(String message) {super(message);}
      }
      
  • 1.5 异常的最佳实践

    • 必须使用特定的异常:捕获具体的异常,而不是通用的 Exception,这样可以更精确地处理不同类型的错误。
      • try {FileReader file = new FileReader("nonexistentfile.txt");
        } catch (FileNotFoundException e) {System.out.println("文件未找到,请检查文件路径:" + e.getMessage());
        } catch (IOException e) {System.out.println("读取文件时发生错误:" + e.getMessage());
        }
        
    • 必须记录异常信息:在捕获异常后,记录异常的详细信息,便于调试和追踪问题。
      • import java.util.logging.Logger;public class FileProcessor {private static final Logger logger = Logger.getLogger(FileProcessor.class.getName());public void processFile(String filePath) {try {// 可能抛出 IOExceptionFileReader file = new FileReader(filePath);// 处理文件...} catch (IOException e) {logger.severe("处理文件时发生错误:" + e.getMessage());}}
        }
        
    • 合理使用 finally:使用 finally 块进行资源释放,确保即使发生异常也能正常释放资源。
      • public void readFile(String filePath) {FileReader file = null;try {file = new FileReader(filePath);// 处理文件...} catch (IOException e) {System.out.println("文件读取出错:" + e.getMessage());} finally {if (file != null) {try {file.close();} catch (IOException e) {System.out.println("关闭文件时出错:" + e.getMessage());}}}
        }
        
    • 避免吞掉异常:在捕获异常后,不要简单地忽略它,应该采取适当的措施进行处理。
    • 文档化异常:在方法文档中说明可能抛出的异常,以帮助调用者了解异常情况。
      • /*** 从指定路径读取文件内容。** @param filePath 文件路径* @throws FileNotFoundException 如果文件未找到* @throws IOException 如果读取文件时发生错误*/
        public void readFile(String filePath) throws FileNotFoundException, IOException {FileReader file = new FileReader(filePath);// 处理文件...
        }
        

2. 字符串

  • 2.1 String 类的概述

    •         在 Java 中,String 类是用来表示字符串的类。字符串是一系列字符的序列,String 对象是不可变的,这意味着一旦创建,字符串的内容就不能被修改。String 类提供了多种方法来操作字符串(只要你能想到的处理基本都能实现)。
  • 2.2 字符串的创建与初始化

    • 字面量方式:String str1 = "Hello, World!";
    • 使用构造函数:String str2 = new String("Hello, World!");
    • 区别:字面量方式会将字符串存储在字符串常量池中,而使用构造函数则会创建一个新的 String 对象。
  • 2.3 字符串操作方法

    • 1. 拼接与格式化

      • 拼接:可以使用 + 运算符或 concat() 方法。
        • String str1 = "Hello";
          String str2 = "World";
          String result = str1 + " " + str2; // 使用 + 运算符
          String result2 = str1.concat(" ").concat(str2); // 使用 concat 方法
          
      • 格式化:可以使用 String.format() 方法。
        • String name = "张三";
          int age = 30;
          String formatted = String.format("%s 年龄是 %d 岁", name, age);
          
    • 2. 截取与替换

      • 截取:使用 substring() 方法。
        • String str = "Hello, World!";
          String subStr = str.substring(7, 12); // "World"
          
      • 替换:使用 replace() 方法。
        • String str = "Hello, World!";
          String replaced = str.replace("World", "Java"); // "Hello, Java!"
          
    • 3. 查找与比较

      • 查找:使用 indexOf()lastIndexOf() 方法。
        • String str = "Hello, World!";
          int index = str.indexOf("World"); // 7
          
      • 比较:使用 equals()compareTo() 方法。
        • String str1 = "Hello";
          String str2 = "Hello";
          boolean isEqual = str1.equals(str2); // true
          int comparison = str1.compareTo(str2); // 0,表示相等
          
  • 2.4 StringBuilder 和 StringBuffer 的使用

    • StringBuilderStringBuffer 是可变字符串类,适用于需要频繁修改字符串的场景

    • StringBuilder:线程不安全,适用于单线程环境,性能较高。

      • StringBuilder sb = new StringBuilder();
        sb.append("Hello");
        sb.append(", ");
        sb.append("World!");
        String result = sb.toString(); // "Hello, World!"
        
    • StringBuffer:线程安全,适用于多线程环境。

      • StringBuffer sb = new StringBuffer();
        sb.append("Hello");
        sb.append(", ");
        sb.append("World!");
        String result = sb.toString(); // "Hello, World!"
        
  • 2.5 字符串的不可变性与效率

    •         字符串的不可变性意味着一旦创建,字符串的内容无法更改。每次对字符串的修改都会生成一个新的 String 对象,这可能导致性能问题,特别是在频繁拼接字符串的场景中。因此,对于大量字符串操作,建议使用 StringBuilderStringBuffer,以提高性能并减少内存使用。
  • 2.6 字符串的常量池

    •         Java 使用字符串常量池来优化内存使用。通过字面量创建的字符串会被存储在池中,如果有相同内容的字符串,Java 会重用池中的对象,而不是创建新的 String 对象。
  • 2.7 字符串API

    • 1. 字符串创建

      • String str = "text";:字面量创建字符串。
        String str = new String("text");:使用构造函数创建字符串。
    • 2. 字符串长度

      • int length():返回字符串的长度。
    • 3. 字符串比较

      • boolean equals(Object obj):比较两个字符串的内容是否相等。
        boolean equalsIgnoreCase(String anotherString):比较两个字符串(忽略大小写)是否相等。
        int compareTo(String anotherString):按字典顺序比较两个字符串。
        int compareToIgnoreCase(String anotherString):按字典顺序比较两个字符串(忽略大小写)。
    • 4. 字符串查找

      • int indexOf(String str):返回指定子串第一次出现的位置。
        int lastIndexOf(String str):返回指定子串最后一次出现的位置。
        int indexOf(char ch):返回指定字符第一次出现的位置。
        int lastIndexOf(char ch):返回指定字符最后一次出现的位置。
        boolean contains(CharSequence sequence):检查字符串是否包含指定的字符序列。
        boolean startsWith(String prefix):检查字符串是否以指定前缀开头。
        boolean endsWith(String suffix):检查字符串是否以指定后缀结尾。
    • 5. 字符串操作

      • String substring(int beginIndex):返回从指定索引开始到字符串末尾的子串。
        String substring(int beginIndex, int endIndex):返回从指定的开始索引到结束索引的子串。
        String concat(String str):将指定字符串连接到当前字符串的末尾。
        String replace(char oldChar, char newChar):替换字符串中的字符。
        String replace(CharSequence target, CharSequence replacement):替换字符串中的字符序列。
        String replaceAll(String regex, String replacement):使用正则表达式替换所有匹配的子串。
        String replaceFirst(String regex, String replacement):使用正则表达式替换第一个匹配的子串。
        String trim():去除字符串前后的空白字符。
        String toLowerCase():将字符串转换为小写。
        String toUpperCase():将字符串转换为大写。
    • 6. 字符串分割

      • String[] split(String regex):根据指定的正则表达式将字符串分割成字符串数组。
        String[] split(String regex, int limit):根据指定的正则表达式将字符串分割成字符串数组,限制数组的大小。
    • 7. 字符串格式化

      • static String format(String format, Object... args):根据指定格式创建字符串。
        static String format(Locale locale, String format, Object... args):根据指定区域和格式创建字符串。
    • 8. 字符串与字符数组的转换

      • char charAt(int index):返回指定索引处的字符。
        char[] toCharArray():将字符串转换为字符数组。
        String(String value):通过字符数组构造字符串。
    • 9. 其他常用方法

      • boolean isEmpty():检查字符串是否为空。
        String valueOf(int i):将整数转换为字符串。
        String.valueOf(Object obj):将对象转换为字符串。
        String.valueOf(char[] data):将字符数组转换为字符串。

相关文章:

四:java 基础知识(4)-- 异常 字符串

目录 1. 异常处理 1.1 什么是异常 1.2 异常的类型 1.2.1 检查异常 1.2.2 运行时异常 1.3 异常的捕获与处理 1.3.1 try-catch 语句 1.3.2 finally 块 1.3.3 throw 和 throws 关键字 1.4 自定义异常 1.5 异常的最佳实践 2. 字符串 2.1 String 类的概述 2.2 字符串的…...

Uniapp 实现app自动检测更新/自动更新功能

实现步骤 配置 manifest.json 在 manifest.json 中设置应用的基本信息,包括 versionName 和 versionCode。 一般默认0.0.1,1. 服务器端接口开发 提供一个 API 接口,返回应用的最新版本信息,版本号、下载链接。客户端检测更新 使…...

7.0、RIP

RIP (Routing Information Protocol) 简介 RIP是由Xerox在20世纪70年代开发的,最初定义在RFC1058中。RIP用两种数据包传输更新:更新和请求,每个有RIP功能的路由器在默认情况下,每隔30s利用UDP520端口向与它直连的网络邻居广播(RIP1)或组播(R…...

C#与C++结构体的交互

C#在和C进行交互时,有时候会需要传递结构体。 做一些总结,避免大家在用的时候踩坑。 一般情况 例如我们在C里定义了一个struct_basic结构体 1 struct struct_basic 2 { 3 WORD value_1; 4 LONG value_2; 5 DWORD value_3; 6 UINT v…...

sql纵表转横表

项目上有一个需求(例子): 用户表 user{ id, name, workCode } id name workCode 1 张三 WC1001 2 李四 WC1002 工作信息表 work{ id, name, workCode, workTimeSun } id name …...

数据采集-Kepware OPCUA 服务器实现

KepserverEX OPC UA server设置 系列文章目录 数据采集-Kepware 安装证书异常处理 目录 KepserverEX OPC UA server设置系列文章目录一、OPC UA(OPC Unified Architecture)二、防火墙的配置三、配置KepserverEX的OPC UA3.1 启用远程连接3.2 启动OPCUA服务器接口 四、管理OPCU…...

初识计算机网络

🌎初识计算机网络 文章目录: 初识计算机网络 计算机网络背景 网络协议       初识协议       制定协议标准的组织或公司       OSI七层模型       操作系统和计算机网络关系       再谈协议 网络传输的基本流程     …...

Oracle 第11章:异常处理

在 Oracle PL/SQL 中,异常处理是一个重要的概念,它用于管理程序执行过程中可能发生的错误或特殊情况。异常可以是系统预定义的,也可以是由用户自定义的。 异常类型与处理机制 PL/SQL 提供了两种类型的异常: 预定义异常&#xf…...

导航栏渐变色iOS

- (void)viewDidLoad {[super viewDidLoad];// 设置导航栏属性self.navigationBar.translucent NO;[self.navigationBar setTitleTextAttributes:{NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName:[UIFont boldSystemFontOfSize:28]}];// 修复iO…...

mysql读写分离

一、proxysql实现mysql读写分离 二、mycat...

计算机的错误计算(一百四十二)

摘要 本节探讨 MATLAB中 附近数的正弦函数的计算精度问题。 例1. 已知 计算 与 直接贴图吧: 另外, 16位的正确值分别为 -0.3077518861551721e-8 与 0.4106402475009074e-3(ISRealsoft 提供)。 容易看出,MATLAB的…...

利用大模型辅助科研论文写作·第一期|论文写作·24-11-02

小罗碎碎念 从这期推文开始,开一个新的系列——如何利用大语言模型辅助论文写作。 我目前的推文主要都集中于分享已经发表的论文,前期背景积累到一定程度以后,我们要动手做实验然后写自己的论文。如果从头到尾,全都自己写&#xf…...

JavaScript。—关于语法基础的理解—

一、程序控制语句 JavaScript 提供了 if 、if else 和 switch 3种条件语句&#xff0c;条件语句也可以嵌套。 &#xff08;一&#xff09;、条件语句 1、单向判断 &#xff1a; if... &#xff08;1&#xff09;概述 < if >元素用于在判断该语句是否满足特定条…...

Tomcat 11 下载/安装 与基本使用

为什么要使用Tomcat&#xff1f; 使用Apache Tomcat的原因有很多&#xff0c;以下是一些主要的优点和特点&#xff1a; 1. 开源与免费 Tomcat是一个完全开源的项目&#xff0c;任何人都可以免费使用。它由Apache软件基金会维护&#xff0c;拥有一个活跃的社区&#xff0c;这…...

Linux系统时间服务——Chrony服务器

文章目录 Linux系统时间服务——Chrony服务器前言时间同步的重要性Linux系统的两种时钟系统时钟&#xff08;System Clock&#xff09;相关命令硬件时钟 (RTC - Real Time Clock)相关命令 Chrony介绍NTP Chronyc相关命令服务管理相关命令chronyc 基本命令时间校正和控制命令NTP…...

C# 接口(Interface)

C# 接口&#xff08;Interface&#xff09; 接口在C#中是一种非常重要的概念&#xff0c;它定义了一个约定&#xff0c;实现该接口的类必须遵循这个约定。接口可以包含方法、属性、事件和索引器&#xff0c;但不包含实现。这使得接口成为定义抽象行为的理想选择。在本文中&…...

《高频电子线路》—— 电容三端LC振荡器

文章内容来源于【中国大学MOOC 华中科技大学通信&#xff08;高频&#xff09;电子线路精品公开课】&#xff0c;此篇文章仅作为笔记分享。 电容三端LC振荡器 基本原理&#xff08;考毕兹电路&#xff09; 反馈电压从C2上取得&#xff0c;作为输入电压&#xff0c;形成正反馈&a…...

leetcode35.搜索插入位置

1&#xff09;题目描述&#xff1a; 2&#xff09;本题要求使用 时间复杂度O(log n)的算法&#xff0c;这里使用二分查找的方法&#xff0c;这道题本身不复杂&#xff0c;但是&#xff0c;在使用递归调用时&#xff0c;笔者经常把递归结束的边界搞错&#xff0c;这里给出几版代…...

Redis全系列学习基础篇之位图(bitmap)常用命令的解析

文章目录 描述常用命令及解析常用命令解析 应用场景统计不确定时间周期内用户登录情况思路分析实现 统计某一特定时间内活跃用户(登录一次即算活跃)的数量思路分析与实现 描述 bitmap是redis封装的用于针对位(bit)的操作,其特点是计算效率高&#xff0c;占用空间少,常被用来统计…...

Copilot功能

Copilot 1、简介&#xff1a;Copilot是由GitHub与OpenAI共同开发的一款AI编程助手&#xff0c;旨在帮助开发者提高工作效率&#xff0c;改善代码质量。 2、主要功能包括&#xff1a; 1.代码补全&#xff1a;Copilot可以在开发者编写代码时提供代码建议&#xff0c;包括函数、循…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...