黑马程序员技术交流社区

标题: 各位大神看一下,为什么在构造函数中初始化的一个随机数,输出总是0 [打印本页]

作者: 尘埃123    时间: 2015-5-8 08:51
标题: 各位大神看一下,为什么在构造函数中初始化的一个随机数,输出总是0
  1. class  a
  2. {
  3.    static private int i;
  4.          a()
  5.         {
  6.                 int i=(int)Math.random()*10+1;
  7.         }
  8.        
  9.         public static void main(String[] args)
  10.         {
  11.                 System.out.println(i);
  12.         }
  13. }
复制代码

作者: smartisan    时间: 2015-5-8 09:11
下面打印的i是你第三行定义的i,肯定都是0。还有你的06行如果生效的话打印结果都是1,是因为运算符优先级的问题,再好好改改吧
作者: 2666fff    时间: 2015-5-8 09:15
a 函数是什么鬼,你定义他有什么用,定义了你也没用他
作者: csu050416    时间: 2015-5-8 09:26
在主函数先调用一下a()
作者: 尘埃123    时间: 2015-5-8 09:44
smartisan 发表于 2015-5-8 09:11
下面打印的i是你第三行定义的i,肯定都是0。还有你的06行如果生效的话打印结果都是1,是因为运算符优先级的 ...

第6行的代码应该是这样的:i=(int)(Math.random()*10+1);丢括号了,
作者: 尘埃123    时间: 2015-5-8 09:53
csu050416 发表于 2015-5-8 09:26
在主函数先调用一下a()

a是构造函数,怎么能调用

作者: 1017161726    时间: 2015-5-8 09:54
亲,有几个问题,你的类 a 最好大写,你的 i 定义了两遍,你的随机数强转没加括号。当然,你每次都打印 0 ,主要是因为没有new a对象,主函数是程序的入口,调用主函数时应该这个类还没有构造。
作者: 小栀子    时间: 2015-5-8 12:06
需要在main方法中创建a对象,因为i是静态变量,在类之前被加载,所以main方法中输出的i是类加载之前去内存中取的,值是申明时默认的0。
作者: 396460221    时间: 2015-5-8 16:04
主函数调用的是类的成员i,因为你没有初始化但有默认值是0.如果你想调用a()中的i,要new 对象。其实我想你应该是这么想的,想让a()中给i赋值,但你前面有int  i , 这是重新声明变量,不是给成员i赋值。
作者: 懒儿想想    时间: 2015-5-9 16:49
i=(int)(Math.random()*10+1) 这个是什么意思,小白
作者: 尘埃123    时间: 2015-5-10 09:47
1017161726 发表于 2015-5-8 09:54
亲,有几个问题,你的类 a 最好大写,你的 i 定义了两遍,你的随机数强转没加括号。当然,你每次都打印 0  ...

受教了,果真是
作者: 尘埃123    时间: 2015-5-10 09:49
396460221 发表于 2015-5-8 16:04
主函数调用的是类的成员i,因为你没有初始化但有默认值是0.如果你想调用a()中的i,要new 对象。其实我想你 ...

对  想法有问题  已经改了  谢了
作者: V_nan    时间: 2015-5-10 10:08
貌似就没有创建对象····构造函数都没执行过
作者: LPStone    时间: 2015-5-10 10:14
2666fff 发表于 2015-5-8 09:15
a 函数是什么鬼,你定义他有什么用,定义了你也没用他

大神火眼金睛!
作者: zy18692243338    时间: 2015-5-10 11:49
你这不是两个类,定义构造做什么!!!
作者: zuoyou    时间: 2015-5-10 11:53
运算顺序是,你先强转为int 再乘10,在强转是就被转为0了。
作者: ZSMAN    时间: 2015-5-10 13:12
调用构造函数啊~
作者: as12510    时间: 2015-5-10 13:20
你只要不new a  你的构造方法就不会运行。所以你输出的i是默认值 0




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2