关于Java“静态”???

来源:百度知道 编辑:UC知道 时间:2024/06/27 07:07:36
import java.util.*;
class TryRandom
{ Random rand=new Random();
public static void main(String [] args)
{ int [] a;
int i=rand.nextInt(20);
System.out.println("i is:"+i);
a=new int[i];
System.out.println("length of a = " + a.length);


报错是:TryRandom.java:6: 无法从静态上下文中引用非静态 变量 rand
int i=rand.nextInt(20);
我想问的是:1,“int i=rand.nextInt(20);”怎么成了静态上下文了?
2,我在“Random rand=new Random();”前加了static后就没事了,这又怎么解释?我知道这儿的根本原因是int i=rand.nextInt(20);为静态上下文。
请大家帮俺看看……
小弟感激不尽

改成下面的样子就可以了,静态方法只能访问静态成员 没错的

import java.util.*;
class TryRandom
{ Random rand=new Random();
public showRand()
{ int [] a;
int i=rand.nextInt(20);
System.out.println("i is:"+i);
a=new int[i];
System.out.println("length of a = " + a.length);


public static void main(String [] args)
{
TryRand try = new TryRand();
try.showRand();
}

你把Random rand=new Random();
放到main()方法里面去也就不会报错。
因为main()是静态的方法,它会在你实例化rand这个对象之前被调用,
我们想象一下,一个对象都还没有实例化,main()方法怎么可以调用到这个对象呢。所以就会报错了。

一个类中首先编译的时候,静态语句也, 你上面的代码,虽然创建对象是当前类中定义的, 可是main()方法是静态的也, 如果在静态模块中引用非静态的对象当然报错呀