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包到…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...