Java 变量初始化的两种方式和优缺点比较

第一种初始化方式:(优先推荐)

String fileRename = null; File fileToSave = null; 

这种方式将变量的作用域限定在循环外部,即在整个代码块中都可以使用这些变量。初始值为null表示变量在开始时没有具体的数值。

这种方式更好的原因是:

  • 避免了重复定义变量,节省了内存空间。

  • 在循环内部使用相同的变量名时,可以避免变量重复赋值导致逻辑错误。

第二种初始化方式:(不推荐)

List<String> fileUrls = new ArrayList<String>(); 

这种方式将变量的作用域限定在循环内部,即只能在循环内部使用这个变量。初始值为ArrayList实例,表示该变量在开始时已经被初始化为一个空的List。

如果要将第二种初始化方式改成第一种初始化方式,需要将变量的定义移到循环外部,并添加初始值为null。可以按照以下方式修改:

List<String> fileUrls = null;

 将所有的变量定义移到循环外部并统一初始化为null。这样可以清晰地表达出变量在开始时没有具体的数值,并且方便后续的代码逻辑处理。两种初始化方式的不同在于作用域和初始值。

如果你在代码的某个地方声明了一个名为fileUrlsList<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,还有其他多种方式可以对其进行初始化。以下是几种常见的初始化方式:

  1. 使用空的列表初始化:

    CodeList<String> fileUrls = new ArrayList<>();
  2. 在创建列表时添加元素进行初始化:

    CodeList<String> fileUrls = Arrays.asList("url1", "url2", "url3");
  3. 使用静态初始化块初始化:

    CodeList<String> fileUrls;
    {fileUrls = new ArrayList<>();fileUrls.add("url1");fileUrls.add("url2");fileUrls.add("url3");
    }

  4. 使用Java 8的Stream API进行初始化:

    CodeList<String> fileUrls = Stream.of("url1", "url2", "url3").collect(Collectors.toList());
  5. 使用双括号初始化(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"。

        这四种方法都可以用来初始化变量,使用哪种方法取决于具体情况。默认值初始化是最基础的方式,但不一定适用于所有情况。直接赋值方式和通过构造方法初始化变量方式是最为常见的方式,且使用相对简单。通过静态块初始化变量方式则更适合需要在静态环境中初始化变量的情况。

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

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

相关文章

SDN和NFV笔记

目录 SDN SDN的引入 SDN的概念 SDN网络部署的方式 SDN架构 OpenFlow SDN与传统网络的区别 SDN的应用 SDN的优点 NFV NFV的概念&#xff1a; NFV的架构&#xff1a; NFV相比于传统物理网元&#xff1a; NFV与SDN的关系 NFV与SDN的相似点 NFV与SDN的不同 SDN SD…

CVE-2023-25194 Kafka JNDI 注入分析

Apache Kafka Clients Jndi Injection 漏洞描述 Apache Kafka 是一个分布式数据流处理平台&#xff0c;可以实时发布、订阅、存储和处理数据流。Kafka Connect 是一种用于在 kafka 和其他系统之间可扩展、可靠的流式传输数据的工具。攻击者可以利用基于 SASL JAAS 配置和 SASL …

Linux常用命令:find、grep、vim、cat、less、more

目录 我的常用搜索命令 find 命令 grep 命令 vim 常用命令&#xff1a; 1.光标移动命令 2插入命令 3.删除命令 4.复制和粘贴命令 5.撤销和重做命令 6.查找和替换命令 7.文件操作命令 8.其他命令 cat命令 less 命令 more 命令 less和more命令的区别 less和vim命…

前端设计模式之【单例模式】

文章目录 前言介绍实现单例模式优缺点&#xff1f;后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端设计模式 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出…

计算机毕业设计 基于Web的视频及游戏管理平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

低于1.5kg轻薄笔记本不完全汇总(2023年11月)

本文对一些轻薄笔记本&#xff08; < 1.5kg &#xff09;的基本信息进行了汇总&#xff0c;仅供参考。其中“容量”列只记录了该机型的一种配置&#xff0c;不代表该机型只有这种配置。“屏幕”列中&#xff0c;除特殊说明外&#xff0c;OLED一般为镜面屏&#xff0c;IPS和L…

OSG交互:选中场景模型并高亮显示

1、目的 可以在osg视图中选中指定模型实体,并高亮显示。共分为两种,一种鼠标点选,一种框选。 2、鼠标点选 2.1 功能说明 生成两组对象,一组cow对象可以被选中,另一组robot不能被选中;点击cow对象被选中高亮,点击robot被选中不高亮;点击空白处,弹出“select nothing!…

【Git】Git的GUI图形化工具ssh协议IDEA集成Git

一、GIT的GUI图形化工具 1、介绍 Git自带的GUI工具&#xff0c;主界面中各个按钮的意思基本与界面文字一致&#xff0c;与git的命令差别不大。在了解自己所做的操作情况下&#xff0c;各个功能点开看下就知道是怎么操作的。即使不了解&#xff0c;只要不做push操作&#xff0c;…

Java,多线程,线程的两种创建方式

首先是多线程的一些相关概念&#xff1a; 相关概念&#xff1a; 程序&#xff08;program&#xff09;&#xff1a;为完成特定任务&#xff0c;用某种语言编写的一组指令的集合。即指一段静态&#xff08;指不在执行中&#xff09;的代码。 进程&#xff08;process&#xf…

MATLAB算法实战应用案例精讲-【目标检测】机器视觉-工业相机参数

目录 前言 知识储备 相机镜头工作原理 算法原理 相机模型 坐标系

中国电信终端产业联盟5G Inside行业子联盟正式成立!宏电股份作为副理事单位受邀加入

11月9日&#xff0c;中国电信于广州召开“2023中国电信终端生态合作暨中国电信终端产业联盟&#xff08;以下简称CTTA&#xff09;第十四次会员大会”&#xff0c;联盟成员齐聚现场。作为CTTA大会的一个重要环节&#xff0c;中国电信终端产业联盟5G Inside行业子联盟正式成立&a…

C# .NET6 Log4net输出日志

在 C# .NET6 开发中&#xff0c;log4net 是一个常用的日志记录框架&#xff0c;它可以帮助我们方便地输出日志信息。本教程将向你展示如何在 C# .NET6 中实现 log4net 的日志输出功能。 整体流程 下面是实现“C# .NET6 log4net 输出日志”的整体流程&#xff0c;我们将通过以下…

[PyTorch][chapter 61][强化学习-免模型学习 off-policy]

前言&#xff1a; 蒙特卡罗的学习基本流程&#xff1a; Policy Evaluation : 生成动作-状态轨迹,完成价值函数的估计。 Policy Improvement: 通过价值函数估计来优化policy。 同策略&#xff08;one-policy&#xff09;&#xff1a;产生 采样轨迹的策略 和要改…

美国材料与试验协会ASTM发布新版玩具安全标准 ASTM F963-23

美国材料与试验协会ASTM发布新版玩具安全标准 ASTM F963-23 2023年10月13日&#xff0c;美国材料与试验协会&#xff08;ASTM&#xff09;发布了新版玩具安全标准ASTM F963-23 ​根据CPSIA的规定&#xff0c;当ASTM将ASTM F963的拟定修订意见通知CPSC时&#xff0c;若CPSC认为…

实战leetcode(二)

Practice makes perfect&#xff01; 实战一&#xff1a; 这里我们运用快慢指针的思想&#xff0c;我们的slow和fast都指向第一个节点&#xff0c;我们的快指针一次走两步&#xff0c;慢指针一次走一步&#xff0c;当我们的fast指针走到尾的时候&#xff0c;我们的慢指针正好…

c#流程控制

c#分支语句 namespace ConsoleApp1 {internal class Program{static void Main(string[] args){Console.WriteLine("请输入学生成绩");string sConsole.ReadLine();int aint.Parse(s);//将字符类型强制转换为int类型if (a > 90){ Console.WriteLine("成绩优…

使用Nginx和Spring Gateway为SkyWalking的增加登录认证功能

文章目录 1、使用Nginx增加认证。2、使用Spring Gateway增加认证 SkyWalking的可视化后台是没有用户认证功能的&#xff0c;默认下所有知道地址的用户都能访问&#xff0c;官网是建议通过网关增加认证。 本文介绍通过Nginx和Spring Gateway两种方式 1、使用Nginx增加认证。 生…

切换数据库的临时表空间为temp1 / 切换数据库的undo表空间为 undotbs01

目录 ​编辑 一、切换临时表空间 1、登录数据库 2、查询默认临时表空间 3、创建临时表空间temp1&#xff08;我们的目标表空间&#xff09; 4、修改默认temp表空间 5、查询用户默认临时表空间 6、命令总结&#xff1a; 二、切换数据库的undo表空间 1、查询默认undo表…

电脑本地安装宝塔/docker 安装宝塔

一、先去docker官网(http://docker.com)下载软件并进行安装&#xff0c;网站打不开多试几次或者找梯子。 二、macos系统里按“command 空格”搜索“终端”回车&#xff0c;启动终端程序。 三、执行下面命令&#xff0c;拉取docker镜像。 docker pull pch18/baota:clear pch…

更换Master

Kubernetes 1.28 版本中更换节点需要以下步骤&#xff1a; 准备新节点 首先&#xff0c;需要准备好新节点&#xff0c;确保其满足 Kubernetes 集群的硬件和软件要求。具体要求可以参考 Kubernetes 官方文档。 添加新节点到集群 使用 kubectl join 命令将新节点添加到集群。…