各位大侠帮忙看一下这个小程序,有没有问题,谢谢啦!
public class TestVar{
static int j;
public static void main(String[] args) {
int i = 0;
System.out.println(i);
System.out.println(j);
}
}
请问变量j能够正常输出吗?
public class TestVar{
static int j;
public static void main(String[] args) {
int i = 0;
System.out.println(i);
System.out.println(j);
}
}
请问变量j能够正常输出吗?
0
0
首先可以输出,输出是0
你要明白为什么输出0.你首先要明白static的意义。
static int a 和 int b
有什么区别?
区别就在加载顺序上!这个涉及到栈的概念!变量都是存在栈中
static int a 也就是静态变量!加载在这个类之前!也就是说。在这个类开始前。系统就为a分配了一段空间!但是不能平白无辜就说,我占用了这段内存资源!在计算机里,机器就会默认分配00 00去占这段内存。一个int 4个字节。内存中就是00 00
int b 是在程序运行到这一句 也就是第4句。才会被加载!才会分配空间
你就在这扯淡吧!
java的内存有:堆,虚拟机栈,本地方法栈,方法区,常量池等等,static变量是分配在方法区,而非堆,也不是栈。
看下面:-------这些都是每个类型的默认值
int : 0
byte : 0
long : 0
shor : 0
float : 0.0
double : 0.0
boolean : false
char : '\u0000'
object reference : null
比如说你写了个int a;
又写了个int b=1;
a与b 的区别在于给b赋值了,值是1.而a明显后面是";"也就是说a没有赋初始值,jav默认给它的值是int的型的默认值:也就是上面列出的 int:0;
那么如果写的是"Double c;"呢?
根据上面的表那么c的默认值就是"0.0"了.
public static void main(String[] args) {
int i;
System.out.println(i);
}上面的代码编译都通不过,别说输出0了。只有field(不管是不是static),也就是成员变量才有默认值。并不是所有的变量都有默认值。
LZ看下这个