[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();
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中的结果不一样,请问类之间的调用关系是什么样的?内部的执行是怎样的?求高手指教!
解决方案 »
- 怎样 在 下次 编译 程序时 不用输入 路径名啊!!
- 求助:(面试题)为了显示 myStr=23 这样的结果,写出在控制台输入的命令
- include file参数问题
- 初学者问题,如何在一个Jframe里面访问JPanel里面的控件
- 对java中static 与 abstract 关系的一点思考, 为什么不能在方法中同时存在??
- 截取字符串中特定字符的问题
- 请教,JDBC能否调用SQL SERVER中的自定义函数?
- !!!!!指点指点我吧!了解snmp通信常识#####确实很急!帮忙一下拉!
- 一个applet问题,求教!!
- How to run java frame application on linux
- swing 后台操作事件长 , 界面如何显示正在等待?
- 数组中去出所有0,
public static final int randomPort1= generator();
这个是常量,对于Test3来说只调用一次generator(); randomPort1不再改变,所以两次是一样的
对于Test2来说,每次都回重新启动运行(main方法启动),所以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的属性。
这句话表明randomPort1是个常量,所以Test3中的两个数都是一样。
但是Test2与Test3你是分两次执行的,所以当然随机生成的常量也都是不一样的撒。
radnomPort1 为常量,只有CharacterUtil类第一次调用会发生改变。
如果内中有静态的属性,就使用静态块初始化。不管类实例化几次,静态块中代码只执行一次,所以Test3返回的两个值是一样的、楼主可以debug试试、第二 Test2和Test3的值不同是正常的,因为Random()是个随机类!
基本可以理解,这种运行方式就如同在两台电脑上分别运行Test2与Test3,导致两次运行的结果不一直。
如果可能,请将Test3与Test2的main方法写在一起运行,就会发现其结果完全一下。