方法中局部变量的创建

这篇博客探讨了Java中变量的类型和作用域,指出实例变量是类的成员但不应使用`static`声明,局部变量必须初始化并在使用前创建。文章通过代码示例解释了变量在方法执行过程中的内存分配,强调了只有在变量被赋值时才会在局部变量表中分配内存。
摘要由CSDN通过智能技术生成

下面关于变量及其范围的陈述哪些是不正确的()

A 实例变量是类的成员变量

B实例变量用关键字static声明

C在方法中定义的局部变量在该方法被执行时创建

D局部变量在使用前必须被初始化

分析:
A.类的成员变量包括实例变量和类变量(静态变量),成员方法包括实例方法和类方法(静态方法)。 A正确
B.类变量(静态变量)用关键字static声明,B错误
C.方法中的局部变量在方法被调用加载时开始入栈时创建,方法入栈创建栈帧包括局部变量表操作数栈,局部变量表存放局部变量,并非在执行该方法时被创建,C错误
D.局部变量被使用前必须初始化,否则程序报错。D正确

补充:
不是局部变量在该方法被执行/调用时创建,而是应该为在该变量被声明并赋值时创建,可以理解为“当代码执行到该变量被赋值的代码时才被创建”
栈会为每个方法在运行的时候分配一块独立的栈帧内存区域,栈帧又包含“局部变量表”、“操作数栈”、“动态链接”以及“方法出口”四个部分。
举例说明:

public class Demo {
     
    public void test() {
        int a;
        int b = 5;
        int c = b + 4;
        a = 2;
    }
     
    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.test();
    }
}

定义了一个Demo类,其中有一个测试主方法main以及一个test()方法
那么在执行main的时候,内存分配如下
在这里插入图片描述

其中我们只看test()桢栈中具体的流程
在这里插入图片描述

首先我们使用javac Demo.java来生成Demo.class文件,然后通过执行javap -c Demo来查看执行原理,这里我只截取test()方法部分

其中
在这里插入图片描述

以上可以看出,虽然int a;在第一行就声明了a变量,但是直到给a赋值之后,才会在局部变量表中给a分配内存空间
我们可以把赋值的代码删掉,再看看执行流程

public class Demo {
     
    public void test() {
        int a;
        int b = 5;
        int c = b + 4;
    }
     
    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.test();
    }
}

在这里插入图片描述

这次我们可以看出,并没有对a就行任何操作,也就证明了“只有当给变量赋值的时候才会分配内存空间”的说法。
以上

转载于牛客网:https://www.nowcoder.com/test/question/done?tid=52441832&qid=373226#summary

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值