A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 陈汉维 于 2012-8-17 13:37 编辑

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();
}
}

外部类的变量名、局部中的变量名、局部中内部类的变量名都为num的情况下,怎么访问局部中的变量名?
知道的请回答下,谢谢!!!

14 个回复

倒序浏览
{:soso_e136:}怎么没人回答,求解!谢谢
回复 使用道具 举报
本帖最后由 焦晨光 于 2012-8-17 13:10 编辑

在内部类的构造方法中加入外部类的局部变量就可以访问。
我现在在网吧,无法测试,你可以试一下。
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:08
在内部类的构造方法中加入外部类的局部变量就可以访问。
我现在在网吧,无法测试,你可以试一下。
class In ...

不行。这样只能访问到局部中内部类的num。我要访问的是局部中的变量num
回复 使用道具 举报
你在外部方法中将值传进去也不可以吗?
public void method(){
  final int num = 5;-->怎么访问这个
  Inner(num);//后面加这个语句,如果还不可以,我也就迷茫了
回复 使用道具 举报
你都已经重写了,你把它的变量名变一下,你就会发现可以访问了
回复 使用道具 举报
牛杨 中级黑马 2012-8-17 13:26:35
7#
这个问题 我曾经试过,想了好长时候。应该是没法再内部流中访问到  final int num = 5;

要么修改 这个变量的名称。
要么就在method方法的里面(Inner类的)外面来访问这个 final int num = 5;

我认为是这样,不知道还有没有别的更好的办法了。 持续关注中……
回复 使用道具 举报
焦晨光 发表于 2012-8-17 13:16
你在外部方法中将值传进去也不可以吗?
public void method(){
  final int num = 5;-->怎么访问这个

{:3_48:}不行。我访问的是外部类中的方法中的常量,该常量在内部类外面。
回复 使用道具 举报
黎健东 发表于 2012-8-17 13:21
你都已经重写了,你把它的变量名变一下,你就会发现可以访问了

{:3_48:}被final修饰了,怎么被重写。那是一个常量
回复 使用道具 举报
牛杨 发表于 2012-8-17 13:26
这个问题 我曾经试过,想了好长时候。应该是没法再内部流中访问到  final int num = 5;

要么修改 这个变量 ...

{:3_48:}我估计只能这样了。貌似没法直接访问。
回复 使用道具 举报
陈汉维 发表于 2012-8-17 13:36
我估计只能这样了。貌似没法直接访问。

再等等吧 ,把问题置顶。 说不定都有高手来有更好的解释了。
回复 使用道具 举报
牛杨 发表于 2012-8-17 13:38
再等等吧 ,把问题置顶。 说不定都有高手来有更好的解释了。

挽尊啊。木人回答,蛋疼
回复 使用道具 举报
本帖最后由 黎健东 于 2012-8-17 16:43 编辑
陈汉维 发表于 2012-8-17 13:28
被final修饰了,怎么被重写。那是一个常量

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;
回复 使用道具 举报
呵呵,不能钻牛角尖啊,这在理论上根本不可能啊,如果你想在Inner中访问final int num=5;那么你是想破坏java的理论基础啊,这是不可能的,
回复 使用道具 举报
哎,首先java中的全局变量在类中定义,主类中定义static就是全局变量了,这个你肯定知道,。。。。。,C++中的全局变量在外面可以定义,JVM加载顺序是。。。。。其实你很明白。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马