我刚刚开始学习Java,我正在尝试自己测试一些东西。下面是我收到错误的代码。我试图使用class Demo
的对象在class B
中调用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;
}
}
输出:
线程“main”中的异常java.lang.Error:未解析的编译 问题:一个无法解决或者不是一个领域 Demo.main(Demo.java:7)
答案 0 :(得分:2)
因为在
class B {
public void test() {
int a = 10;
}
}
a
是test
方法的局部变量。如果你想做的事情是可能的,那么在
class B {
public void test1() {
int a = 10;
}
public void test2() {
int a = 20;
}
}
a
来自test1
还是来自test2
?对于编译器,这两种方法同样正确,因此无法为您做出决定,这会导致问题。另外,我们不要忘记,只要它们位于不同的范围内,该方法可以包含少量具有相同名称的变量,这就是为什么我们可以使用少量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
课程的主要方法中,您可以使用int result = obj.test();
答案 1 :(得分:1)
您可以随时致电,但这需要在范围内以及当前上下文有权访问时。
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;
}
Imp注意:在运行程序之前始终解决所有编译错误:)