在class A中定义一个 static 变量 a,在class B中对 Class A中的 a赋值为123,在class C和 class D中调用Class A中的 a得到值为123。求方法!

解决方案 »

  1.   


    public class A{
        public static int a = 0;
    }public class B{
        static{
            A.a = 123;
        }
    }public class C{
        public static void main(String args[]){
            B b=new B();
            System.out.println(A.a);
        }
    }
      

  2.   

    class A {
      public static int a;
    }你这个静态变量到哪都可以访问,直接:
    A.a = 123;
    System.out.println(A.a);只不过是存在并发隐患。
      

  3.   

    首先谢谢楼上的回复,但这不是我想要的结果,我可能说的不是够详细,拿1楼的来说:在class里 new B(),写法倒是没错,但我在class里面是一个操作数据库的操作,我会写一个定时器,每10秒从一个非关系数据库里查询一次,如果在class C里面new B()的话,我每一个用户都会new B(),如果一百个用户都调用class C那每一秒就好查询10次数据库,这样的开销是很大的,最好能在class C里直接A.a取到值而不实例化class B。
    -----------------------
    我再说下我要解决的问题:
    我在前台有一个JSP页面,里面有个定时方法,会每10秒从一个非关系数据库里取数据,如果说打开一百个页面的话那每一秒就会查询10次数据库,所以现在想改方法,页面的定时方法从后台的一个静态变量里取数据,而这个静态变量里的数据是由另一个方法定时推送进去的(就像我上面提出的功能一样)。求思路,能给方法最好,有思路就给分。拜谢各位大神。
      

  4.   


    public class A{
        public static int a = 0;
        public static B b = new B();
    }public class B{
        static{
            A.a = 123;
        }
    }public class C{
        public static void main(String args[]){
            System.out.println(A.a);
        }
    }
    其实我这里写的new B()是为了在C要访问A的时候将类B加载进jvm,因为如果不new B()的话jvm是不会加载类B的,所以类B里对A.a的修改就没有效果。如果怕C的访问过多,每次都new B(),那么就将new B()放在A里即可。而按你的设计来说,类B实际上是启动一个定时器取查询数据库然后修改A.a的,所以当你启动定时器的时候B就加载进了jvm,而B对A.a的修改也就有效了,所以在C里也不用new B()。
      

  5.   

    你应该看的是ServletContext set 和 get attribute ...
      

  6.   

    服务端--》生产者-------->定时生成数据
    客户端--》消费者-------->消费该数据
      

  7.   

    不好意思,有事耽搁结贴晚了,谢谢 Squall1009 的思路,用ServletContext 实现了,谢谢lip009的方法,也谢谢其他人的参与,热心人还是很多的?再次感谢大家。