andysern
andysern
采纳率6.3%
2016-10-14 09:59

java怎么在一个类中取到另一个类的静态数值及静态方法呢?

有一个类Tempa
public class Tempa {
public static int num = 0;

public synchronized void add(){
    num++;
}

public static int getNum(){
    return num;
}

public static void main(String[] args) throws InterruptedException {
    // TODO 自动生成的方法存根
    Tempa a = new Tempa();
    for(int i = 0;i<100;i++){
        Thread.sleep(500);
        a.add();
    }

}

}

里面有静态数值和一个静态方法

但是在另一个类里却取不到Temp
public class Temp {

public static void main(String[] args){

    System.out.println(Tempa.getNum());
}

}

一直输出就是0,没有得到想要的数值,请大神帮忙看一下呢。谢谢啊

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • blueair_ren 努力的人儿 5年前

    需要把你的getNum()方法的权限设置为private,因为权限是public时,外部的程序就会绕过synchronized void add()方法。
    定义private 的instance变量+它的 get方法,而不要定义public/protected的instance变量。如果将变量定义为public,对象在外界可以
    绕过同步方法的控制而直接取得它,并改动它。

    点赞 1 评论 复制链接分享
  • manzhizhen 飞向札幌的班机 5年前

    你执行的是Temp类的main方法,它是不会去调用Tempa中的main方法的。

    public static void main(String[] args) throws InterruptedException {
    // TODO 自动生成的方法存根
    Tempa a = new Tempa();
    for(int i = 0;i<100;i++){
    Thread.sleep(500);
    a.add();
    }
    }
    改成静态块:
    static {
    // TODO 自动生成的方法存根
    Tempa a = new Tempa();
    for(int i = 0;i<100;i++){
    Thread.sleep(500);
    a.add();
    }
    }

    点赞 评论 复制链接分享
  • a129439 a129439 5年前

    因为它们是两个进程,并不属于同一个环境,所以才会是0吧。你放到一个应用环境就可以

    点赞 评论 复制链接分享
  • qq_29594393 当作看不见 5年前

    你把add 里面的方法写错了,改为num+=1; num++,要使用才会加1;其他的没有问题。

    点赞 评论 复制链接分享

相关推荐