Java 类变量和局部变量的区别

Java变量初始化详解
本文深入解析Java中类变量与局部变量的初始化特性,探讨其默认值及初始化必要性。通过代码示例,清晰展示不同变量类型的默认值,并对比类变量与局部变量在内存分配上的差异。

Java 类变量有默认值,可以不初始化;

但局部变量没有默认值,必须要初始化

先看下面这道选择题(选择B)

下面有关  java  实例变量 , 局部变量 , 类变量和  final   变量的说法,错误的是?   (  )

A.实例变量指的是类中定义的变量,即类成员变量,如果没有初始化,会有默认值

B.局部变量指的是在方法中定义的变量,如果没有初始化,会有默认值           

C. 类变量指的是用 static 修饰的属性

D. final 变量指的是用 final 修饰的变量

首先看类变量和局部变量的区别

类变量(实例变量):定义在类中,方法体之外。成员变量前面加 static 修饰符
局部变量:定义在方法体,构造方法,语句块中的变量。

在Java虚拟机中

      Java虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存放局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在栈帧分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。这句话就说明了局部变量在创建时就必须进行初始化以确定分配内存大小。

  Java堆存放所有对象的实例,几乎所有的对象实例都在这里分配内存。在hotspot虚拟机中,内存分配后,虚拟机需要将分配到的内存空间都初始化为零值。这一步操作保证了对象的实例字段在Java代码中可以不赋初始值就直接使用,程序能访问到的这些字段的数据类型所对应的零值。

 

代码验证一下局部变量必须初始化之后才可以使用,否则就会报错

/**
 * @ Author zhangsf
 * @CreateTime 2020/2/23 - 11:35 AM
 */
package FactoryPattern;

public class D1{
    public static void main(String[] args){
        int i;  //定义一个局部变量,没有赋值
        System.out.println("i is" + i);
    }
}

类变量定义后可以不初始化,因为它有默认值

变量类型默认值
int,byte,short,long0
char一个空格
float,double0.0
引用值(比如String)null

 

定义类变量(静态变量)x1-x8(包含Java中的8种基本数据类型)

不初始化但是它编译成功运行结果可以看出类变量有默认值,

并且是各个类型类变量的默认值

char类型初始值空格输出为一个空格

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangvalue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值