Java未赋值变量的初始值解析(默认值)

 更新时间:2021年08月24日 10:01:14   作者:花木雨  
这篇文章主要介绍了Java未赋值变量的初始值(默认值),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Java未赋值变量的初始值(默认值)

初始值(默认值)

参考:官方文档

Java程序中,任何变量必须初始化后才能使用。

以下为不同数据类型的默认值。

数据类型 初始值
byte 0
short 0
int 0
long 0L
char ‘u0000'
float 0.0f
double 0
boolean false
所有引用类型 null

但并不是所有未初始化的变量都会赋默认值。

对应的面试编程题:以下代码会打印什么?

public static void main(String[] args) {
        int[] arr = new int[10];
        System.out.println(arr[0]);
 }
//打印: 0
public static void main(String[] args) {
        int a;
        System.out.println(a);
 }
//编译失败,提示“Error:(16, 28) java: 可能尚未初始化变量a”

下面根据不同的变量类型依次说明:

实例变量(非静态字段)

系统会初始化默认值

字段未被static修饰就是实例变量。在创建对象时,该变量会在分配内存阶段被赋予默认值,在执行new指令之后,被赋予程序定义的初始值。

public class Cat {
    // 实例变量
    int age;
}

类变量(静态字段)

系统会初始化默认值

字段被static修饰就是类变量。在类加载的准备阶段,该变量会被赋予默认值,在类加载的初始化阶段,会被赋予程序定义的初始值。

public class Cat {
    // 类变量
    static int age;
}

本地变量

系统不会初始化默认值

方法块中定义的变量为本地变量。该变量必须在代码中显示赋值,否则会提示编译错误。

    public static void main(String[] args) {
        // 本地变量
        int a = 0;
    }

参数

无需初始化默认值

参数很好理解,如下所示,args就是参数。参数又分实参和形参。参数的值在调用该方法时传入。

 // args 就是参数
    public static void main(String[] args) {
    
    }

解决java未赋值变量的默认值问题

如下所示

package demo;
import java.util.Arrays;
public class demo {  
    /*类字段变量可以不赋初值不报错,其他变量一律要赋初值  
     * 不管程序有没有显示的初始化,Java 虚拟机都会先自动给它初始化为默认值。
     * 1、整数类型(byte、short、int、long)的基本类型变量的默认值为0。
     * 2、单精度浮点型(float)的基本类型变量的默认值为0.0f。
     * 3、双精度浮点型(double)的基本类型变量的默认值为0.0d。
     * 4、字符型(char)的基本类型变量的默认为 “/u0000”。
     * 5、布尔性的基本类型变量的默认值为 false。
     * 6、引用类型的变量是默认值为 null,如int[] a;。
     */
    public int  i1;  
    public static int i2;  
    public int[] a=new int[5];//见main()方法中的int[] b=new int[5];
    public static void main(String[] args) {  
        /* 方法中的局部变量,ava 虚拟机不会自动的为它初始化为默认值。
         * 因此对于局部变量,必须先经过显示的初始化,才能使用它。
         * 如果编译器确认一个局部变量在使用之前可能没有被初始化,编译器将报错。
         */
        //int i3;  
        int[] b=new int[5];//数组变量实例化后,如果没有显式为每个元素赋值,Java 就会把该数组的所有元素初始化为其相应类型的默认值
        System.out.println(new demo().i1); //输出0 
        System.out.println(i2);            //输出0
        //System.out.println(i3);          //会报错
        System.out.println(Arrays.toString(new demo().a));//此处为int型,默认输出{0,0,0,0,0}。  
    }  
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的详细步骤

    最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的详细步骤

    idea开发工具一直是java环境最好用,很受广大开发者喜爱,今天通过本文给大家分享最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的详细步骤,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2021-06-06
  • 解决BeanUtils.copyProperties之大坑

    解决BeanUtils.copyProperties之大坑

    这篇文章主要介绍了解决BeanUtils.copyProperties之大坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 一文解析Java中的方法重写

    一文解析Java中的方法重写

    子类继承父类后,可以在子类中书写一个与父类同名同参的方法,从而实现对父类中同名同参数的方法的覆盖,我们把这一过程叫做方法的重写。本文将分析一下Java中的方法重写,感兴趣的可以了解一下
    2022-07-07
  • spring拓展之如何定义自己的namespace

    spring拓展之如何定义自己的namespace

    这篇文章主要介绍了spring拓展之如何定义自己的namespace方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • SpringBoot Maven项目中Model间的最佳继承设计详解

    SpringBoot Maven项目中Model间的最佳继承设计详解

    这篇文章主要为大家详细介绍了SpringBoot中一个优秀Maven项目的各Model间最佳继承设计的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2024-01-01
  • Java并发内存模型详情

    Java并发内存模型详情

    这篇文章主要介绍了Java并发内存模型,Java是一门支持多线程执行的语言,要编写正确的并发程序,了解Java内存模型是重要前提。而了解硬件内存模型有助于理解程序的执行,下面文章就来看看详细内容吧
    2021-10-10
  • Mybatis Plus select 实现只查询部分字段

    Mybatis Plus select 实现只查询部分字段

    这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java责任链设计模式实例分析

    Java责任链设计模式实例分析

    这篇文章主要介绍了Java责任链设计模式,结合实例形式详细分析了Java责任链设计模式的原理与相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Java数组与堆栈相关知识总结

    Java数组与堆栈相关知识总结

    今天给大家带来的是关于Java的相关知识,文章围绕着Java数组与堆栈展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Spring MVC 基于URL的映射规则(注解版)

    Spring MVC 基于URL的映射规则(注解版)

    这篇文章主要介绍了Spring MVC 基于URL的映射规则(注解版) ,详细的介绍了几种方式,有兴趣的可以了解一下
    2017-05-05

最新评论