`
zhhphappy
  • 浏览: 121302 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 反射内部类

    博客分类:
  • java
阅读更多

内部类的初始化同一般类的初始化基本相同,只是内部类的类名全称有些区别。下面定义了一个Outer类和一个Inner类:

public class Outer{
   public class Inner{
   }
}


   通过如下方法可以得到Inner类的类名:

public class Outer{
   public class Inner{
   }
   public static void main(String[] args){
      System.out.println(Inner.class);
   }
}


   从输出结果可以看到,Inner的类名是xxx.xxx.Outer$Inner这种形式的。这是Java中所谓的synthetic name。也就是这个名字在源代码中是找不到对应的文件的,是编译器经过修饰之后的名字。
   反射实例化内部类的代码如下:

public class Outer{
   public class Inner{
   }
   public static void main(String[] args){
      System.out.println(Inner.class);
      //查看class是否有构造函数
      System.out.println(Inner.class.getConstructors().length);
      //获取第一个构造函数
      System.out.println(Inner.class.getConstructors()[0]);
      //用构造函数初始化内部类
      System.out.println(Inner.class.getConstructors()[0].newInstance(new Outer());
   }
}


    从上面代码的打印输出可以看到,公开非静态内部类的默认构造函数需要一个外围类的实例。
    如果是public static的内部类,则默认构造函数是一个无参的构造函数。如果把Inner类的public关键字去掉,运行上面代码会发现抛错了,因为找不到 Inner的构造函数。这个时候只需要将getConstructors方法换成getDeclaredConstructors就可以了。
    如果内部类是私有的,在初始化的时候要将构造函数的访问设置成true。如下:

public class Outer{
   private class Inner{
   }
   public static void main(String[] args){
      System.out.println(Inner.class);
      //查看class是否有构造函数
      System.out.println(Inner.class.getDeclaredConstructors().length);
      //获取第一个构造函数
      Constructor c = Inner.class.getDeclaredConstructors()[0];
      //将c设置成可访问      
      c.setAccessible(true);
      //用构造函数初始化内部类
      System.out.println(c.newInstance(new Outer());
   }
}


    当然,构造类的时候还是要遵循Java的可见性的,比如在其他类里面就没有办法初始化一个类中的私有内部类。

分享到:
评论

相关推荐

    java 利用反射获取内部类静态成员变量的值操作.docx

    本文将详细介绍如何使用Java反射技术来获取内部类中的静态成员变量的值。 #### 二、背景知识 在深入探讨之前,我们需要了解几个基本概念: 1. **内部类**:内部类是一种特殊的类,定义在另一个类(外部类)的内部。...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    反射私有内部类的例子

    ### 反射私有内部类的例子 #### 一、引言 在Java编程语言中,反射(Reflection)是一项强大的功能,允许程序在运行时检查和修改自身结构与行为。通过反射,可以动态地获取类的信息并操作其字段、方法以及构造器等。...

    java反射 java反射 java反射java反射

    总之,Java反射机制为开发者提供了极大的灵活性,能够在运行时探索和操作类的内部细节,从而实现高度动态的程序设计。然而,过度使用反射可能会降低代码可读性和性能,因此应当权衡利弊,合理运用。

    java反射,获取所有属性、方法以及List集合类

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建对象、获取类...

    JAVA_内部类_反射机制

    总之,Java的内部类提供了灵活的类设计能力,特别是对于继承和多态的需求,而反射机制则为Java代码提供了运行时的强大灵活性,允许程序在运行时动态地操作类和对象。两者结合使用,可以解决许多复杂的编程问题,但也...

    Java反射机制总结

    ### Java反射机制总结 ...总之,Java反射机制是Java语言的一个重要特性,它提供了在运行时动态获取类信息和操作类结构的能力。合理使用反射可以提高程序的灵活性和扩展性,但在使用时也需要考虑到其潜在的问题和限制。

    java反射实例

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用...在分析Java反射源码时,可以更深入地了解其内部实现机制,提升对Java平台的理解。

    Java反射经典实例

    Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等信息,即使这些信息在编译时并未明确知晓。在Java中,反射通常通过`java.lang.Class`类和相关的API来实现。本实例将...

    java 反射机制例子

    Java反射机制是Java语言的一项重要特性,它使得程序能够在运行时获取和操作类的内部信息。虽然反射提供了强大的功能,但在使用时应谨慎,以免引入不必要的性能损耗或安全风险。对于初学者而言,了解并掌握Java反射...

    java反射工具类 ReflectionUtils

    Java反射工具类ReflectionUtils简化了反射操作,使得开发者能够更加方便地探索和操作类的内部结构。理解并合理使用反射工具类,可以提高开发效率,但也需要留意其潜在的安全性和性能问题。在实际开发中,应根据项目...

    JAVA 反射机制应用

    Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是java.lang.Class,它代表了运行时的类信息。通过Class对象,我们...

    JAVA 反射详解PPT

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过反射,我们可以动态地创建对象、访问和修改字段、调用方法,甚至执行私有方法和访问包内可见的元素。...

    java例子 java反射

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是`java.lang.Class`,它代表了类的信息。当我们需要在运行时动态地...

    Java反射学习.pdf

    Java 反射可以分为三大类:类反射、方法反射和构造器反射。 类反射 Java 反射可以获取类的信息,例如类的名称、类的属性、类的方法等。使用 Class.forName() 方法可以获取类的对象,然后使用 getMethods() 方法...

    java 反射的使用

    接着,创建一个实现了这些方法的匿名内部类,并通过反射的`newInstance()`方法创建实例。 6. **委托代理** - 委托代理是一种设计模式,通常用于动态构建代理对象,实现代理模式。在Java中,可以使用`java.lang....

    java反射获取所有属性,获取所有get方法,包括子类父类

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建动态代理等。...

    java反射机制文档及代码

    Java反射机制是Java编程语言中一个强大的特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用方法以及...

    java反射经典实例

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在本“Java反射经典实例”中,我们将深入探讨这个主题,了解如何利用反射来访问和修改私有属性以及...

Global site tag (gtag.js) - Google Analytics