在Java编程中,从外部类获取变量值通常涉及到内部类(Inner Class)的使用。内部类是定义在另一个类内部的类,它可以访问外部类的所有成员,包括私有成员。以下是一些基础概念和相关信息:
static
关键字定义的内部类,只能访问外部类的静态成员。public class OuterClass {
private int outerVariable = 10;
public class InnerClass {
public void display() {
System.out.println("Value of outerVariable: " + outerVariable);
}
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.display(); // 输出: Value of outerVariable: 10
}
}
public class OuterClass {
private static int outerStaticVariable = 20;
public static class StaticInnerClass {
public void display() {
System.out.println("Value of outerStaticVariable: " + outerStaticVariable);
}
}
public static void main(String[] args) {
OuterClass.StaticInnerClass staticInner = new OuterClass.StaticInnerClass();
staticInner.display(); // 输出: Value of outerStaticVariable: 20
}
}
public class OuterClass {
private int outerVariable = 30;
public void someMethod() {
class LocalInnerClass {
public void display() {
System.out.println("Value of outerVariable: " + outerVariable);
}
}
LocalInnerClass localInner = new LocalInnerClass();
localInner.display(); // 输出: Value of outerVariable: 30
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.someMethod();
}
}
public class OuterClass {
private int outerVariable = 40;
public void someMethod() {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Value of outerVariable: " + outerVariable);
}
};
new Thread(runnable).start(); // 输出: Value of outerVariable: 40
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.someMethod();
}
}
原因:内部类默认持有对外部类实例的引用,但静态上下文中无法访问非静态成员。
解决方法:
static
。public class OuterClass {
private static int outerStaticVariable = 50; // 改为静态变量
public static class StaticInnerClass {
public void display() {
System.out.println("Value of outerStaticVariable: " + outerStaticVariable);
}
}
public static void main(String[] args) {
OuterClass.StaticInnerClass staticInner = new OuterClass.StaticInnerClass();
staticInner.display(); // 输出: Value of outerStaticVariable: 50
}
}
通过这些示例和解释,你应该能够理解如何从外部类获取变量值,并解决相关问题。
领取专属 10元无门槛券
手把手带您无忧上云