繁体   English   中英

为什么我不能使用object.variable_name从其他类调用变量?

[英]why can't i call variable from other class using object.variable_name?

我刚刚开始学习Java,并且尝试自己进行测试。 以下是我遇到错误的代码。 我想打电话给在B类的局部变量class Demo使用的对象class B

public class Demo {
    public static void main(String args[])
    {
        B obj=new B();
        System.out.println("printing that variable "+obj.a);
    }
}
class B{
    public void test()
    {
        int a=10;
    }
}

输出:

线程“主”中的异常java.lang.Error:未解决的编译问题:无法解决或不是Demo.main(Demo.java:7)中的字段

因为在

class B {
    public void test() {
        int a = 10;
    }
}

atest方法的局部变量。 如果您尝试做的事情是可能的,那么在类似情况下应使用什么值

class B {
    public void test1() {
        int a = 10;
    }
    public void test2() {
        int a = 20;
    }
}

如果a来自test1test2 对于编译器,这两个方法同样正确,因此无法为您决定,这将导致问题。 同样也不要忘记,只要方法在不同的作用域内,方法就可以有几个同名变量,这就是为什么我们可以有几个for(int i...)方法(所以您要在哪个范围内使用i ) 。

一般而言. 运算符用于访问类的成员 ,而不是方法的变量 因此,可以通过object.member来访问object.method()object.field 如果你的班级看起来像

class B{
    public int x;
    public void test1() {
        int a = 10;
    }
}

您可以使用object.b因为b是B类字段


无论如何,如果要访问仅在方法test创建和使用的变量的值,则可以更改此方法以返回此值。 换句话说,您可以像这样重写它

public int test1() {
    int a = 10;
    //... you can do something with a
    return a;
}

现在,在Demo类的main方法中,您可以使用int result = obj.test();

您可以随时调用,但这需要在范围内以及当前上下文可以访问的时间。

System.out.println("printing that variable "+obj.a);

您不能这样做,因为变量a是方法test()局部变量,并且作用域仅限于该方法。

要访问您现在想要的方式,请使其成为实例成员。

class B{
int a;  // instance member now
public void test()
{
a=10;
}
}

现在请注意,除非调用方法test() ,否则默认值仅是0 因此,您可能希望将代码更改为

public static void main(String args[])
{
B obj=new B();
obj.test();
System.out.println("printing that variable "+obj.a);
}

如果您根本不想调用某个方法直接访问a方法,则可以执行

public class Demo {
public static void main(String args[])
{
B obj=new B();
System.out.println("printing that variable "+obj.a);
}
}
class B{
public int a= 10;
}

注意: 在运行程序之前,请务必解决所有编译错误:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM