关于java选择结构switch及反编译

关于java选择结构switch及反编译

在上一篇文章中,我们了解了选择结构中的if else等,本章内容让我们说明一下上一篇文章中的伏笔,switch选择结构🤔

switch多选择结构

  • 多选择结构:多选择结构除了else if ,就是我们要介绍的switch case😀
  • 分支:switch case 语句判断一个变量与一系列值中的某一个值是否相等,每一个值都是称为一个分支。
  • switch语句中可以是 byte 、short、int、char类型,自JavaSE7开始,也支持String字符串类型了,下面会介绍到😎
  • switch case使用方式:
switch(expression)
{case value://语句break;  //可以不选case value://语句break;  //可以不选case value://语句break;   //可以不选//可以有任意的case语句default:    //可以不选//语句           
}
  • 我们看到上面代码注释中有可以不选的注释,下面会详细的说明。
  • break是结束标志,如果有break就不会向下继续走了,代表终止了switch。
  • default和else类似,是在所有判断之后。
  • switch多选择结构实例说明

我们声明一个char类型的变量,然后用switch判断这个变量的级别。

public class Demo 
{public static void main(String[] args) {char grade='C';switch(grade){case 'A':System.out.println("优秀");break;case 'B':System.out.println("良好");case 'C':System.out.println("及格");case 'D':System.out.println("请再接再励!");case 'E':System.out.println("挂科");      default:System.out.println("未知等级");                }}
}

我们执行一下代码,我们会发现,C满足了及格的条件,但是并没有只输出了及格,还输出了下面代码中的语句。

及格
请再接再厉!
挂科
未知等级进程结束......    

所以,这里就说明了break的重要性,虽然这个可以不去写出来,程序也可以运行,但是break一定要写出来!我们在以后的工作中,平时的代码书写中,要养成好的习惯,在case的时候,直接把break写出来。

  • 我们发现,不写出break,没有终止标志,就会一直向下运行,这种现象就是叫做case穿透
public class Demo 
{public static void main(String[] args) {char grade='C';switch(grade){case 'A':System.out.println("优秀");break;case 'B':System.out.println("良好");break;case 'C':System.out.println("及格");break;case 'D':System.out.println("请再接再励!");break;case 'E':System.out.println("挂科");   break;default:System.out.println("未知等级");                }}
}

这样输出的结果,就是只有满足符合的条件的时候,输出的语句。

及格

我们在这里,还会有一些疑问,就是switch和 if 都是选择结构,但是什么时候用哪个选择是最好的呢🤔

if 多用于判断区间,switch 多用于判断具体的值

反编译

因为java是源文件,经过编译,生成class文件,在通过解释,给到操作系统平台,我们现在要对class文件进行反编译。

首先我们用刚刚学到的switch,写一段代码。

public class Demo
{public static void main(String[] args){String name="落满樱花的羊";switch (name){case "落满樱花":System.out.println("NO");break;case "落满樱花的":System.out.println("NO");break;case "落满樱花的羊":System.out.println("Yes");break;default:System.out.println("内容错误");}}
}

我们用的工具是Idea,所以,下面的反编译演示也是用Idea进行演示的,当然也有很多其他的反编译工具😀

1、首先,我们先编译运行一下这段代码,让它去生成class文件。

在这里插入图片描述

输出的结果为YES,已经编译好了,我们就可以去找它的class文件了😎

2、点击文件,找到项目结构,打开。

在这里插入图片描述

3、复制路径在 我的电脑 中输入。

在这里插入图片描述

在这里插入图片描述

4、进入文件夹后,我们可以看到production文件夹,点击去,可以看到项目名字(我的项目名字叫One😊),根据自己建立的包,找到对应的类文件的编译后的class文件。

在这里插入图片描述

5、找到后,我们在Idea项目目录中,找到刚刚的这个类,然后右键,选择打开于资源管理器。

在这里插入图片描述

6、打开以后,我们将刚刚的class文件,复制粘贴过去,像这样。

在这里插入图片描述

7、我们再打开idea的时候,就会发现刚刚的包中,多了一个不一样图标的文件,这个就是class文件。

在这里插入图片描述

8、双击文件打开,就可以看到反编译的源码了。

在这里插入图片描述

反编译的作用

  • 查看源代码:反编译工具可以将字节码文件转换为与原始源代码相似的Java代码。这对于开发人员来说非常有用,因为他们可以查看和理解其他人编写的代码,或者在没有源代码的情况下进行代码分析。
  • 调试和修复问题:当遇到问题时,反编译工具可以帮助开发人员快速定位和修复代码中的错误。通过查看反编译后的源代码,开发人员可以更容易地理解代码的逻辑和执行流程,从而更好地进行调试和修复。
  • 学习和教学:反编译工具可以帮助初学者学习和理解Java编程语言。通过查看反编译后的源代码,初学者可以更好地理解Java语法和编程规范,并从中学习编程技巧和最佳实践。
  • 代码审查和安全性分析:反编译工具可以用于代码审查和安全性分析。通过查看反编译后的源代码,开发人员可以检查代码是否存在潜在的安全漏洞或不良编码实践,并采取相应的措施进行修复和改进。

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

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

相关文章

Codeforces Round 918 (Div. 4)(AK)

A、模拟 B、模拟 C、模拟 D、模拟 E、思维,前缀和 F、思维、逆序对 G、最短路 A - Odd One Out 题意:给定三个数字,有两个相同,输出那个不同的数字。 直接傻瓜写法 void solve() {int a , b , c;cin >> a >>…

YOLOv5改进 | 2023主干篇 | 华为最新VanillaNet主干替换Backbone实现大幅度长点

一、本文介绍 本文给大家来的改进机制是华为最新VanillaNet网络,其是今年最新推出的主干网络,VanillaNet是一种注重极简主义和效率的神经网络架构。它的设计简单,层数较少,避免了像深度架构和自注意力这样的复杂操作(需要注意的是…

鸿蒙Harmony(十一)Stage模型

Stage模型:HarmonyOS 3.1 Developer Preview版本开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。 UIAb…

verilog rs232串口模块

前面发了个发送模块,这次补齐,完整。 串口计数器,波特率适配 uart_clk.v module uart_clk(input wire clk,input wire rst_n,input wire tx_clk_en,input wire rx_clk_en,input wire[1:0] baud_sel,output wire tx_clk,output wire rx_clk )…

js遍历后端返回的集合将条件相同的放入同一个数组内

项目场景: echarts折线图需要根据条件动态展示多条不同曲线 解决方案: 后端直接将使用sql将数据查询出来返回即可,因为我这里不是Java使用的C#不是很熟练后台不好写逻辑,所以在前端js完成的 代码如下: function createline(villagename, buildingname…

Centos7:Jenkins+gitlab+node项目启动(3)

Centos7:Jenkinsgitlabnode项目启动(1) Centos7:Jenkinsgitlabnode项目启动(1)-CSDN博客 Centos7:Jenkinsgitlabnode项目启动(2) Centos7:Jenkinsgitlabnode项目启动(2)-CSDN博客 Centos7:Jenkinsgitlabnode项目启…

Java ArrayList在遍历时删除元素

文章目录 1. Arrays.asList()获取到的ArrayList只能遍历,不能增加或删除元素2. java.util.ArrayList.SubList有实现add()、remove()方法3. 遍历集合时对元素重新赋值、对元素中的属性赋值、删除元素、新增元素3.1 普通for循环3.2 增强for循环3.3 forEach循环3.4 str…

116基于matlab的盲源信号分离

基于matlab的盲源信号分离。FASTICA方法,能够很好的将信号解混,可以替换数据进行分析。具有GUI界面,可以很好的进行操作。程序已调通,可直接运行。 116matlab盲源信号分离FASTICA (xiaohongshu.com)

20231228在Firefly的AIO-3399J开发板的Android11使用Firefly的DTS配置单前后摄像头ov13850

20231228在Firefly的AIO-3399J开发板的Android11使用Firefly的DTS配置单前后摄像头ov13850 2023/12/28 19:20 缘起,突然发现只能打开前置的ov13850,或者后置的ov13850。 但是不能切换! 【SDK:rk3399-android-11-r20211216.tar.xz】…

设备健康管理系统助力制造企业实现数字化转型

在当今快速变革的制造业环境中,数字化转型已成为制造企业保持竞争力和实现可持续发展的关键。在这个数字化转型的浪潮中,设备健康管理系统正发挥着重要的作用。设备健康管理系统通过实时监测、预测分析和智能诊断等功能,为制造企业提供了全面…

Flink实时电商数仓之DWS层

需求分析 关键词 统计关键词出现的频率 IK分词 进行分词需要引入IK分词器&#xff0c;使用它时需要引入相关的依赖。它能够将搜索的关键字按照日常的使用习惯进行拆分。比如将苹果iphone 手机&#xff0c;拆分为苹果&#xff0c;iphone, 手机。 <dependency><grou…

Kubernetes 学习总结(41)—— 云原生容器网络详解

背景 随着网络技术的发展&#xff0c;网络的虚拟化程度越来越高&#xff0c;特别是云原生网络&#xff0c;叠加了物理网络、虚机网络和容器网络&#xff0c;数据包在网络 OSI 七层网络模型、TCP/IP 五层网络模型的不同网络层进行封包、转发和解包。网络数据包跨主机网络、容器…

开箱即用的企业级数据和业务管理中后台前端框架Ant Design Pro 5的开箱使用和偏好配置

Ant Design Pro 介绍 Ant Design Pro 是一个开箱即用的企业级前端解决方案&#xff0c;基于 Ant Design 设计体系&#xff0c;提供了丰富的组件和功能&#xff0c;帮助开发者更快速地开发和部署企业级应用。 Ant Design Pro 使用 React、umi 和 dva 这三个主要的前端开发技术…

elementui+vue2 input输入框限制只能输入数字

方法1 自定义表单校验 <el-form :model"Formdata" ref"formRef" :rules"nodeFormRules" label-width"100px"><el-form-itemlabel"年龄"prop"age"><el-input v-model.number"Formdata.age&q…

HackTheBox-Machines--Photobomb

文章目录 1 端口扫描2 测试思路3 Web漏洞探测4 权限提升 Photobomb 测试过程 1 端口扫描 nmap -sC -sV 10.129.57.2102 测试思路 目标开启了22、80端口&#xff0c;所以测试点还是从80端口开始。 针对80端口的测试&#xff1a;   1.目录扫描   2.网页源代码   3.web漏洞 …

Java开发框架和中间件面试题(10)

目录 104.怎么保证缓存和数据库数据的一致性&#xff1f; 105.什么是缓存穿透&#xff0c;什么是缓存雪崩&#xff1f;怎么解决&#xff1f; 106.如何对数据库进行优化&#xff1f; 107.使用索引时有哪些原则&#xff1f; 108.存储过程如何进行优化&#xff1f; 109.说说…

白话机器学习的数学-1-回归

1、设置问题 投入的广告费越多&#xff0c;广告的点击量就越高&#xff0c;进而带来访问数的增加。 2、定义模型 定义一个函数&#xff1a;一次函数 y ax b &#xff08;a 是斜率、b 是截距&#xff09; 定义函数&#xff1a; 3、最小二乘法 例子&#xff1a; 用随便确定的参…

node 项目中 __dirname / __filename 是什么,为什么有时候不能用?

__dirname 是 Node.js 中的一个特殊变量&#xff0c;表示当前执行脚本所在的目录的绝对路径。 __filename 同理&#xff0c;是 Node.js 中的一个特殊变量&#xff0c;表示当前执行脚本的绝对路径&#xff0c;包括文件名。 在 Node.js 中&#xff0c;__dirname / __filename是…

用通俗易懂的方式讲解大模型:Prompt 提示词在开发中的使用

OpenAI 的 ChatGPT 是一种领先的人工智能模型&#xff0c;它以其出色的语言理解和生成能力&#xff0c;为我们提供了一种全新的与机器交流的方式。但不是每个问题都可以得到令人满意的答案&#xff0c;如果想得到你所要的回答就要构建好你的提示词 Prompt。本文将探讨 Prompt 提…

鸿鹄电子招投标系统:基于Spring Boot、Mybatis、Redis和Layui的企业电子招采平台源码与立项流程

在数字化时代&#xff0c;企业需要借助先进的数字化技术来提高工程管理效率和质量。招投标管理系统作为企业内部业务项目管理的重要应用平台&#xff0c;涵盖了门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理等…