1. 反射调用默认访问权限的内部类

package com.blueStarWei.invoke;

import java.lang.reflect.Method;

import com.blueStarWei.invoke.OuterClass.InnerClass;

class OuterClass {
public void func(){
System.out.println("Outer Class.");
} class InnerClass {
private String mName;
public InnerClass(String mName) {
this.mName = mName;
}
void getName(){
System.out.println("Name is : "+mName);
} }
} public class OuterInnerClass { public static void main(String[] args) {
try {
/*通过反射实例化内部类
* 强大之处在于:当内部类私有化(private class InnerClass)时,也可以调用
* */
Class outerClass = Class.forName("com.blueStarWei.invoke.OuterClass");
Class innerClass = Class.forName("com.blueStarWei.invoke.OuterClass$InnerClass");
Method method = innerClass.getDeclaredMethod("getName");
//TODO study it
//内部类newInstance的第一个参数必须是外部类实例的引用
method.invoke(innerClass.getDeclaredConstructors()[0].newInstance(outerClass.newInstance(),"Wei"));//Name is : Wei /*常规方法实例化内部类
* 当内部类私有化时,无法通过该方式实例化内部类
* */
OuterClass outerClass1 = new OuterClass();
InnerClass innerClass1 = outerClass1.new InnerClass("David");
innerClass1.getName();//Name is : David
} catch (Exception e) {
e.printStackTrace();
}
}
}

2. 反射调用静态内部类

package com.blueStarWei.invoke;

import java.lang.reflect.Method;

class OuterClass {
public void func(){
System.out.println("Outer Class.");
} static class InnerClass {
private String mName;
public InnerClass(String mName) {
this.mName = mName;
}
void getName(){
System.out.println("Name is : "+mName);
}
}
} public class StaticInnerClass { public static void main(String[] args) {
try {
/*通过反射实例化内部类 */
Class outerClass = Class.forName("com.blueStarWei.invoke.OuterClass");
Class innerClass = Class.forName("com.blueStarWei.invoke.OuterClass$InnerClass");
Method method = innerClass.getDeclaredMethod("getName");
//静态内部类没有持有外部类的引用,不需要传递外部类实例对象的引用
method.invoke(innerClass.getDeclaredConstructors()[0].newInstance("Wei"));//Name is : Wei } catch (Exception e) {
e.printStackTrace();
}
}
}

3. 反射调用匿名内部类

package com.blueStarWei.invoke;

class OuterClass {
public Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("This is InnerClass.");
}
};
} public class AnonymousInnerClass {
public static void main(String[] args) {
try {
Class outerClass = Class.forName("com.blueStarWei.invoke.OuterClass");
//将匿名内部类当作外部类的成员变量
Runnable runnable = (Runnable) outerClass.getDeclaredField("runnable").get(outerClass.newInstance());
runnable.run();
} catch (Exception e) {
e.printStackTrace();
}
}
}

   更多内容,请访问:http://www.cnblogs.com/BlueStarWei/

Java反射之调用内部类的更多相关文章

  1. 通过JAVA反射,调用未知类的类方法

    下面是一个比较简单的通过JAVA的反射机制调用已知方法的例子 package com.togeek.mvntest; import java.lang.reflect.InvocationTarget ...

  2. Java 反射 方法调用

    在使用Java 反射时,对方法的调用,可能碰到最多的问题是,方法的变量如何使用.其实,调用方法的变量全部在参数数组里,不管有多少个参数,你都要把它放在参数数组里,如果是单个非数组参数,则可不使用参数数 ...

  3. Java反射机制调用对象的方法 —— 将一个对象的属性值赋值给另一个对象的属性

    模拟一个场景: 众所周知,EasyExcel导出Excel文档是依赖于注解完成的,在实体类需要导出的属性上面加上注解,导出的时候会自动识别该属性. 假如我们现在需要导出用户的信息,又不想污染原本的实体 ...

  4. 利用java反射动态调用方法,生成grid数据

    项目中需要java后台查询并组装前台grid的数据,数据行数不定,数据行定义不定,开始用了最原始的方法,写了几百行,就是前台需要什么字段后台拼接什么字段,java代码冗余量非常大,并且不够灵活,一旦前 ...

  5. Java反射机制调用private类型的构造方法

    单例类: package singleton; public class SingletonTest { // 私有构造方法 private SingletonTest(){ System.out.p ...

  6. Java反射机制调用私有方法

    1.获取目标类: 每个类都有一个class属性,通过实体类的class属性获取: Class clazz = Person.class 通过对象获取.  Person p1 = new Person( ...

  7. Java 反射 调用私有构造方法

    单例类: package singleton; public class SingletonTest { // 私有构造方法 private SingletonTest(){ System.out.p ...

  8. java 通过反射机制调用某个类的方法

    package net.xsoftlab.baike; import java.lang.reflect.Method; public class TestReflect {     public s ...

  9. java反射 cglib asm相关资料

    有篇文章对java反射的调用的效率做了测试,写的比较好.猛击下面地址 http://www.blogjava.net/stone2083/archive/2010/09/15/332065.html ...

随机推荐

  1. 【java虚拟机系列】java中类与对象的加载顺序

    首先了解一下Java虚拟机初始化的原理. JVM通过加装.连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用.类型的生命周期如下图所示: 装载和连接必须在初始化之前就要完成. 类 ...

  2. 银联在线 网关支付 (JAVA版)

    这一版本的编写是在我上一次博客的基础上写的,有不懂得童鞋可以先看下我的原先在线支付的博客,熟悉下:http://blog.csdn.net/yulei_qq/article/details/45197 ...

  3. iOS开发之六:常用控件--UIImageView的使用

    UIImageView是我们做iOS开发用的非常多的一个控件,IOS中的各种图片,包括头像,有的背景图片等基本都要用到这个控件. 1.常用的属性以及方法 <span style="fo ...

  4. 分布式进阶(五)之JSVC配置

    应用场景:在linux系统上进行项目开发,在部署java项目时,常用方法就是写一个shell脚本,但当服务器重启了,经常会忘了启动shell脚本了.所以我们需要把自己的应用变成linux的服务,当服务 ...

  5. Ubuntu 安装 Mysql 5.6 数据库

    Ubuntu 安装 Mysql 5.6 数据库 1)下载: mysql-5.6.13-debian6.0-x86_64.deb http://dev.mysql.com/downloads/mirro ...

  6. LCD正向扫描和反向扫描

    LCD正向扫描和反向扫描 LCD扫描一般分正向扫面和反向扫描,分别针对正装和倒装结构(如下): 有时候提到长边扫描和短边扫描应该是针对横屏和竖屏的设置,大部分显示屏是正向扫描,是否都支持,和玻璃有关, ...

  7. R12中注册客户化应用为多组织应用

    Oralce EBS R12中引入了MOAC的控制,所有多OU的表对象都添加了数据库VPD的控制策略,需要访问这些对象中的数据,首先需要进行多组织环境的初始化,但是如果客户化的应用中也需要具备多OU的 ...

  8. H5 学习之旅-H5表格(7)

    表格语法 table:简历表格 captian:表格标题 th:表格行表头 tr:表格行 td:单元格 thead:表格页眉 tfoot:表格页脚 tbody:表格主体 col:列属性 !!!代码实例 ...

  9. python-inotify 在linux上安装

    python-inotify 在linux上安装 0 下载 $ wget --no-check-certificate https://pypi.python.org/packages/source/ ...

  10. saiku查询结果返回地址(saiku交互过程)

    提交mdx语句,执行后, 查询结果的获得,访问这个地址: http://99.999.99.99:8080/saiku/rest/saiku/anonymousUser/query/4FF7D01E- ...