局部变量和成员变量的初始值问题-阿里云开发者社区

开发者社区> java隋七哥> 正文

局部变量和成员变量的初始值问题

简介: 引言 大家都知道,在java中,成员变量是可以不用给初始值的,默认就有一个初始值。而局部变量,必须显示给予一个初始值,否则编译无法通过。大家在学习的时候,一般是直接把这个结论直接记下,很少去考虑原因。
+关注继续查看

引言

大家都知道,在java中,成员变量是可以不用给初始值的,默认就有一个初始值。而局部变量,必须显示给予一个初始值,否则编译无法通过。大家在学习的时候,一般是直接把这个结论直接记下,很少去考虑原因。

所以,这是为什么呢?

正文

比如


img_bf1074fdb15413bd451873effb3f35a5.png

这段代码是会出现如下编译异常的


img_eb1177bddf52f9055f984f485e19f075.png

但是,像下面这么写就不会


img_1658f33e5f53a30187216630cf5e813e.png

javac这么设计的原因,不是因为推断不出局部变量的初始值,而是出于严谨性的考虑。

成员变量

无法确定你的调用顺序,例如,你可以这么调


img_39e8bccc62deb3f4b601ebf4161bc7f0.png

也可以这么调


img_31206f1691be396c8cf494b9e1ea65b8.png

编译器无法确定name的初始值,于是给了一个初始值。真正的值,交给jvm在运行时期处理。

局部变量

可以明确你的调用顺序,我相信应该没人会像下面这么写


img_33c4e83d7eea8d7a15a418ad6c6aea99.png

在局部变量中,必然是先声明一个变量,再进行赋值。于是,java的编译器觉得,既然你肯定是先声明一个变量,再调这个变量了。那就在声明的时候,就把初始值给我吧。不是我不能推断你的初始值,而是让你在声明的时候就把初始值给我,我是为你好,帮你减少代码出错的可能性。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
局部变量和成员变量的初始值问题
引言 大家都知道,在java中,成员变量是可以不用给初始值的,默认就有一个初始值。而局部变量,必须显示给予一个初始值,否则编译无法通过。大家在学习的时候,一般是直接把这个结论直接记下,很少去考虑原因。
578 0
【Java】java使用反射访问对象方法和成员变量
虽然java是一门静态语言,但是java的反射机制却给java提供了很强大的动态特性,其特点是能让java支持在运行时才能得知名称与内部结构的类,并能访问其所有的方法和成员变量,包括私有方法和私有成员变量。下面我写了一个比较简洁的测试代码,供参考和使用。 测试类 //OBClass.java package com.obo.javaassistdemo; public class
1482 0
用xcode和excel整理类的成员函数和成员变量
这个是以前情况才实用: 1. 没有debug symbol的类 2. 类被很多宏隔开了,都说不清楚那些宏的启用的 3. Category和Extension隔开了 整理函数: 1. 把程序运行起来,点击调试工具的暂停。
668 0
shell 全局和局部变量
/******************************************************************** * shell 全局和局部变量 * 声明: * 到目前为止,在写shell脚本的时候,经常被shell的函数中的变量 * 作用域搞得糊涂,于是今天特意查了点资料,看到底怎么回事。
608 0
面试5 如何理解静态变量,局部变量,全局变量
静态变量:在程序运行期间分配的固定的存储空间变量,称为静态变量。 局部变量:在一个函数的内部定义的内部变量,它只在本函数范围内部有效,只有在本函数内部才能使用,在本函数以为是不能进行使用的,称为局部变量。
637 0
102
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载