反射应用(二)
紧接着我们学习了反射应用如何去反射类中的方法在里面的代码:
1. 错误: java.lang.InstantiationException: com.csdn.java02.Student
2. at java.lang.Class.newInstance0(Class.java:340)
3. at java.lang.Class.newInstance(Class.java:308)
4. at com.csdn.java02.Work.test1(Work.java:24)
5. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
6. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
7. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
8. at java.lang.reflect.Method.invoke(Method.java:597)
9. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
10. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
11. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
12. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
13. at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
14. at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
15. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
16. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
17. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
18. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
19. at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
20. at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
21. at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
22. at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
23. at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
24. at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
25. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
26. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
27. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
28. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
29. 错误解析:在使用class的newInstance()方法的时候必须确保Student类中有一个无参数的构造器
30. 加载类中的方法如何用反射输出:
31. ① 解析 如何获取类中所有方法
32. @Test
33. public void test()throws Exception{
34. //1加载类
35. Class cls = Class.forName("cn.csdn.reflect.Student");
36. /*//2、解析构造器
37. Constructor csr = cls.getConstructor(null);
38. //3、创建类的实例
39. Student entity = (Student)csr.newInstance(null);*/
40. Student entity = (Student)cls.newInstance();
41. Method mds[] = cls.getMethods();
42. for(Method m:mds){
43. System.out.println(m.toGenericString());
44. }
45. }
46. ② 解析:public void study()方法
47. @Test
48. public void test1()throws Exception{
49. //1加载类
50. Class cls = Class.forName("cn.csdn.reflect.Student");
51. Student entity = (Student)cls.newInstance();
52. //2解析方法
53. Method md = cls.getMethod("study", null);
54. //3、执行
55. Object obj = md.invoke(entity, null);//当没有返回值的时候 ,返回的是null
56. System.out.println(obj);
57. /*Student st = new Student();
58. st.study();*/
59. }
60. ③解析 public int getSum(int a,int b)方法
61. @Test
62. public void test2()throws Exception{
63. //1.加载类
64. Class cls = Class.forName("cn.csdn.reflect.Student");
65. Student entity =(Student)cls.newInstance();
66. //解析方法
67. Method md = cls.getMethod("getSum", int.class,int.class);
68. //执行
69. Object obj = md.invoke(entity, 12,12);
70. System.out.println((Integer)obj);
71. }
72. ④解析 类中的主方法 public static void main(String[] args)
73. @Test
74. public void test3()throws Exception{
75. Class cls=Class.forName("com.csdn.java02.Student");
76. Student student=(Student)cls.newInstance();
77. Method md=cls.getMethod("main",String[].class);
78. String str[]={"111","123"};
79. Object obj=md.invoke(student,(Object)str);
80. System.out.println(obj);
81. }
分享到:
相关推荐
#### 二、反射基本概念 反射可以让我们在运行时获取.NET类型的所有信息,包括类、结构体、委托、接口和枚举等。通过反射,我们可以获取这些类型成员的详细信息,比如方法、属性、事件以及构造函数等,并且可以进一步...
#### 二、Java中的类反射 ##### 2.1 Reflection的工作机制 Java中的反射机制允许运行中的程序检查和修改自身的结构和行为。这种能力在其他编程语言中是非常罕见的,比如Pascal、C或C++等静态类型语言就没有这样的...
#### 二、Java反射机制的应用场景及示例 ##### 1. 判断一个类是否是某个类的实例或子类 ```java Class<?> cls = Class.forName("com.example.Jdk"); boolean isInstance = cls.isInstance(new Jdk()); System.out....
**二、反射** 反射是Java编程语言的一个特性,允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Android中,我们可以使用反射来访问那些未公开的API,比如获取应用的缓存信息。 1. **获取...
#### 二、反射机制中需要使用到的关键类 反射机制主要涉及到以下几个关键类: - **Class**:表示一个类或接口的运行时表示形式。它是所有反射操作的基础。 - **Constructor**:表示一个类的构造器,用于创建类的新...
二向反射分布函数(Bidirectional Reflectance Distribution Function,简称BRDF)是计算机图形学中的一个核心概念,用于描述物体表面如何散射入射光。在3D渲染和照明模拟中,理解并精确计算BRDF是至关重要的,因为...
标题提到的".NET中反射的应用 获取Dll参数",指的是通过反射来获取DLL(动态链接库)中的类、方法、参数等元数据。这在需要动态调用DLL中的功能或者需要在不修改原有代码的情况下扩展功能时非常有用。下面将详细介绍...
在本案例中,WENOZ+格式被应用于求解二维欧拉方程的双马赫数反射问题。这意味着,程序将使用WENOZ+差分格式离散化二维欧拉方程,并采用适当的边界条件来模拟流体在固体壁面上的反射。网格参数和Courant-Friedrichs-...
#### 二、Java反射的应用场景 Java反射广泛应用于框架开发、动态代理、测试工具等领域。例如,在Spring框架中,反射被用来动态创建对象和调用方法;在Hibernate等ORM框架中,反射用于处理数据库记录与Java对象之间...
#### 二、Java中的类反射 Java的反射机制是一种强大的工具,允许程序在运行时检查和操作类、接口、字段和方法等。这是Java语言特有的功能,使得Java程序比其他语言(如C、C++)更加灵活。 ##### 2.1 Reflection的...
这篇博文"Java反射机制学习(二)"可能深入探讨了如何利用反射进行动态类型处理、访问私有成员以及创建对象等核心概念。在这里,我们将详细讨论Java反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: ...
在提供的"版本一、版本二"文件中,很可能是两个不同的MATLAB代码实现,可能是为了对比不同算法的效率或精度,或者是不同版本的优化。分析和比较这两个版本的代码,可以帮助我们更好地理解多层媒质反射透射问题的求解...
#### 二、金属高反射膜概述 金属高反射膜是指能够将大部分甚至全部入射光能量反射回去的一种光学元件。根据不同的需求,金属高反射膜可以分为几类: 1. **单一金属膜**:适用于对反射率有基本要求但对吸收率和透射...
#### 二、红外反射式传感器原理及特点 红外反射式传感器是一种常用的近距离检测传感器,它通过发射红外光,并接收由物体反射回来的光线来检测物体的存在与否。这种传感器具有响应速度快、成本低、易于集成等优点,...
二、电磁波反射系数 电磁波反射系数(Reflection Coefficient)是指电磁波在介质界面上的反射行为。它是电磁波在介质界面上的反射行为的描述。电磁波反射系数通常用Γ(gamma)表示。它的计算公式为: Γ = (E_r /...
在实际应用中,你可能需要对输入数据进行有效性检查,并考虑异常处理,以确保程序的健壮性。 通过这个C程序,我们可以方便地计算任意两种介质之间P波的反射系数,从而在地质勘探或地震分析中分析波的传播特性。了解...
在二维空间中,反射通常涉及通过一条直线(即反射轴)进行操作,使得所有点关于这条线形成对称。在三维空间中,反射可能涉及到一个平面。反射变换可以用一个2x2或3x3的矩阵来表示,这个矩阵的特征值是1,但有至少一...
二、反射的基本操作 1. 获取类型信息:通过Type类,我们可以获取任何类型的完整信息,包括类名、基类、接口、成员等。例如,typeof(MyClass)返回MyClass的Type对象。 2. 动态创建对象:使用Type对象的GetMethod、Get...