package client;public   class MesSend {

 public static String message;
 
 
 public void  outmes(String str){
 message=str;
 //System.out.print(message);
 }
 
 public  String send(){
 
 System.out.print(message);
 return message;
 
 }
}
以上这个类是用于传递值,在另外个类里掉用outmes赋值,为什么第3个类调用send返回null呢?
有问题,怎么才能解决呢?谢谢,另外,static的message是不是指向一个空间呢?所有调用message的都从那一个空间调用呢?

解决方案 »

  1.   

    lz可能是调用除了问题,我用以下这个类调用测试完全没问题,而且message不必要声明为static,如果声明为static其实可以用类来操作message属性,不用再写方法了,一般这种情况下message应该声明为privateclass Test 
    {
    public static void main(String [] args){
    MesSend obj=new MesSend();
    obj.outmes("aa");
    System.out.println(obj.send());
    }
    }
      

  2.   

    你说的没错。static的message是属于类MesSend的,在内存空间中只存在一份,所有对message的访问都是读写那个静态的存储空间,而与你创建了多少个MesSend对象没有关系。甚至可以不用创建任何MesSend的对象就能访问message.
      

  3.   

    你在第二个类里new了一个MesSend ,调用outmes,设置了message的值,但在第三个类里你是不是又new了一个MesSend?,如果是的话,那是肯定不对的你试试将第二个类里的MesSend 对象传给第三个类里去
      

  4.   

    现在 改成这样package client;public   class MesSend {

     public static String mesStr;
    /*public MesSend(String str){
     mesStr=str;
     }*/
     
    }
    直接调用mesStr传,还是不行
      

  5.   

    应该是赋值后,调用send之前,通过其他引用将这片内存置为null了。
    1.可能你在第三个类调用outmes(String str)之后,将str置成null了吧。调用outmes(String str)之后,MesSend.message和str指向同一片内存,置str为空,就置MesSend.message为空了。
    2.message是static变量,调用outmes(String str)赋值后,可能又用MesSend的其他实例操作message了。
      

  6.   

    up,其实就是两个类之间的传递,现在把我第一个类里定义了一个static的String 类型STR,每间隔5秒钟就检查其是否为空,若不是空,执行操作。在另个类里当不为null时候才静态调用STR,给其值,但传递过来为什么还是null呢?
      

  7.   

    估计是outmes被误调用了,要么就是根本就没有调用。