package test;
import org.junit.Test;
public class Outer {
int num = 8;
@Test
public void method(){ final int num = 5;-->怎么访问这个 class Inner{
int num = 3;
public void show(){
System.out.println(num); //结果:3
System.out.println(this.num); //结果:3
System.out.println(Outer.this.num); //结果:8
}
}
Inner in = new Inner();
in.show();
}
}
在内部类的构造方法中加入外部类的局部变量就可以访问。
我现在在网吧,无法测试,你可以试一下。
class Inner{
int num = 3;
public void show(){
System.out.println(num); //结果:3
System.out.println(this.num); //结果:3
System.out.println(Outer.this.num); //结果:8
}
public Inner(int num)
{
this.num=num;
System.out.println(num);
}
} 作者: 陈汉维 时间: 2012-8-17 13:12
焦晨光 发表于 2012-8-17 13:08
在内部类的构造方法中加入外部类的局部变量就可以访问。
我现在在网吧,无法测试,你可以试一下。
class In ...
不行。这样只能访问到局部中内部类的num。我要访问的是局部中的变量num作者: 焦晨光 时间: 2012-8-17 13:16
你在外部方法中将值传进去也不可以吗?
public void method(){
final int num = 5;-->怎么访问这个
Inner(num);//后面加这个语句,如果还不可以,我也就迷茫了作者: 黎健东 时间: 2012-8-17 13:21
你都已经重写了,你把它的变量名变一下,你就会发现可以访问了作者: 牛杨 时间: 2012-8-17 13:26
这个问题 我曾经试过,想了好长时候。应该是没法再内部流中访问到 final int num = 5;
要么修改 这个变量的名称。
要么就在method方法的里面(Inner类的)外面来访问这个 final int num = 5;
public class Test001_InnerClass {
public static void main(String[] args){
method();
}
private static void method() {
final int x = 0;
// int y = 1;
class inner{
//存在以下的一个拷贝
//final int x = 0;
//不能访问
// y = 2;
//如果你把这个注释解开,就是用x=1了,不会使用x=0,可以理解成重写(不准确),也可以说跳过访问
// int x = 1;
public inner() {
System.out.println(x);
//下面不能访问
// System.out.println(y);
}
}
new inner();
}
}
输出的结果为0,说明访问了 final int x = 0;作者: 王峰 时间: 2012-8-17 16:48
呵呵,不能钻牛角尖啊,这在理论上根本不可能啊,如果你想在Inner中访问final int num=5;那么你是想破坏java的理论基础啊,这是不可能的,作者: 王峰 时间: 2012-8-17 16:51
哎,首先java中的全局变量在类中定义,主类中定义static就是全局变量了,这个你肯定知道,。。。。。,C++中的全局变量在外面可以定义,JVM加载顺序是。。。。。其实你很明白。。。