如何在Java中使用来自其他类的私有编号

如何在Java中使用来自其他类的私有编号,java,variables,methods,Java,Variables,Methods,嗨,我有两节课 class Table { private int number = 20; //here i have some methods... public int getNumber(){ return number; } } 我也有这个方法: class Basic { public static void main(String args[]){ Table table = new Table();

嗨,我有两节课

class Table
{
    private int number = 20;

    //here i have some methods...

   public int getNumber(){
       return number;
   }
}
我也有这个方法:

class Basic
{
    public static void main(String args[]){
        Table table = new Table();
        //here i declare my variables
        while(score > table.getNumber()){
            //do work
        }
    }
}

我一会儿就有问题了。我打印了一张表格以查看。getNumber始终为0。有人能帮我吗?

我刚刚运行了以下代码:

class Basic {
    public static void main(String args[]) {
        Table table = new Table();
        System.out.println(table.getNumber());
    }
}
输出:

20

所以你的运作方式有问题。尝试在新目录中从头开始。

它与您正在设置的内容相关

例如:如果您在
表中有一些setter,并手动或自动调用它

像下一个:

class Table
{
    private int number = 20;

    //here i have some methods...

   public int getNumber(){
       return number;
   }

   public void setNumber(int number){
      this.number = number;
   }
}

或者,一些元编程(使用反射)

另外,
Unsafe
也有一些技巧,但如果您将int设置为20并尝试获取,您将获得20,为了更好/更清晰的测试,请尝试将
final
添加到
number
字段,如下一步:

class Table
{
    private final int number = 20;

    //here i have some methods...

   public int getNumber(){
       return number;
   }
}

有些事情你没有告诉我们——在我看来,
数字总是20。向我们证明一下。展示一个最简单的代码示例(在这里您应该很容易编写),我们可以复制、粘贴到一个新文件中,运行javac,然后运行java,并查看您的代码是否确实生成了这些代码。通常,当你为人们制作文件时,你实际上是自己发现问题的,而且永远不需要在线询问。
    Table table = new Table();
    Field field  = table.getClass().getDeclaredField("number");
    field.setAccessible(true);
    field.set(table, 0);
    System.out.println(field.get(table));
class Table
{
    private final int number = 20;

    //here i have some methods...

   public int getNumber(){
       return number;
   }
}