面试题0003-试着输出未进行初始化的成员变量时,会有什么结果?
- 2020 年 8 月 26 日
- 筆記
- java面试题, static静态成员变量默认值, 变量初始化
如果我们尝试输出未进行初始化的成员变量时,会有什么样的情景发生?
直接上代码:
package components.javaTest.day3_20200826;
/**
* Question0003:
* 试着输出未进行初始化的成员变量时,会有什么结果?
*/
public class VariableInitialization {
public int a;
public static void main(String[] args) {
System.out.println("a:" + a);
}
}
大家可以先想一下,会有什么样的结果,“便已报错”、“0”、“null”...?
有了答案之后,我们看比真实结果:
可以看到编译期间报错了,
![]()
起初,没有看提示,会不会是认为变量a没有初始化导致编译报错了?
其实不是的:
![]()
根据应为提示,可以得知是由于a并不是由static修饰的变量,无法被引用在环境当中。
既然是由于a是非静态变量的缘故不能放在main方法里面,我们将其用static关键字修饰,并且看看main方法的输出结果:
package components.javaTest.day3_20200826; /** * Question0003: * 试着输出未进行初始化的成员变量时,会有什么结果? */ public class VariableInitialization { //public int a; public static int a; public static void main(String[] args) { System.out.println("a:" + a); } }
![]()
可以看到编译通过,执行成功,并且打印结果是0,那么问题来了:
a为什么=0?,我们先记住下面这几句真理
1.无论创建多少个对象,静态数据都只占用一份存储区域
2.static关键字不能应用于局部变量,即它只能作用于域(field)【成员变量、方法、类】
3.如果一个域是静态的基本类型域,也没有对它进行初始化,那么它就会获得基本类型的标准初值;如果他是一个对象引用,那么它的初始化值就是null
这里涉及到1个知识点,需要进行一次总结,就等下次吧,那就是“java对象的标准初始默认值的相关知识点总结”。
如果是非static修饰,但是并不是成员变量,而是在main方法中呢?
package components.javaTest.day3_20200826; /** * Question0003: * 试着输出未进行初始化的成员变量时,会有什么结果? */ public class VariableInitialization { //public int a; //public static int a; public static void main(String[] args) { int a; System.out.println("a:" + a); } }
![]()
可以看到编译器是报错了,提示a变量未曾初始化。
也就是
在java里面,一个对象如果没有初始化,是不能够被使用的,如果强行使用未被初始化的对象,编译时就会报错
【在没有找到反例之前,暂时可以理解它也是一条真理】
每日1道面试题分析,就到这,我们明天见!
非 淡 泊 无 以 明 志
非 宁 静 无 以 致 远 !