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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱秀梅 初级黑马   /  2012-6-10 16:48  /  1138 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Outer
{
    public static void main(String[] args) throws Exception
    {
        new Outer().greetWorld();
    }

    private void greetWorld()throws Exception
    {
        System.out.println( Inner.class.newInstance() );
    }

    public class Inner
    {
        public String toString()
        {
            return "Hello world";
        }
    }
}我是这么设计的,Outer中的main方法创建了一个Outer实例,并且调用了它的greetWorld方法,这个方法以字符串形式打印了通过反射创建的一个新的Inner实例。Inner的toString方法总是返回标准的问候语,程序的输出应该输出Hello World。
但是编译的时候出错了  没想明白哪错了  童鞋们  给指点下 !

2 个回复

倒序浏览
静态成员不能访问非静态成员,----外部类的静态方法、静态代码块不能访问非静态内部类不能使用非静态内部类定义的变量、创建实例等
总之:不允许在外部类的静态成员中直接使用非静态内部类。[code=java]package cn.itcast.heima
public class TestStatic
{
        //定义一个非静态的内部类,是一个空类
        private class In{}
        //外部类的静态方法
        public static void main(String[] args)
        {
                //下面代码引发编译异常,因为静态成员(main方法)无法访问非静态成员(In类)
                new In();
        }
}[/code]总结:对于static而言,类成员(包括方法、初始化快、内部类和枚举类)不能访问实例成员(包括属性、方法、初始化快、内部类和枚举类);
因为:这是类成员是属于类的,类成员的作用域比实例成员的作用域更大,完全可能出现类成员已经初始化完成,但是实例成员还不能初始化,如果运行类成员访问实例成员讲话引起大量错误。
回复 使用道具 举报
  1. import java.lang.reflect.Method;

  2. public class Outer
  3. {
  4.      public static void main(String[] args) throws Exception
  5.      {
  6.          Inner in = new Outer().new Inner();    //首先new一个内部类的对象
  7.          Method md = in.getClass().getMethod("toString");   //利用这个对象获取到类的字节码并调用getMethod()获取到这个类里面的toString方法体。
  8.          System.out.println(md.invoke(in));                          //然后就可以使用md.invoke()来执行实例里面的方法了。这就是反射   方法的应用
  9.      }


  10.      public class Inner
  11.      {
  12.          public String toString()
  13.          {
  14.              return "Hello world";
  15.          }
  16.      }
  17. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马