A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class TT extends Thread {

int b = 100;

public synchronized void m1()throws Exception{

b=1000;

Thread.sleep(3000);

System.out.println("m1:"+"b="+b);

}

public  void m2(){

System.out.println("m2"+b);

}

public void run(){

try {

m1();

} catch (Exception e) {

// TODO: handle exception

}

}

public static void main(String[] args) throws Exception {

TT tt = new TT();

Thread t = new Thread(tt);

t.start();

Thread.sleep(100);

tt.m2();

}
}
答案是 先输出m2的1000 在输出m1的1000,这里我就不懂了,int b = 100;前面没有加static,为什么被改变了?我以为m2应该输出还是100的,公共变量,只要下面哪个方法里改了,这个变量本身值就真的改了吗?不需要加static的?

1 个回复

倒序浏览
本帖最后由 宋浩 于 2012-6-13 16:01 编辑
  1. package Test;

  2. import org.omg.CORBA.PRIVATE_MEMBER;

  3. public class TestStatic {
  4. public static void main(String args[]){
  5. Test t1=new Test();
  6. Test t2=new Test();
  7. t1.print();
  8. t1.changem1();
  9. t1.changem2();
  10. t1.print();

  11. t2.print();
  12. }
  13. }

  14. class Test{
  15. int m1=100;
  16. static int m2=100;

  17. public void changem1(){
  18. m1=1000;
  19. System.out.println("改变非静态变量m1的值");
  20. }

  21. public void changem2(){
  22. m2=1000;
  23. System.out.println("改变静态变量m2的值");
  24. }

  25. public void print(){
  26. System.out.println("非静态变量m1的值:"+m1);
  27. System.out.println("静态变量m2的值:"+m2);
  28. }
  29. }
复制代码
楼主,可以看哈上面的程序代码哈,其实你的代码就是一个静态成员变量和非静态成员变量的问题。。因为静态成员是属于类的,所以一个对象改变后,另一个对象也会发生改变,非静态成员变量是属于对象的,所以在同一个对象中改变他的值才会发生改变,你好像就创建了一个对象吧。。上面程序运行结果如下图:

未命名.jpg (1.39 MB, 下载次数: 27)

未命名.jpg

点评

谢谢分享的文章!  发表于 2012-6-13 17:46
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马