Java 为什么可以';我是否使用object.variable\u名称从其他类调用变量?
我刚刚开始学习Java,我正在尝试自己测试一些东西。下面是我遇到错误的代码。我试图使用Java 为什么可以';我是否使用object.variable\u名称从其他类调用变量?,java,Java,我刚刚开始学习Java,我正在尝试自己测试一些东西。下面是我遇到错误的代码。我试图使用类B的对象调用类Demo中类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
类B
的对象调用类Demo
中类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中出现异常。错误:未解析编译
问题:无法解决或不是当前的字段
main(Demo.java:7)
您可以随时调用,但这需要在范围内,并且当当前上下文可以访问时
您不能这样做,因为变量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注意:在运行程序之前,请始终解决所有编译错误:),因为
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类字段
无论如何,若您想访问创建的变量值,并且仅在方法
测试中使用,您可以更改此方法以返回此值。换句话说,你可以像这样重写它
public int test1() {
int a = 10;
//... you can do something with a
return a;
}
现在在Demo
类的main方法中,您可以使用int result=obj.test()代码>非常感谢:)我正在学习阶段,将再次尝试澄清我的疑问和概念:)@Lamiahart很乐意帮助。如果您真的帮助了您,请将其标记为答案。“未解决的编译问题”不是您的第一条错误消息。是什么?想在你的答案中添加一些东西。同样,B类是默认的。所以这两个类都应该在同一个包中。@这是真的,但不要涉及访问修饰符及其与创建类的位置的关系。同样基于OP示例,我怀疑B
与Demo.java
文件在同一个包中,这意味着它与Demo
在同一个包中。
public int test1() {
int a = 10;
//... you can do something with a
return a;
}