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


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

    1. String fileRename = null;
    2. File fileToSave = null;

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

    这种方式更好的原因是:

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

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

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

    List fileUrls = new ArrayList(); 

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

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

    List fileUrls = null;

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

    如果你在代码的某个地方声明了一个名为fileUrlsList变量,并将其初始化为null,那么在后续引用这个变量时需要注意空指针异常(NullPointerException)的问题。

    在使用fileUrls之前,你应该先检查它是否为空。可以使用条件语句(例如if语句)来检查变量是否为null,然后再进行相应的处理。

    1. if (fileUrls != null) {
    2. // 在这里可以安全地使用 fileUrls 变量
    3. // 例如,可以调用 fileUrls 的方法或迭代它的元素 // 示例:遍历并输出每个文件URL
    4. for (String url : fileUrls) {
    5. System.out.println(url);
    6. }
    7. } else {
    8. // 如果 fileUrls 为 null,可以根据需求做出相应的处理 // 示例:打印出提示信息
    9. System.out.println("fileUrls 是 null");
    10. }

    在上述代码中,首先检查fileUrls是否为null,如果不为null,则执行相应的操作,否则执行备选方案。

    请记住,在使用任何可能为空的变量之前,都应该先进行空值检查,以提高代码的健壮性和可靠性。

            当然除了将List类型的变量初始化为null,还有其他多种方式可以对其进行初始化。以下是几种常见的初始化方式:

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

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

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

      1. CodeList fileUrls;
      2. {
      3.   fileUrls = new ArrayList<>();
      4.   fileUrls.add("url1");
      5.   fileUrls.add("url2");
      6.   fileUrls.add("url3");
      7. }

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

      1. CodeList fileUrls = Stream.of("url1", "url2", "url3")
      2.                               .collect(Collectors.toList());
    5. 使用双括号初始化(Double Brace Initialization):

      1. CodeList fileUrls = new ArrayList() {{
      2.   add("url1");
      3.   add("url2");
      4.   add("url3");
      5. }};

    补充:

    变量赋值
    初始化变量是指为变量指定一个明确的初始值。初始化变量有两种方式:一种是声明时直接赋值,一种是先声明、后赋值。如下代码分别使用两种方式对变量进行了初始化。

    char usersex='女'; // 直接赋值

    或者

    1. String username; // 先声明
    2. username ="琪琪"; // 后赋值

    另外,多个同类型的变量可以同时定义或者初始化,但是多个变量中间要使用逗号分隔,声明结束时用分号分隔。

    1. String username,address,phone,tel; // 声明多个变量
    2. int num1=12,num2=23,result=35; // 声明并初始化多个变量

    Java 中初始化变量时需要注意以下事项:

    变量是类或者结构中的字段,如果没有显式地初始化,默认状态下创建变量并默认初始值为 0。
    方法中的变量必须显式地初始化,否则在使用该变量时就会出错

    其实关于变量初始化的方式,Java提供了四种变量初始化的方式。

            Java中所有变量都有默认值,这个默认值取决于变量的类型,而不是变量名或具体的值。如果变量没有被赋予初始值,那么系统会自动将其初始化成对应类型的默认值。

    使用默认值初始化变量

            Java的基本数据类型中,数字类型默认值为0,布尔类型默认值为false,引用数据类型默认值为null。例如:

    1. int num;
    2. boolean flag;
    3. String str;
    4. System.out.println(num); //输出0
    5. System.out.println(flag); //输出false
    6. System.out.println(str); //输出null

    直接赋值初始化变量

    直接赋值是指在创建变量时直接将具体的值赋给变量,这种方式最为常见。例如:

    1. ​​​​​​​int num = 10;
    2. String str = "hello";
    3. double pi = 3.1415926;

    这种方式最为常见,也最易理解,直接将变量赋值成所需的值即可。

    通过构造方法初始化变量

            通过构造方法初始化变量的方式与直接赋值类似,只不过这种方式是通过类的构造函数来将变量初始化。例如:

    1. public class Person {
    2. private String name;
    3. private int age;
    4. }
    5. public Person() {
    6. name = "张三";
    7. age = 18;
    8. }
    9. }

    在这个示例代码中,类Person中的构造函数初始化了两个变量name和age,在创建Person类对象时变量就被初始化为默认值。

    通过静态块初始化变量

    Java还提供了一种通过静态块来初始化变量的方式,静态块是在类加载的时候执行的,优先于构造方法的执行。静态块只会执行一次,当类被多次加载时,静态块也只会执行一次。例如:

    1. public class Person {
    2. private static String nation;
    3. }
    4. static{
    5. nation = "China";
    6. }
    7. }

    在上述代码中,类Person中的静态块初始化了变量nation,该变量会在类加载时初始化为"China"。

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

  • 相关阅读:
    Android 在TextView前面添加多个任意View且不影响换行
    python如何将一个dataframe快速写入clickhouse
    「学习笔记」gdb 调试的简单操作
    华为机试真题 C++ 实现【工号不够用了怎么办?】
    ubuntu-常用配置-记录
    Go语言中的File文件操作
    element打包部署出现iconfont图标乱码
    赛桨PaddleScience v1.0 Beta:基于飞桨核心框架的科学计算通用求解器
    《30天吃掉那只 TensorFlow2.0》 一、TensorFlow的建模流程
    sql注入之高权限注入和文件读写
  • 原文地址:https://blog.csdn.net/weixin_49171365/article/details/134324480