为什么Java中的局部变量必须要初始化?

作者&投稿:敞咽 (若有异议请与网页底部的电邮联系)
~ 现在假如你是java语言的开发者,你已经将对象保存在了堆内存中,而将局部变量保存在了栈内存中,你会怎么做呢?

Java中的变量分为类变量,成员变量和局部变量,分别位于JVM的方法区、堆内存和栈内存中。类变量和成员变量都可以在类首次加载和类初始化时,给出默认值,但是局部变量就必须要在使用前赋值。

实际上,Java完全可以设计成局部变量不需要初始化,只要作者们高兴。事实上,就有这样的语言,比如C++。

当然,C++不强制必须初始化,不代表就不用初始化,实际上,C++开发者也都是建议对局部变量初始化,以防止出现野指针这类事情。

其实,不管是局部变量还是成员变量,都是必须要初始化的,那为什么成员变量会自动初始化?其实正是因为成员变量属于对象,而对象是保存在堆中的,所以jvm就在初始化类的时候把成员变量初始化呢,而如果我们在调用方法的时候,还要jvm去将局部变量也进行初始化,是不是对会影响到性能呢?因此,直接强制局部变量必须要初始化反而更好。




为什么Java中的局部变量必须要初始化?
现在假如你是java语言的开发者,你已经将对象保存在了堆内存中,而将局部变量保存在了栈内存中,你会怎么做呢?Java中的变量分为类变量,成员变量和局部变量,分别位于JVM的方法区、堆内存和栈内存中。类变量和成员变量都可以在类首次加载和类初始化时,给出默认值,但是局部变量就必须要在使用前赋值。...

JAVA中局部变量和成员变量的区别
代码块局部变量 (代码块内定义):从定义这个变量开始到代码块结束这一段时间内有效 局部变量除了形参外,都必须显示初始化,也就是要指定一个初始值,否则不能访问。还有,在内存中的位置也不一样。成员变量在所在类被实例化后,存在堆内存中;局部变量在所在方法调用时,存在栈内存空间中。

java中全局变量和局部变量的区别
全局变量是指在整个项目中都可以使用这个变量,局部是指只能在当前类或子类,当前方法使用。

java中的成员变量、类变量,成员方法、类方法各是什么?
成员变量:成员变量是指定维度的成员变量,用于标识某个维度成员。由 Analysis Services 内部使用的值,以标识某个维度成员。MemberKeyColumn 属性指定维度的成员变量。例如,1 到 12 之间的某个数字可以是相应于年中的某个月的成员变量。类变量:在java中,类变量(也叫静态变量)是类中独立于方法之外的...

java中的空间分配问题:在java中,什么时候给成员变量、方法中局部变量...
java 中分基本数据类型和引用数据类型,基本数据类型,声明它就在栈中分配了空间,当运行时,还会附上初始值,应用数据类型:在声明它的时候也会在栈中分配内存空间,用来存储内存地址,如果没有赋值该地址指向一个空值(null),如果赋值,则该地址指向存储在堆中分配的地址,如果是new 则在堆中分配一个...

java中的$表示什么意思?
表示局部变量 表示全局变量 表示本地临时表的名称,以单个数字符号打头;它们仅对当前的用户连接是可见的 表示全局临时表 使用事例如下图所示:

java中成员变量和局部变量的区别
成员变量:1、成员变量定义在类中,在整个类中都可以被访问。2、成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。3、成员变量有默认初始化值。局部变量:1、局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。2、局部变量存在于栈内存中,作用...

java中局部变量的定义是定义在方法中的变量,for循环是方法吗?for循环...
局部变量和全局变量你要看使用范围,只能在方法内使用,是局部变量,如果你定义在方法外,那么整个类内都能使用,就是全局变量,for循环在方法内部,属于方法体,但是for循环不属于方法,方法的定义有固定格式,for循环不符合,比如public static void main(参数),其中static可有可无,void是无返回值,...

java中什么是接口?接口的作用是什么?
1、Java语言中存在的结构,有特定的语法和结构。2、Java语言中一个类所具有的方法的特征集合,是一种逻辑上的抽象。java接口作用:1、利于代码的规范 这样做的目的一方面是为了给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发...

java中局部变量只能申明在方法体里吗
局部变量:作为方法或语句块的成员而存在,存在于方法的参数列表和方法定义中。

互助土族自治县18359775920: 为什么JAVA局部变量一定要初始化 -
挚图复方: 这个是java编译的保护机制,不仅局部变量,全局变量当你使用时也会涉及到hava var not init.相关错误,所以这些都是些细节.初学先记着,到后面深入之后就会看到相关知识后就会有种豁然开朗的感觉.

互助土族自治县18359775920: Java局部变量为什么要初始化 用代码详细介绍一下 谢谢 -
挚图复方: 成员变量会被系统默认初始化,局部变量没这功能,所以必须自己初始化. 还要注意静态成员变量也没系统默认初始化,必须在初始化块或者定义时或者构造函数里进行手动初始化.

互助土族自治县18359775920: java 局部变量为什么必须付初始值 -
挚图复方: 这个不一定要初始化时赋值的.例如下面代码是没有问题的,但若将while (true) 这块代码去掉,则会报错 public void testMethod(){ int i; while (true) { i = 10; break; } System.err.print(i); }

互助土族自治县18359775920: java中为什么要为类的属性初始化? -
挚图复方: 1. 对于类的成员变量,不管程序有没有显式的进行初始化,Java虚拟机都会先自动给它初始化为默认值.默认值如下: Boolean false Char '\u0000'(null) byte (byte)0 short (short)0 int 0 long 0L float 0.0f double 0.0d2. 局部变量声明之后,Java虚拟机就不会自动给它初始化为默认值,因此局部变量的使用必须先经过显式的初始化. 但是需要声明的是:对于只负责接收一个表达式的值的局部变量可以不初始化,参与运算和直接输出等其它情况的局部变量需要初始化.

互助土族自治县18359775920: java 编程中为何创建变量后需要初始化
挚图复方: java是类型安全语言.java语言的这个设计来自这个想法: 一个变量在没有值之前是不能用它或准确的说不能读其值的,因为没有值,对它进行运算没有意义.因此,做个内置规定 在创建变量在使用前必须初始化,从而帮java程序员避免问题. 某个行为之所以会被编程语言归类为类型错误,通常是因为试 图对不适当类型的 值 进行运算.其分类的基本原则是:部分语 言设计者和程式员的看法认为,如果所有运算不引起程式瓦 解、安全上的瑕疵、或其它明显故障,即为合理的,而不视之 为一个错误;其他人则认为所有违背程式员意图的,就是错误 的,而且应该标上“不安全”.

互助土族自治县18359775920: java中局部变量必须要初始化吗 -
挚图复方: 你仔细看java基础,java局部变量都必须给初始值的,你用else的语句话 ,result 始终会在return的时候初始化一个值,因为不是if 分支就是else分支.而你用else if 语句的话,如果你输入的index<0 就不会进入任何分支,所以你返回的时候编译器就认为语法错误.

互助土族自治县18359775920: 为什么全局变量无须初始化,局部变量必须初始化 -
挚图复方: 这个说法本身就不对.变量需要不需要初始化是根据需要来进行的.全局变量有时也需要初始化,而局部变量其实大部分时间都没有初始化.不要把赋初值与初始化混淆了:初始化是由编译器做的,形成可执行文件后,那些变量的值就在软件文...

互助土族自治县18359775920: java 使用变量之前为什么必须先声明 -
挚图复方: 1. java使用变量之前是必须要声明的,没有声明编译都不能通过. 2. 声明之后,运行时计算机才能划分计算机空间给他,这样这个变量才能被使用.

互助土族自治县18359775920: java定义变量为什么要初赋值为null? -
挚图复方: 您好,很高兴为您解答,首先您需要了解变量的作用域问题,就是局部变量和成员变量的作用域范围对于成员变量来讲,首先其作作用域可以在该类可操作范围下生效,但是对于局部变量,只能对所包含的代码块(方法)之内生效,外部是无法访问的对于初始值的问题,成员变量如果基本类型,例如 int,那么初始值就为0,然后对其包装类型,初始值即为 null,在方法内部(局部变量)的变量是不具备默认值的,您的问题首先希望你搞懂变量的作用域范围,谢谢,晚安

互助土族自治县18359775920: java里 局部变量 可能尚未初始化 -
挚图复方: 这还用什么完整代码么?关键代码就能看出了 因为局部变量必须初始化才能用. 什么叫用?就是除了赋值之外的其它操作. 而for语句可能是不会进去的,所以程序不能保证ball会被初始化. 注意这里的for只循环 ball = new bg(i); 这一句,因为没有大括号. System.out.println(ball);不在循环里面.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网