class BasicArray{
int a[]=new int[10];
public BasicArray(){
for(int i=1;i<=10;i++)
   a[i-1]=i;
}
public void output(){
for(int i=0;i<10;i++)
System.out.println(a[i]);
}
}
public class test3 {    public static void main(String[] args) {
     BasicArray thisArray=new BasicArray();
     BasicArray thatArray=new BasicArray();
     thisArray=BasicArray.a;//这里说“无法无法从静态上下文中引用非静态 变量 a”。这个是什么意思,怎么改??        
         thisArray.output();
    }
    
}

解决方案 »

  1.   


    class BasicArray{ 
    int a[]=new int[10]; 
    public BasicArray(){ 
    for(int i=1;i <=10;i++) 
      a[i-1]=i; 

    public void output(){ 
    for(int i=0;i <10;i++) 
    System.out.println(a[i]); 


    public class test3 {     public static void main(String[] args) { 
        BasicArray thisArray=new BasicArray(); 
        BasicArray thatArray=new BasicArray(); 
        thisArray=thatArray; //这样        
            thisArray.output(); 
        } 
        
    }
      

  2.   

    main函数是static的,而a是非static的,java中规定静态方法不能访问本地的非静态变量,、把a变成static,或者thisArray.a
      

  3.   

    public class BasicArray {
    public static int a[]=new int[10]; 
    public BasicArray(){ 
    for(int i=1;i <=10;i++) 
      a[i-1]=i; 

    public void output(){ 
    for(int i=0;i <10;i++) 
    System.out.println(a[i]); 

    public static void main(String[] args) {
     int[] thisArray=new int[10]; 
        BasicArray basicArray=new BasicArray(); 
        thisArray=BasicArray.a;//这里说“无法无法从静态上下文中引用非静态 变量 a”。这个是什么意思,怎么改??        
        basicArray.output(); 
        } }
    静态方法:在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法
    介绍一个类
    Math:The class Math contains methods for performing basic numeric operations
    是用来做基础运算的,所有的方法都不需要实例变量值,因为方法都是静态的
    Math.abs(24.2); 
    static int abs(int a) 
              Returns the absolute value of an int value. 
              
     static 关键字标记出不需要实例的方法。
     //Math.min(42,36) 没有对象!绝对没有
     以类的名称调用静态方法
     
     静态方法不能够调用非静态的变量
     public class Duck {
     private int size;
     public static void main(String[] args) {
      System.out.print("size of duck"+size); }}
    //Cannot make a static reference to the non-static field size
    虚拟机不知道是要打印具体那只鸭子的size,所有静态方法不能够调用非静态的变量!
    静态方法也不能调用非静态方法静态变量的值对所有的实例来说是相同的
    package chapter5;
    class Value{ 
      static int c=0; 
      Value(){ 
        c=15; 
      } 
      Value(int i){ 
        c=i; 
      } 
      static void inc(){ 
        c++; 
      } 

    class Count{ 
      public static void prt(String s){ 
        System.out.println(s); 
      } 
        Value v=new Value(10); 
        static Value v1,v2; 
        static{ 
          prt("v1.c="+v1.c+"  v2.c="+v2.c); 
          v1=new Value(27); 
          prt("v1.c="+v1.c+"  v2.c="+v2.c); 
          v2=new Value(15); 
          prt("v1.c="+v1.c+"  v2.c="+v2.c); 
        }   public static void main(String[] args){ 
        Count ct=new Count(); 
        prt("ct.c="+ct.v.c); 
        prt("v1.c="+v1.c+"  v2.c="+v2.c); 
        v1.inc(); 
        prt("v1.c="+v1.c+"  v2.c="+v2.c); 
        prt("ct.c="+ct.v.c); 
      } 

    v1.c=0  v2.c=0
    v1.c=27  v2.c=27
    v1.c=15  v2.c=15
    ct.c=10
    v1.c=10  v2.c=10
    v1.c=11  v2.c=11
    ct.c=11
    记住实例变量,每个实例都有一个
        静态变量,每个类只有一个
      
      静态变量会在该类的任何静态方法执行之前就初始化,并且赋初始值 
      

  4.   

    首先你的那句代码是神意思啊
    thisArray=BasicArray.a
    想要访问a只能像我2楼说的那样访问,你这句话要是想给thisArray赋值的话,你写的那句话就太奇怪了,1z的知识给thisArray赋值为thatArray
      

  5.   


    LZ,a[]不是static的,无法通过类名调用,只能通过对象调用我再解释下为什么不能通过类名来导航到非static成员
    因为class只是一个抽象,例如你将Class A实例化之前,他是不会在内存中出现一个A的实例的,既然A实例都不存在,那A中的成员又怎么可能存在呢?
    而类中的static成员能通过类名来导航,就是因为只要classLoader(类加载器)加载了这个类之后,类中所有的static成员就存在了,所以能通过类名来导航到static成员
    不知道我表达清没有
      

  6.   

    对不起我写错了,我现在懂了!
    接下来,对每个thisArray的元素,把他的值赋值为下标元素的阶乘!并输出!这个要怎么办?
    我尝试写了一下,怎么也不对
      

  7.   


    class BasicArray{
        int a[]=new int[10];
    public BasicArray(){
    for(int i=1;i<=10;i++)
       a[i-1]=i;
    }
    public void output(){
    for(int i=0;i<10;i++)
    System.out.print(a[i]+"  ");
    }
    public int jiecheng(int x){
    int cal=0;
    for(int i=1;i<=x;i++)
    cal*=i;
    return cal;
    }
    }
    public class test3 {    public static void main(String[] args) {
         BasicArray thisArray=new BasicArray();
         BasicArray thatArray=new BasicArray();
         for(int i=0;i<10;i++)
         thisArray.a[i]=thisArray.jiecheng(i);
            thisArray.output();
        }
        
    }
    这个结果不对,为什么呢?
      

  8.   

    写一个method接收下标作为参数,返回算出的阶乘,这个不难,LZ多自己动脑
      

  9.   

    cal的初值付错了,不好意思!劳烦各位大侠!
      

  10.   

    jiecheng方法有问题,你的cal初始值为0,再怎么乘也是0啊!