A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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. }
复制代码

17 个回复

倒序浏览
下面打印的i是你第三行定义的i,肯定都是0。还有你的06行如果生效的话打印结果都是1,是因为运算符优先级的问题,再好好改改吧
回复 使用道具 举报
a 函数是什么鬼,你定义他有什么用,定义了你也没用他
回复 使用道具 举报
在主函数先调用一下a()
回复 使用道具 举报
smartisan 发表于 2015-5-8 09:11
下面打印的i是你第三行定义的i,肯定都是0。还有你的06行如果生效的话打印结果都是1,是因为运算符优先级的 ...

第6行的代码应该是这样的:i=(int)(Math.random()*10+1);丢括号了,
回复 使用道具 举报
csu050416 发表于 2015-5-8 09:26
在主函数先调用一下a()

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

受教了,果真是
回复 使用道具 举报
396460221 发表于 2015-5-8 16:04
主函数调用的是类的成员i,因为你没有初始化但有默认值是0.如果你想调用a()中的i,要new 对象。其实我想你 ...

对  想法有问题  已经改了  谢了
回复 使用道具 举报
V_nan 中级黑马 2015-5-10 10:08:15
13#
貌似就没有创建对象····构造函数都没执行过
回复 使用道具 举报
2666fff 发表于 2015-5-8 09:15
a 函数是什么鬼,你定义他有什么用,定义了你也没用他

大神火眼金睛!
回复 使用道具 举报
你这不是两个类,定义构造做什么!!!
回复 使用道具 举报
运算顺序是,你先强转为int 再乘10,在强转是就被转为0了。
回复 使用道具 举报
ZSMAN 中级黑马 2015-5-10 13:12:02
17#
调用构造函数啊~
回复 使用道具 举报
你只要不new a  你的构造方法就不会运行。所以你输出的i是默认值 0
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马