程序1:
public class a
{
  public string m="1234";
public void ma(string s)
{
  s.replace('1','2');
  s=s+"5678";
}
public static void main(string args[])
{a t=new a();
t.ma(m);
system.out.println(m);}
}程序2:
public class a
{
string m=new string("1234");
string n[]={"aaa"};
public void ma(string s,string [] aa)
{
  s="bad";
  aa[0]="bbb";
}
public static void main(string args[])
{a t=new a();
t.ma(t.m,t.n);
system.out.println(t.m+t.n);}
}
请问为什么程序1会出错(关于STATIC的错误)而程序2就可以正常通过呢?请帮助我

解决方案 »

  1.   

    m是  非静态的成员
    你或者在  main方法中定义m 就不会出问题了
      

  2.   

    m是非静态成员,非静态成员是在类被实例化的时候通过构造函数分配内存的,必须通过对象进行调用,如果该为static的话就可以直接通过类名调用了
      

  3.   

    我不太明白啊,这二个程序中的string m不都没有加STATIC 吗?那第二个程序为何就对了呢
      

  4.   

    楼主,如果你把程序1中的   t.ma(m); 改成t.ma(t.m); 就不会有问题了,因为t.m是通过你定义的对象t对m进行了引用的
      

  5.   

    main()之外的都必须定义成static才能调用
      

  6.   

    还是写写get set方法吧···看的有点晕了~~~
      

  7.   

    static修饰的不能调用没有static修饰的,
    因为道理跟main方法前面为什么加static一样的,程序运行前有static修饰的方法或变量会提前加载完成,如果里面有动态的方法就会错误,因为动态的方法得在程序运行后才会产生,也就是说你main方法产生时,ma方法还没存在,肯定就错了。而程序了则没有这个错误的情况,懂不?
      

  8.   

    谢谢大家特别要谢谢(jjj3751386)的讲解,刚开始我还以为public string m="1234"; 
    出了问题,原来症结是在t.ma(m);上,谢谢大家,我懂了