java:不能对非静态字段 rand 进行静态引用

packagecom.lzw;importjava.util.Random;publicclassFinalStaticData{//问题在这行,说这里要加staticR... package com.lzw;
import java.util.Random;

public class FinalStaticData {
//问题在这行,说这里要加static Random rand=new Random();
final int a=rand.nextInt(10);
static final int b=rand.nextInt(10);

public static void main(String args[]){
FinalStaticData c=new FinalStaticData();
System.out.println(c.a);
System.out.println(c.b);

FinalStaticData d=new FinalStaticData();
System.out.println(d.a);
System.out.println(d.b);
}

}
求解
展开
 我来答
老冯文库
推荐于2017-11-25 · 知道合伙人软件行家
老冯文库
知道合伙人软件行家
采纳数:1139 获赞数:8734

向TA提问 私信TA
展开全部
静态方法不能访问非静态成员(包括静态方法和静态变量),但非静态方法可以静态成员和非静态成员。
方法或变量加上static声明就被定义为静态成员。
静态成员属于类所有,被类的所有对象共享,它在程序预编译期间就能确定。非静态成员属于对象所有,而对象需要在程序运行期间分配空间。故在预编译期间就能确定的静态成员不能访问需要在程序运行时才能确定的非静态成员。
针对你的问题,main是静态方法,它只能访问静态成员,所以它可以访问static的b,不能访问没有static声明的rand,解决方法就是在成员声明前加static关键字,表明该成员是静态成员。
追问
那主方法为什么可以访问变量a呢
追答
final声明的变量即为常量,常量也是在预编译期间分配存储空间的,静态成员也可以访问。
没有响应m2
2012-02-24 · TA获得超过8387个赞
知道大有可为答主
回答量:7579
采纳率:33%
帮助的人:3529万
展开全部
.改成这样看看
public class FinalStaticData {
//问题在这行,说这里要加static Random rand;
final int a=rand.nextInt(10);
static final int b=rand.nextInt(10);
FinalStaticDate()
{
rand==new Random();
}
public static void main(String args[]){
FinalStaticData c=new FinalStaticData();
System.out.println(c.a);
System.out.println(c.b);

FinalStaticData d=new FinalStaticData();
System.out.println(d.a);
System.out.println(d.b);
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式