java编程中的反射问题

简介:

Outer.javapackage ref;

 

public class Outer

{

        public Outer()

        {

                System.out.println("Outer()");

        }

 

        public class Inner

        {

                public Inner()

                {

                        System.out.println("Inner()");

                }

 

                public void innerM()

                {

                        System.out.println("Inner's m()");

                }

 

                public String toString()

                {

                        return "Inner's toString()";

                }

        }

}
复制代码测试类package ref;

 

import java.lang.reflect.Constructor;

import java.lang.reflect.Method;

 

public class TestInnerRef

{

        public static void main(String[] args) throws Exception

        {

//                method1();

                method2();

        }

        /*

         * 利用类名Outer$Inner得到内部类的类对象

         * 直接newInstance会抛出java.lang.InstantiationException: ref.Outer$Inner

         * 构造成员内部类对象需要外部类对象,所以这样使用有问题

         */

        public static void method1() throws Exception

        {

                Class c = Class.forName("ref.Outer$Inner");

                System.out.println(c.getName());

                Object o = c.newInstance();

        }

       

        public static void method2() throws Exception

        {

                Class outc = Class.forName("ref.Outer");

                Object outer = outc.newInstance();

               

                Class[] incs = outc.getClasses();

                for (Class inc : incs)

                {

                        System.out.println(inc.getName());

                        Constructor con = inc.getConstructor(new Class[]{outc});

                        Object inner = con.newInstance(outer);

                        System.out.println(inner);

                        Method m = inc.getMethod("innerM", new Class[]{});

                        m.invoke(inner, new Object[]{});

                }

        }

}








本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/814840,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
140 6
|
4月前
|
Java API 微服务
为什么虚拟线程将改变Java并发编程?
为什么虚拟线程将改变Java并发编程?
299 83
|
1月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
174 0
|
2月前
|
SQL Java 数据库
2025 年 Java 从零基础小白到编程高手的详细学习路线攻略
2025年Java学习路线涵盖基础语法、面向对象、数据库、JavaWeb、Spring全家桶、分布式、云原生与高并发技术,结合实战项目与源码分析,助力零基础学员系统掌握Java开发技能,从入门到精通,全面提升竞争力,顺利进阶编程高手。
517 1
|
1月前
|
安全 前端开发 Java
从反射到方法句柄:深入探索Java动态编程的终极解决方案
从反射到方法句柄,Java 动态编程不断演进。方法句柄以强类型、低开销、易优化的特性,解决反射性能差、类型弱、安全性低等问题,结合 `invokedynamic` 成为支撑 Lambda 与动态语言的终极方案。
144 0
|
3月前
|
安全 Java 数据库连接
2025 年最新 Java 学习路线图含实操指南助你高效入门 Java 编程掌握核心技能
2025年最新Java学习路线图,涵盖基础环境搭建、核心特性(如密封类、虚拟线程)、模块化开发、响应式编程、主流框架(Spring Boot 3、Spring Security 6)、数据库操作(JPA + Hibernate 6)及微服务实战,助你掌握企业级开发技能。
550 3
|
2月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
429 100
|
2月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
217 16
|
2月前
|
NoSQL Java 关系型数据库
超全 Java 学习路线,帮你系统掌握编程的超详细 Java 学习路线
本文为超全Java学习路线,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架(如Spring Boot)、数据库(MySQL、Redis)及项目实战等内容,助力从零基础到企业级开发高手的进阶之路。
264 1