【2023,学点儿新Java-26】关键字介绍+示例代码:assert 断言(如何启用断言),以 验证一个数组的长度是否不为零 为例说明

news2024/9/26 3:21:58

前情回顾:

  • 【2023,学点儿新Java-25】如何解决浮点计算存在误差:strictfp | 如何保护敏感信息,提高程序的可靠性和安全性:transient | 附:Java异常处理关键字介绍
  • 【2023,学点儿新Java-24】abstract修饰类、方法 | synchronized同步锁 | volatile修饰成员变量 | 如何保证变量在多线程中的可见性?| 如何保证线程安全?
  • 【2023,学点儿新Java-23】初步了解Java中的修饰符:static及其作用、native特性、final的理解
  • 更多Java系列文章,可参阅博主主页哦!

 
我们抬头便看到星光,星星却穿越了万年.

 

🎯作者主页: 追光者♂🔥

        

🌸个人简介:
 
💖[1] 计算机专业硕士研究生💖
 
🌟[2] 2022年度博客之星人工智能领域TOP4🌟
 
🏅[3] 阿里云社区特邀专家博主🏅
 
🏆[4] CSDN-人工智能领域优质创作者🏆
 
📝[5] 预期2023年10月份 · 准CSDN博客专家📝  
 

  • 无限进步,一起追光!!!

        

🍎感谢大家 点赞👍  收藏⭐   留言📝!!!

        

🌿在此前的系列Java文章中,我们已经基本了解了Java中的一些关键字,今天让我们继续了解一些Java关键字吧!本篇暂时先介绍assert——断言,来看一下assert关键字在Java中究竟起了怎样的作用。为了便于大家理解,也附上了简明的实例。

🕝目录

  • 🍄assert:断言
    • 🥝1.1 基本描述,简明语法格式
    • 🥝1.2 进一步介绍

🍄assert:断言

🥝1.1 基本描述,简明语法格式

 

如果它断言的表达式为false,将会抛出java.lang.AssertionError对象。

语法格式:

assert 布尔表达式;assert 布尔表达式 : "错误信息";

此外需注意:要开启断言功能,在eclipse中需要加JVM参数 -ea,如下图,了解即可。

在这里插入图片描述

一个 【远古的 ~】 简单的示例:

public class TestDemo {
public static void main(String[] args) {
int a = 1;
int b = 2;
assert a/b == 0.5 :"结果不正确";
}
}

在这里插入图片描述
 

🥝1.2 进一步介绍

在Java中,assert关键字用于添加断言(Assertion),用于在程序中进行简单的测试和调试。它可以 用来验证 程序中的某个条件是否满足,如果条件不满足,则会抛出一个AssertionError异常。

 

assert 语句的两种形式:

  1. 简单形式:assert condition;
    如果condition为假(即false),会抛出AssertionError。

  2. 带有错误消息的形式:assert condition : errorMessage;
    如果condition为假,会抛出一个带有errorMessageAssertionError

需要注意的是,默认情况下,Java虚拟机会 禁用assert语句的执行。如果想要启用assert语句,需要在运行Java程序时加上-ea-enableassertions选项。

请看一个示例代码,演示了assert关键字的用法:

public class AssertExample {
    public static void main(String[] args) {
        int x = 10;

        // 简单断言,验证x是否大于等于0
        assert x >= 0;

        // 带错误消息的断言,验证x是否为正数
        assert x > 0 : "x must be positive";

        System.out.println("Program execution continues after asserts");
    }
}

在上面这个示例中,定义了一个AssertExample类,其中main()方法包含了断言的使用。

  • 首先,我们使用 简单断言 来验证x是否大于等于0。如果断言条件为假,程序会抛出AssertionError,并结束执行。

  • 然后,我们使用 带错误消息的断言 来验证x是否为正数。如果断言条件为假,会抛出一个带有错误消息"x must be positive"的AssertionError。

  • 最后,无论断言是否为真,程序都会继续执行,并输出"Program execution continues after asserts"。

要启用assert语句的执行,可以通过以下命令 来运行示例代码:

java -ea AssertExample

这将使用-ea选项来启用断言。如果断言条件不满足,会抛出相应的异常。如果不使用-ea选项,则断言语句将被忽略执行。


另外,当使用assert语句时,可以在断言条件中 使用任何布尔表达式。如果断言条件为真,则程序继续执行。否则,会抛出AssertionError异常,并且程序的执行会中断。

以下是一些更详细的示例代码,展示了assert语句的不同用法

public class AssertionExample {
    public static void main(String[] args) {
        // 验证数组长度不为零
        int[] numbers = {1, 2, 3, 4, 5};
        assert numbers.length != 0 : "Array is empty";

        // 验证字符串不为空
        String message = "Hello World";
        assert message != null && !message.isEmpty() : "String is empty";

        // 验证方法的返回值
        int result = divide(10, 0);
        assert result != -1 : "Cannot divide by zero";
    }

    public static int divide(int dividend, int divisor) {
        assert divisor != 0 : "Divisor cannot be zero";
        if (divisor == 0) {
            return -1;
        }
        return dividend / divisor;
    }
}

在这个示例中,我们首先验证了一个数组的长度是否不为零。如果数组长度为零,则会抛出一个错误消息"Array is empty"的AssertionError。接下来,我们验证了一个字符串是否不为空。如果字符串为空,则会抛出错误消息"String is empty"的AssertionError。

最后,定义了一个divide()方法,用于除法运算。在方法体的开头,我们使用了一个断言 来验证除数是否不为零。如果除数为零,则会抛出 一个带有错误消息"Divisor cannot be zero"的AssertionError。在这里,断言的主要目的是在代码逻辑错误的情况下提供早期诊断。

在编写程序时,使用assert关键字 可以帮助我们确保代码的正确性,并提供错误消息 以便快速诊断问题。

然而,应该注意的是,在正式发布的代码中,断言可能会被禁用或忽略掉。因此,assert语句不应该 用于处理预期可能发生的错误 或异常情况,而是更适用于调试和测试阶段

 

持续更新 ing!!!
 

欢迎关注,第一时间获取更多干货文章!!!

 


 

🍒 热门专栏推荐

  • 🥇Python&AI专栏:【Python从入门到人工智能】
  • 🥈前端专栏:【前端之梦~代码之美(H5+CSS3+JS.】
  • 🥉文献精读&项目专栏:【小小的项目 (实战+案例)】
  • 🍎C语言/C++专栏:【C语言、C++ 百宝书】(实例+解析)
  • 🍏Java系列(Java基础/进阶/Spring系列/Java软件设计模式等)
  • 🌞问题解决专栏:【工具、技巧、解决办法】
  • 📝 加入Community 一起追光:追光者♂社区

 

持续创作优质好文ing…✍✍✍

 

记得一键三连哦!!!

 

求关注!求点赞!求个收藏啦!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yaffs文件系统测试

1.前面我制作好了文件系统烧到开发板运行后,出现了如下错误 2.网上查找后,有人说是因为 arm-linux-gnueabi-4.9xx版本太高,它的libc不支持arm9,于是我们换成arm-linux-gcc-4.3.2试试,arm-linux-gcc-4.3.2下载地址&…

【妙趣横生】用matplotlib绘制平均线,让你的数据可视化变得活灵活现!

大家好,今天我要跟你们分享一个超有趣的技巧——如何用matplotlib库绘制平均线,让你的数据可视化更加生动活泼! 第一步:获取数据 我们首先需要将Excel表中的数据读取进来,这样才能绘制出精彩的图表。咱们可以使用pand…

在Fligma打开Android Material 3 Design组件规格颜色大小等

打开Material 3 Design Kit 链接:链接: Material 3 Design Kit 打开后点击右上方Open in Figma(提前注册Figma账号) 点击左侧方菜单栏中的Componenets选项查看M3组件规格

【JavaWeb】统一响应,并渲染在网页

一、需求描述 获取数据,返回统一响应结果,再在页面渲染展示。 二、知识点 1、在前端代码emp.html中,在页面加载时,通过vue的mounted方法发起异步请求来加载数据,在成功回调函数中判定响应回来的code的值&#xff0c…

个人总结 - IP代理池的思考

前言 今天话有点多,连续发了几篇博客,主要平常忙的话就没时间关注博客这块,今天兴致在,就勤快点哈哈 一般公司除非有钱,他可以购买ip服务器,或者大量高质量ip,但是有的时候,公司经…

高压放大器如何驱动压电陶瓷片

高压放大器是一种常用于驱动压电陶瓷片的电路,其基本原理是利用高压放大电路将低电压信号放大到足以驱动压电陶瓷片所需的高电压信号。在本文中,我们将介绍高压放大器如何驱动压电陶瓷片的具体方法和步骤。 图:压电陶瓷片 一、驱动压电陶瓷片…

三种方法教你:Allegro文件导入SIwave仿真

导入仿真工具进行信号完整性(SI)仿真是PCB设计中的关键步骤之一,但很多小白可能不太清楚该如何导入,下面将聊聊如何通过Allegro软件导入SIWave仿真,希望对小伙伴们有所帮助。 01 使用SIwave的直接导入功能 SIwave提供…

PADS 出gerber 20230628

PADS出gerber 20230628 TOP BOTTOM Solder MASK TOP 阻焊层 绿油层,可以用来露焊盘的 Paste Mask TOP 钢网层 Paste Mask Bottom Silkscreen TOP 丝印层 Solder MASK Bottom Silkcreen Bottom TOP层 L1 注意:电气层L1 L2 L3 L4不能勾选文本…

三维3D扫描仪工艺品摆件仿制翻模雕塑三维数字化3D打印-CASAIM

三维扫描技术在工艺品摆件仿制、翻模、3D打印、三维数字化方面发挥着重要作用。通过三维扫描技术,能完整还原工艺品的真实原貌,为复制经典艺术品提供了更精确和更环保的方法,最终精确保存细节、完美进行复制,并为以后的3D打印、三…

二叉树及其遍历方式!

二叉树 什么是二叉树? 树中每个节点最多只能有两个子节点,在 JavaScript 中一般都是通过 Object 来模拟二叉树。 常用操作 前序遍历中序遍历后序遍历 前序遍历 根左右。 口诀: 访问根节点对根节点的左子树进行前序遍历对根节点的右子…

使用python实现一个快速高斯模糊算法

在gimp的retinex里面使用了一个快速计算的高斯模糊,论文应该是Recursive Implementation of the gaussian filter,是使用一些多项式计算来近似计算高斯分布,这样能够大大减少计算。 将retinex源码给抽离出来,并使用python进行实现…

线性表的定义和基本操作(以顺序表为例)

名人说:一花独放不是春,百花齐放花满园。——《增广贤文》 作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 〇、线性表是什么?1、定义2、特点3、基本操作 一、代码实现二、思路阐明…

统计图echarts和antd charts的那些事

以下记录的是,我在学习中的一些学习笔记,这篇笔记是自己学习的学习大杂烩,主要用于记录,方便查找,如需转载请著名原文作者和地址 一、echarts 相关 ##1、echarts 在react的使用 npm install echarts --save //初始化…

[web]前端富文本编辑器

关于富文本编辑器 在HTML中&#xff0c;用于输入文本的只是<input type"text"/>和<textarea>这2种标签&#xff0c;这些标签都只能输入纯文本&#xff0c;不可以对输入的内容进行编排&#xff01; 在实际应用时&#xff0c;例如发布文章&#xff0c;需要…

asdasdadsadsadsc

C中类和结构体的区别 类中默认权限是私有&#xff0c;结构体内默认权限是公有结构体的默认继承方式是public&#xff0c;类的默认继承方式是privat

uniapp的navigator页面跳转遇到的问题

文章目录 先看路由index组件login组件最后再从index转到login&#xff08;问题&#xff09; 先看路由 主页默认加载的index "pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;https://uniapp.dcloud.io/collocation/pages{"path"…

基于kubesphere的k8s环境部署三节点的rook-ceph集群

文章目录 前言链接&#xff1a;[基于kubesphere的k8s环境部署单点版本的rook-ceph](https://blog.csdn.net/baidu_35848778/article/details/131050918) 一、rook-ceph是什么&#xff1f;二、开始部署2.1 环境准备2.2 软件包准备&#xff0c;计算\存储节点执行2.3 下载rook-cep…

关于我想安装cuda11.8版本的torch

先开始去官网PyTorch 用这个官网的命令下&#xff0c;一直会把cpu版本的一起下下来&#xff0c;导致运行的时候一直cpu版本而不是gpu版本&#xff0c;torch.cuda.is_available()这个是false&#xff0c;问题很大。 重新去搜了个命令&#xff1a;pip install torch1.8.0cu111 t…

Vue+Element-ui实例_日历排班(自定义)

在日常开发需求中&#xff0c;可能会遇到给员工进行排班的需求&#xff0c;如果只是在table表格中显示&#xff0c;会显得枯燥、不直观&#xff0c;今天我们就来写一个可以自定义的日历排班功能&#xff0c;用的是vue2element-ui。 效果图如下&#xff1a; (图一)&#xff1a;…

输出流(写)学习

选择子类&#xff1a;FileOutputStream 文件输出字节流 看到的是d 说明会查询ASCII表 写入记事本时&#xff0c;一个字母是一个字节 public static void main(String[] args) throws Exception {FileOutputStream fos new FileOutputStream("e:\\asd.txt");byte[]…