在1中,I只能在MAIN方法内部用,而且每次调用它都等于十
在2中,I是静态变量,这种静态变量只初始化一次,如果虚拟机或者服务器不关闭,你改变一次它的值,它就保存这个值,如果在1中,你改变后,再调用I,它的初始值还是十.同时,如果你这个类中有别的方法,那么它中也可以调用这个类,而I的值由于是静态的,所以每个方法都会改变它的值,他们可以互相影响.
在2中,I是静态变量,这种静态变量只初始化一次,如果虚拟机或者服务器不关闭,你改变一次它的值,它就保存这个值,如果在1中,你改变后,再调用I,它的初始值还是十.同时,如果你这个类中有别的方法,那么它中也可以调用这个类,而I的值由于是静态的,所以每个方法都会改变它的值,他们可以互相影响.
解决方案 »
- 比如:一个数组1ab43il526a写一个方法使其输出结果:1ab23il456
- Java如何模拟鼠标点击
- 大家新年好,我是刚学JAVA的,最近想用java编个和windows自带的计算器一样的计算器,但是现在在布局方面有一点小问题!
- 一个post的问题,谢谢(50分)
- 为何我的class文件在浏览器中加载不进来呢?
- 一个加法的代码,感觉还是有些地方别扭,请高手完善!
- 如何控制一个类只有10个实例?我的有怎么修改,解决有分
- 如何用random 取任意值!!~~~~~~100分求教~~~~~~~~~~~~~~~~
- java命名规范?
- 为什么要限制我进入csdn(说我的ip被禁止进入)?
- 急!组成字符串是有长度要求 4个字节(这四个字节表示数据长度)+数据,
- ArraySet 與 ArrayMap 在那兒?
不过我再在I。II后面分别加一句
Ststem.out.println(i);
而结果都是一样的
都为10
???????
i:10
i+10:1010
这里看不出静态成员字段和非静态成员字段的区别
把程序的main函数改动一下:
1、
public class Class
{
static int i=10;
void f()
{
i++;
}
public static void main(String[] args)
{
Class one,two;
one = new Class();
two = new Class();
one.f();
System.out.println("two.i:"+two.i);
}
}
2、
public class Class
{
int i=10;
void f()
{
i++;
}
public static void main(String[] args)
{
Class one,two;
one = new Class();
two = new Class();
one.f();
System.out.println("two.i:"+two.i);
}
}
1的结果为two.i:11
2的结果为two.i:10
可见,static关键字使成员字段和类联系起来和不是和对象联系起来,对static成员字段的修改会影响到整个类的所有成员。
还要注意的一点就是:
System.out.println("i+10:"+i+10);
中"i+10:"+i+10
由从左到右的结合性,10也要先转换成字符串,然后形成字符串的相加。