一个学习中发现的问题,请明白人来解答
[size=24px]package com.shengsiyuan.io;
import java.util.Random;
public class CharacterUtil
{
public static final int randomPort1= generator();
public static int generator()
{
Random ran = new Random();
int num = ran.nextInt(1000);
return num;
}
}
2.package com.shengsiyuan.io;
public class Test2
{
public static void main(String[] args)
{
int a = CharacterUtil.randomPort1;
System.out.println(a);
}
}
3.package com.shengsiyuan.io;
import java.util.Random;
public class Test3 extends Thread
{
public static void main(String[] args)
{
int num1 = CharacterUtil.randomPort1;
int num2 = CharacterUtil.randomPort1;
System.out.println(num1);
System.out.println(num2);
}
}
两个类都调用了,CharacterUtil类,但是Test3类的输出结果num1,num2,是一样的,但是为什么会和Test2中的结果不一样,请问类之间的调用关系是什么样的?内部的执行是怎样的?求高手指教!
[解决办法]
因为
public static final int randomPort1= generator();
这个是常量,对于Test3来说只调用一次generator(); randomPort1不再改变,所以两次是一样的
对于Test2来说,每次都回重新启动运行(main方法启动),所以generator()在每次启动获得的值不同,所以不一样
[解决办法]
1、public static final int randomPort1= generator();
改为 public int randomPort1= generator();
2、Test3中改为:CharacterUtil c1 = new CharacterUtil();
CharacterUtil c2 = new CharacterUtil();
int num1 = c1.randomPort1;
int num2 = c2.randomPort1;
main方法是static的,只能调用static的属性。
[解决办法]