![](/img/trans.png)
[英]What is the use of Constructor in Java when you can call class variable using 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;
}
}
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
类的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.