黑马程序员技术交流社区

标题: 外部类是否能访问局部内部类中的常量? [打印本页]

作者: hnyzhlq    时间: 2015-6-6 16:44
标题: 外部类是否能访问局部内部类中的常量?
本帖最后由 hnyzhlq 于 2015-6-6 17:58 编辑


如以上代码,运行是会报错的,要怎么操作,才能达到第五行代码的目的,在外部类W中访问到X?







作者: hnyzhlq    时间: 2015-6-6 16:46
请各位大神解答!!
作者: fenglinluomu    时间: 2015-6-6 16:55
直接new W().test();
作者: hnyzhlq    时间: 2015-6-6 17:50
fenglinluomu 发表于 2015-6-6 16:55
直接new W().test();

我不是要执行test()函数,我是要直接访问X
作者: hnyzhlq    时间: 2015-6-6 18:00
fenglinluomu 发表于 2015-6-6 16:55
直接new W().test();

问题已修改,这样问应该会清楚一点- -
作者: fenglinluomu    时间: 2015-6-6 19:02
可以的,你可以研究一下下面这段代码,用的反射,不要问我为什么,解释起来很繁琐。
  1. package com.itheima.demo;

  2. /**
  3. * @author RuiWu
  4. */

  5. import java.lang.reflect.Constructor;
  6. import java.lang.reflect.Field;


  7. class W
  8. {
  9.         public void test()
  10.         {      
  11.                 class N//定义在局部的内部类。
  12.                 {
  13.                         final int x=1;//需要访问的常量。
  14.                         void show()
  15.                         {
  16.                                 System.out.println("X="+x);
  17.                         }
  18.                 }
  19.                 new N().show();
  20.         }
  21.         
  22.         public static void main(String[] args) throws Exception {

  23.                         Class<?> clazz = Class.forName("com.itheima.demo.W$1N");
  24.                         Constructor con = clazz.getDeclaredConstructor(W.class);
  25.                         Object obj = con.newInstance(new W());
  26.                        
  27.                        
  28.                         Field f = clazz.getDeclaredField("x");
  29.                         System.out.println(f.get(obj));
  30.                 }
  31. }
复制代码

作者: hnyzhlq    时间: 2015-6-6 19:38
fenglinluomu 发表于 2015-6-6 19:02
可以的,你可以研究一下下面这段代码,用的反射,不要问我为什么,解释起来很繁琐。 ...

好的,谢谢,我还没学到反射T.T学了再回来看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2