`
kuaile863
  • 浏览: 115982 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

反射的应用(一)

阅读更多

反射的应用(一)

1. 类的加载:是指把类的 .class 文件中的二进制数据说读入到内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。
2. 如何加载类代码:
3. public void test() throws ClassNotFoundException {
4. // 1、加载类
5. Class cls = Class.forName("cn.csdn.reflect.Student");
6. System.out.println(cls);
7. // 2、加载类
8. Student stu = new Student();
9. Class cls1 = stu.getClass();
10. System.out.println(cls1);
11. // 3、加载类
12. Class cls2 = Student.class;
13. System.out.println(Student.class);
14. }
15. 如何将加载类并利用反射解析:
16. 解析:类中的无惨的构造器 public Student();
17. @Test
18. public void test() throws Exception{
19. //1、加载类
20. Class cls=Class.forName("com.csdn.java01.Student");
21. //2、通过带无惨的构造器解析
22. Constructor constructor=cls.getConstructor(null);
23. //3、创建类实例-->类的构造函数没有参数所以是空
24. Student student=(Student) constructor.newInstance(null);
25. student.study();
26. }
27. 解析:类中的有惨的构造器public Student(String name,int age);
28. @Test
29. public void test2()throws Exception{
30. //1、加载类
31. Class cls = Class.forName("cn.csdn.reflect.Student");
32. //2、通过带有参数的构造器解析
33. Constructor constructor = cls.getConstructor(String.class,int.class);
34. //3、创建类实例-->类的构造函数有参数所以需要值
35. Student entity = (Student)constructor.newInstance("redarmy",90);
36. //4、调用方法
37. entity.study();
38. System.out.println(entity.getName());
39. }
40. 解析:类中的有惨的构造器public Student(String str[]);
41. @Test
42. public void test4()throws Exception{
43. //1、加载类
44. Class cls = Class.forName("cn.csdn.reflect.Student");
45. //2、根据构造器参数类型获取相应的构造器对象
46. Constructor csr = cls.getConstructor(String[].class);
47. String str[]={"111","123"};
48. //3、创建实体对象
49. Student entity = (Student)csr.newInstance((Object)str);
50. //4、调用方法
51. entity.study();
52. }
53. 反射在类中构造函数传数组参数是应把它专为Object类型由于Student(String strs[])构造器只有一个String数组的参数所以这是编译器会把字符串数组当作一个可变长度参数传 给对象strs,而我们取得方法只有一个参数,所以就会出现wrong number of arguments的异常,我们只要把字符串数组强制转换为一  个Object对象就可以解决这个异常了,
54. 执行代码:
55. //解析:public cn.csdn.reflect.Student(java.lang.String[])
56. @Test
57. public void test4()throws Exception{
58. //1、加载类
59. Class cls = Class.forName("cn.csdn.reflect.Student");
60. //2、根据构造器参数类型获取相应的构造器对象
61. Constructor csr = cls.getConstructor(String[].class);
62. //3、创建实体对象
63. Student entity = (Student)csr.newInstance(new String[]{});
64. //4、调用方法
65. entity.study();
66. }
67. 解析:类中的有惨的构造器public Student(String str[],double a);
68. @Test
69. public void test4()throws Exception{
70. //1、加载类
71. Class cls = Class.forName("cn.csdn.reflect.Student");
72. //2、根据构造器参数类型获取相应的构造器对象
73. Constructor csr = cls.getConstructor(String[].class,double.class);
74. String str[]={"111","123"};
75. //3、创建实体对象
76. Student entity = (Student)csr.newInstance(new String[]{“12”,”13”},1.0);
77. //4、调用方法
78. entity.study();
79. }
80. 如何知道类中所有的构造器?
81. 代码如下:
82. public void test3()throws Exception{
83. //1、加载类
84. Class cls = Class.forName("cn.csdn.reflect.Student");
85. //2、获取加载类中的所有的构造器
86. Constructor csr[] = cls.getConstructors();
87. //3、遍历构造器csr
88. for(Constructor c:csr){
89. //打印出构造器参数的类型及构造器名称
90. System.out.println(c.toGenericString());
91. }
92. }

 

1
3
分享到:
评论

相关推荐

    Java反射简单应用

    几个小demo,介绍了反射的几个api操作,最后写了一个简单的Java反射应用:工厂+反射+配置文件。

    C# 反射技术应用

    3. **获取元数据**:反射提供了一种方式来获取类型和成员的元数据,这对于构建元数据驱动的应用程序非常有用。 #### 四、反射的基本操作 1. **加载程序集**:使用`Assembly`类来加载一个程序集,这通常是从文件系统...

    反射Reflection小应用

    在提供的"Test"压缩包文件中,可能包含了一个简单的反射应用示例,例如创建一个类,然后通过反射调用其方法或访问其字段。学习这个小例子可以帮助初学者更好地理解反射的实际运用。然而,反射虽然强大,但应谨慎使用...

    c# 反射应用几乎最全面的实例

    这个"c# 反射应用几乎最全面的实例"集合可能是为了展示反射的各种应用场景和用法。以下是对C#反射及其应用的详细解释。 反射的概念: 反射是.NET框架提供的一种能力,它允许代码在运行时分析自身,获取类型信息,...

    Java反射技术的一般应用

    我的代码注释非常详细,相信当你看完之后,一般来说,如果不是新手(非常菜的人),那么你应该学会使用反射技术来实现封装的动作了--也就是说,你的技术有了一个非常大的提高--如果你看完之后,参见该示例中另外的...

    JAVA 反射机制应用

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

    java反射机制应用

    ### Java反射机制应用详解 #### 一、Java反射机制简介 Java反射机制是Java语言提供的一种能在运行时分析类信息并动态操作对象的功能。通过反射,我们可以在程序运行期间获取类的信息(如类名、方法名等),创建...

    Sev.Reflection.rar_C# 反射 封装_反射_反射应用封装

    综上,"Sev.Reflection.rar"提供的示例是一个实用的C#反射封装应用,它简化了对其他DLL的调用过程,通过封装反射操作,使得开发者能够更加方便、安全地利用运行时类型信息进行编程。在实际项目中,这样的封装可以...

    XML解析与反射应用联合.zip

    "XML解析与反射应用联合"的主题,意味着这个压缩包可能包含了一个示例项目,展示了如何结合XML解析和反射来实现灵活的配置和动态行为。例如,可能有一个XML配置文件定义了某些类的实例化和它们应执行的方法,然后...

    java的反射机制及其实际应用

    ### Java的反射机制及其实际应用 #### 一、引言 Java作为一种强大的编程语言,提供了许多高级特性,其中反射机制尤为突出。通过反射,开发者可以在运行时动态地获取类的信息并操纵类的行为,从而实现更加灵活和...

    C#中反射的应用小结

    反射是C#的一个重要概念,如何使用很重要,有必要抽时间好好学习一下!

    利用aidl和反射获取应用的缓存,应用大小等数据

    在Android系统中,开发者可以利用Android Interface Definition Language (AIDL) 和反射机制来获取应用程序的缓存信息以及应用的整体大小。下面将详细讲解这两个技术及其在获取这些数据时的应用。 **一、Android ...

    java反射机制的原理及在Android下的简单应用

    通过理解反射机制的工作原理及其在Android开发中的应用,开发者可以更好地利用这一特性来优化和扩展应用程序的功能。然而,值得注意的是,反射操作可能会导致性能下降,并且可能会破坏封装性,因此在使用时需谨慎...

    java反射应用实例

    在标题“Java反射应用实例”中,我们关注的是如何在实际项目中利用反射来实现特定的功能。这篇博客文章(可以通过链接访问)可能会探讨以下几个方面: 1. **什么是反射**:首先,我们需要理解反射的基本概念。反射...

    c#中的特性(attribute)+反射的一个例子

    在这个例子中,`MyCustomAttribute`可以应用于类或方法,并且有一个`Description`属性,用于存储描述信息。 接下来,我们可以在代码中使用这个特性: ```csharp [MyCustom("这是一个使用特性的示例")] public ...

    .NET中反射的应用 获取Dll参数

    在.NET框架中,反射是一种强大的机制,它允许我们在运行时动态地探索和操作类型的信息,包括类、结构、委托、接口、枚举等。反射可以让我们在不知道具体类型的情况下创建对象、调用方法、访问字段和属性,从而增加了...

    反射电桥的原理和应用.zip

    反射电桥,作为一种重要的电子测量技术,主要用于检测和分析电路中的阻抗参数。它基于四端网络理论,通过比较信号的反射与传输特性,来精确测量未知阻抗。这一技术在射频(RF)、微波及无线通信领域具有广泛的应用。...

    C#反射(Reflection)的应用

    综上所述,这个压缩包提供了一个全面的反射学习平台,涵盖了从基本原理到实际应用的多个方面。通过分析和实践这些示例,开发者将更好地掌握C#反射这一强大功能,从而在编程实践中更加灵活和高效。

Global site tag (gtag.js) - Google Analytics