Java 变量初始化的两种方式和优缺点比较
第一种初始化方式:(优先推荐)
String fileRename = null; File fileToSave = null;
这种方式将变量的作用域限定在循环外部,即在整个代码块中都可以使用这些变量。初始值为null表示变量在开始时没有具体的数值。
这种方式更好的原因是:
-
避免了重复定义变量,节省了内存空间。
-
在循环内部使用相同的变量名时,可以避免变量重复赋值导致逻辑错误。
第二种初始化方式:(不推荐)
List<String> fileUrls = new ArrayList<String>();
这种方式将变量的作用域限定在循环内部,即只能在循环内部使用这个变量。初始值为ArrayList实例,表示该变量在开始时已经被初始化为一个空的List。
如果要将第二种初始化方式改成第一种初始化方式,需要将变量的定义移到循环外部,并添加初始值为null。可以按照以下方式修改:
List<String> fileUrls = null;
将所有的变量定义移到循环外部并统一初始化为null。这样可以清晰地表达出变量在开始时没有具体的数值,并且方便后续的代码逻辑处理。两种初始化方式的不同在于作用域和初始值。
如果你在代码的某个地方声明了一个名为fileUrls的List<String>变量,并将其初始化为null,那么在后续引用这个变量时需要注意空指针异常(NullPointerException)的问题。
在使用fileUrls之前,你应该先检查它是否为空。可以使用条件语句(例如if语句)来检查变量是否为null,然后再进行相应的处理。
if (fileUrls != null) { // 在这里可以安全地使用 fileUrls 变量 // 例如,可以调用 fileUrls 的方法或迭代它的元素 // 示例:遍历并输出每个文件URL for (String url : fileUrls) { System.out.println(url); } } else { // 如果 fileUrls 为 null,可以根据需求做出相应的处理 // 示例:打印出提示信息 System.out.println("fileUrls 是 null");
}
在上述代码中,首先检查fileUrls是否为null,如果不为null,则执行相应的操作,否则执行备选方案。
请记住,在使用任何可能为空的变量之前,都应该先进行空值检查,以提高代码的健壮性和可靠性。
当然除了将List<String>类型的变量初始化为null,还有其他多种方式可以对其进行初始化。以下是几种常见的初始化方式:
-
使用空的列表初始化:
CodeList<String> fileUrls = new ArrayList<>(); -
在创建列表时添加元素进行初始化:
CodeList<String> fileUrls = Arrays.asList("url1", "url2", "url3"); -
使用静态初始化块初始化:
CodeList<String> fileUrls; {fileUrls = new ArrayList<>();fileUrls.add("url1");fileUrls.add("url2");fileUrls.add("url3"); } -
使用Java 8的Stream API进行初始化:
CodeList<String> fileUrls = Stream.of("url1", "url2", "url3").collect(Collectors.toList()); -
使用双括号初始化(Double Brace Initialization):
CodeList<String> fileUrls = new ArrayList<String>() {{add("url1");add("url2");add("url3"); }};
补充:
变量赋值
初始化变量是指为变量指定一个明确的初始值。初始化变量有两种方式:一种是声明时直接赋值,一种是先声明、后赋值。如下代码分别使用两种方式对变量进行了初始化。
char usersex='女'; // 直接赋值
或者
String username; // 先声明
username ="琪琪"; // 后赋值
另外,多个同类型的变量可以同时定义或者初始化,但是多个变量中间要使用逗号分隔,声明结束时用分号分隔。
String username,address,phone,tel; // 声明多个变量
int num1=12,num2=23,result=35; // 声明并初始化多个变量
Java 中初始化变量时需要注意以下事项:
变量是类或者结构中的字段,如果没有显式地初始化,默认状态下创建变量并默认初始值为 0。
方法中的变量必须显式地初始化,否则在使用该变量时就会出错
其实关于变量初始化的方式,Java提供了四种变量初始化的方式。
Java中所有变量都有默认值,这个默认值取决于变量的类型,而不是变量名或具体的值。如果变量没有被赋予初始值,那么系统会自动将其初始化成对应类型的默认值。
使用默认值初始化变量
Java的基本数据类型中,数字类型默认值为0,布尔类型默认值为false,引用数据类型默认值为null。例如:
int num;
boolean flag;
String str; System.out.println(num); //输出0
System.out.println(flag); //输出false
System.out.println(str); //输出null
直接赋值初始化变量
直接赋值是指在创建变量时直接将具体的值赋给变量,这种方式最为常见。例如:
int num = 10;
String str = "hello";
double pi = 3.1415926;
这种方式最为常见,也最易理解,直接将变量赋值成所需的值即可。
通过构造方法初始化变量
通过构造方法初始化变量的方式与直接赋值类似,只不过这种方式是通过类的构造函数来将变量初始化。例如:
public class Person { private String name; private int age;
}public Person() { name = "张三"; age = 18; }
}
在这个示例代码中,类Person中的构造函数初始化了两个变量name和age,在创建Person类对象时变量就被初始化为默认值。
通过静态块初始化变量
Java还提供了一种通过静态块来初始化变量的方式,静态块是在类加载的时候执行的,优先于构造方法的执行。静态块只会执行一次,当类被多次加载时,静态块也只会执行一次。例如:
public class Person { private static String nation;
}static{ nation = "China"; }
}
在上述代码中,类Person中的静态块初始化了变量nation,该变量会在类加载时初始化为"China"。
这四种方法都可以用来初始化变量,使用哪种方法取决于具体情况。默认值初始化是最基础的方式,但不一定适用于所有情况。直接赋值方式和通过构造方法初始化变量方式是最为常见的方式,且使用相对简单。通过静态块初始化变量方式则更适合需要在静态环境中初始化变量的情况。
相关文章:
Java 变量初始化的两种方式和优缺点比较
第一种初始化方式:(优先推荐) String fileRename null; File fileToSave null; 这种方式将变量的作用域限定在循环外部,即在整个代码块中都可以使用这些变量。初始值为null表示变量在开始时没有具体的数值。 这种方式更好的…...
15.三数之和
题目来源: leetcode题目,网址:15. 三数之和 - 力扣(LeetCode) 解题思路: 1.三重循环暴力遍历,超时原因,三重循环复杂度太高 2.双重循环哈希表,超时原因,哈…...
竞赛选题 深度学习疲劳驾驶检测 opencv python
文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 🔥 优…...
PROFINET和UDP、MODBUS-RTU通信速度对比实验
这篇博客我们介绍PROFINET 和MODBUS-RTU通信实验时的数据刷新速度,以及这种速度不同对控制系统带来的挑战都有哪些,在介绍这篇对比实验之前大家可以参考下面的文章链接: S7-1200PLC和SMART PLC的PN智能从站通信 S7-200 SMART 和 S7-1200PLC进行PROFINET IO通信-CSDN博客文…...
CSS3 多媒体查询、网格布局
一、CSS3多媒体查询: CSS3 多媒体查询继承了CSS2多媒体类型的所有思想,取代了查找设备的类型。CSS3根据设置自适应显示。 多媒体查询语法: media not|only mediatype and (expressions) { CSS 代码...; } not: not是用来排除掉某些特定…...
SpringBoot基础(九)-- 配置文件优先级
目录 1. 3种格式的配置文件的优先级 2. 案例演示 小结: 3. 小技巧:自动提示功能消失解决方案...
C++ static关键字
C static关键字 1、概述2、重要概念解释3、分情况案例解释3.1 static在类内使用3.2 static在类外使用案例一:案例二:案例三 1、概述 static关键字分为两种情况: 1.在类内使用 2.在类外使用 2、重要概念解释 (1)翻译…...
Anaconda Powershell Prompt和Anaconda Prompt的区别
先说结论:主要功能应该一样。区别在于powershell支持的命令更多。比如查询路径的命令pwd和列表命令ls。 Anaconda PowerShell Prompt和Anaconda Prompt是Anaconda发行版中两个不同的命令提示符工具。 Anaconda Prompt是Anaconda发布的默认命令提示符工具࿰…...
关于tcp发送成功但对端无法接收情况的思考
用到一个http服务,但调用频率很高,每次请求都使用短连接的话,有点浪费。 所以尝试复用http连接,请求的时候在头部添加Connection:Keep-alive,对端支持,但会在一定时常或一定请求次数后关闭该连接…...
01-解码-H264转YUV
整体方案: 采集端:摄像头采集(YUV)->编码(YUV转H264)->RTMP推流 客户端:RTMP拉流->解码(H264转YUV)->YUV显示(SDL2) H264码流转YUV是视频解码部分,具体的代码实现如下。 #include <stdio.h> #include <stdlib.h> #ifdef __cplusplus ext…...
keepalived+Nginx+邮件
实验场景: 我使用keepalived保证nginx的高可用,我想知道什么时候ip发生漂移,可以让ip发生漂移的时候 我的邮箱收到消息. 如果对keepalived不了解,这有详细解释:keepalived与nginx与MySQL-CSDN博客https://blog.csdn.ne…...
CMakeCache.txt有什么用
2023年11月11日,周六上午 CMakeCache.txt 是由 CMake 自动生成的一个缓存文件,用于记录在配置过程中生成的各种变量和选项的值。 在使用 CMake 构建项目时,CMake 会根据 CMakeLists.txt 文件中的配置和命令,解析项目的源代码并生…...
ZYNQ_project:key_breath
[Synth 8-327] inferring latch for variable led_breath_reg ["C:/Users/warrior/Desktop/ZYNQ/pl/key_breath/rtl/led_breath.v":66] 因为在组合逻辑中,用了非阻塞赋值的方式赋值信号。 组合逻辑自己给自己赋值会产生组合回环,输出不稳定。 …...
设计模式 (原则)
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本 一、开闭原则 对扩展开放,对修改关闭。 案…...
LeetCode 每日一题 2023/11/6-2023/11/12
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 11/6 318. 最大单词长度乘积11/7 2586. 统计范围内的元音字符串数11/8 2609. 最长平衡子字符串11/9 2258. 逃离火灾11/10 2300. 咒语和药水的成功对数11/11 765. 情侣牵手1…...
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
一、传统磁盘管理的弊端 传统的磁盘管理:使用MBR先对硬盘分区,然后对分区进行文件系统的格式化最后再将该分区挂载上去。 传统的磁盘管理当分区没有空间使用进行扩展时,操作比较麻烦。分区使用空间已经满了,不再够用了ÿ…...
CTFHUB-WEB-SQL注入
sql学的太不好了,回炉重造 判断 Sql 注入漏洞的类型: 1.数字型 当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下:select * from <表名> where id x这种类型可以使用经典的 and 11 和 and 12 来判断ÿ…...
案例分享:某汽车企业通过龙智拓展Jira功能,实现高效项目管理
这家汽车行业的客户缺乏一套系统来支持产品研发过程的管理。他们一直在寻找一款可以覆盖从基本需求到产品开发,再到项目实施等各个阶段的研发管理工具,并且需要这款工具又一定的灵活性,更好地适应并提升现有的业务流程。 通过引入Atlassian的…...
【算法与数据结构】40、LeetCode组合总和 II
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:【算法与数据结构】39、LeetCode组合总和的基础之上,这道题变成了candidates中有重复元素&…...
Flink SQL -- 命令行的使用
1、启动Flink SQL 首先启动Flink的集群,选择独立集群模式或者是session的模式。此处选择是时session的模式:yarn-session.sh -d 在启动Flink SQL的client: sql-client.sh 2、kafka SQL 连接器 在使用kafka作为数据源的时候需要上传jar包到…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
[拓扑优化] 1.概述
常见的拓扑优化方法有:均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有:有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...
C#中用于控制自定义特性(Attribute)
我们来详细解释一下 [AttributeUsage(AttributeTargets.Class, AllowMultiple false, Inherited false)] 这个 C# 属性。 在 C# 中,Attribute(特性)是一种用于向程序元素(如类、方法、属性等)添加元数据的机制。Attr…...
