变量初始化的两种情况
- 对于成员变量,不管有没有显式初始化,JVM在类加载时会自动初始化为默认值。
- 对于局部变量,JVM不会进行自动初始化的操作,因此在调用前必须显式初始化,否则编译会出错。
PS:是否可以理解为堆内存中的变量会执行自动初始化操作,而栈中的不会?
三种默认值
- 对于引用数据类型,默认值为null;
- 对于boolean基本数据类型,默认值为false;
- 对于除boolean外的基本数据类型,默认值为0.
创建对象
- 对象声明:类名 对象名;
- 对象创建:对象名 = new 类名();
故在成员变量中,可以只进行对象声明,类加载时JVM会自动初始化为默认值null;而在局部变量中,必须进行对象的声明和创建(或其他初始化手段),否则编译出错。
对于成员变量:
public class Test {
private static String s;
public static void main(String[] args) {
System.out.println(s);
}
}
输出:
"C:\Program Files\Java\jdk-11.0.6\bin\java.exe" "-javaagent:E:\IDEA\IntelliJ IDEA 2020.2\lib\idea_rt.jar=44783:E:\IDEA\IntelliJ IDEA 2020.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\ASUS-PC\IdeaProjects\Test\out\production\Test test.Test
null
对于局部变量:
public class Test {
public static void main(String[] args) {
String s;
System.out.println(s);
}
}
输出:
C:\Users\ASUS-PC\IdeaProjects\Test\src\test\Test.java:7:28
java: 可能尚未初始化变量s
本文地址:https://blog.csdn.net/tjm19960112/article/details/108038886
您可能感兴趣的文章:
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
网友评论