java static 标示,以及static赋初值的问题。


一:我们知道static是在类加载的时候就加载的,我们今天主要来讲一个static赋初值与不赋初值的问题。

也就是:

private static int sum;//(1)
private static int sum= 0; //(2)

我们知道在java中如果没有给整形变量赋初值,他的默认值为0。当我们在前面给sum已经赋值的情况下,比如我们给sum赋值为10,即 sum = 10,然后我们在执行上面的(1)语句,我们再来看看我们sum的值,我们发现sum的值任然为10,没有被(1)中的语句赋值为0,因为在前面sum已经包含了正确的缓存值,也就是被赋予了10。我们执行上面(2)中的代码,我们再来看sum的值,我们发现,sum被赋值为0了,这是因为我们在(2)中显示的定义了sum的值为0,所以他会被重新赋值为0。我们来看看下面代码的例子就知道了。

package test52;

public class cache {
	static {
		inittest();
	}
	private static int sum =0; //(1) 当将sum的值设置为0的时候,其运行后的结果就为4950,
	/*
	 * 因为static是在程序加载前最先执行的,在开始执行完static代码块,执行inittest()方法,其中需要用到sum以及init,
	 * 因为开始程序还没有运行到初始化的值,所以采用默认的值,sum为0,init为false,执行完inittest()后sum的值为4950
	 * 然后 执行static sum =0;将sum再次设置为0,然后在初始化init将init再次设置false,
	 * 最后在调用getsum()的时候就会再次的调用inittest(),再次计算得到sum的值为4950
	 */
	
//	private static int sum ;  (2) // 用这句将得到的结果为9900
	/*
	 * 还是和上面的一样,首先是执行static代码,执行完static代码块的过程个上面的一样,执行完后的结果为4950,
	 * 但是下面他不会执行sum ,因为sum没有赋值,所以它会保留原来的sum值,也就是sum=4950.这也就是结果有差异的地方。*****
	 * 下面就是要执行init,因为它有赋值语句,所以这就是和上面的sum不执行的区别,因此赋值语句将init再次的sum 赋值为false,
	 * 最后在调用getsum()的时候再次的执行了inittest(),这时开始的sum为4950,所以执行完后的结果为9900.
	 * 这就是需要注意的地方,
	 */
	public static int getsum()
	{
		inittest();
		return sum;
	}
	/*
	 * 如果采用的是private static int sum ,得到的是9900,问题最大就是在下面的这句初始化语句,如果将其写在方法前面就不会有这样的问题出现,
	 */
	private static boolean init = false;
	public static synchronized void inittest()
	{
		if(!init)
		{
			for(int i=0;i<100;i++)
				sum +=i;
			init = true;
		}
	}
	public static void main(String[] args) {
		System.out.println(getsum());
	}
}
执行(1)语句我们得到的4950,执行(2)中的代码我们得到的是9900。
所以我们在以后使用static的时候一定要注意。

这个问题在java解惑中的52题,有详细的解析。又不好不对的地方,请大家指出来,谢谢。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,可以给 Java static int 变量初值。在 Java ,类的静态变量可以在声明时直接初始化,也可以在静态代码初始化。例如: ```java public class MyClass { static int myStaticInt = 10; static { myStaticInt = 20; } } ``` 上述代码,myStaticInt 变量在声明时被初始化为 10,然后在静态代码被重新值为 20。注意,静态变量的值会在类加载时被初始化,因此对于 final static 变量,它必须在声明时或静态代码被初始化,并且不能再被修改。 ### 回答2: 可以给javastatic int初值。在Javastatic关键字表示在类级别上定义的静态变量或静态方法。静态变量在类的所有实例之间共享,并且可以在没有创建类的实例的情况下使用。 对于静态int变量,可以在声明时为其初值。例如,可以这样声明并初始化一个静态int变量: ```java public class MyClass { static int myStaticInt = 10; public static void main(String[] args) { System.out.println(myStaticInt); // 输出10 } } ``` 在上面的例子,通过使用"static"关键字,我们创建了一个静态int变量myStaticInt,并将其初始化为10。可以在类的任何地方使用该静态变量,就像在main方法的System.out.println语句所示。 需要注意的是,静态变量在内存只有一份拷贝,可以被类的所有实例访问,因此当一个实例修改静态变量的值时,其他实例也会受到影响。 总结而言,可以给Java的静态int变量初值。这样做可以确保在使用该变量之前,它已经被正确初始化,并且可以在类的任何地方访问和使用。 ### 回答3: 在Java,对于static int ,是可以给其初值的。当我们声明static int变量时,如果不为其初值,默认情况下会被予0作为初始值。如果我们想要给static int变量予不同的初始值,可以使用值运算符来实现。 例如: public class Example { static int count = 0; // 初始值为0的static int变量 public static void main(String[] args) { System.out.println("初始值为: " + count); count = 10; // 重新值给static int变量 System.out.println("修改后的值为: " + count); } } 在上述例子,我们声明了一个名为count的static int变量,并予其初始值为0。然后在main方法,我们通过将count变量重新值为10来修改初始值。最终,在控制台上输出修改后的值为10。 总之,可以给Javastatic int变量予初始值,并且我们可以在程序随时修改其值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值